FPGA计数器边界问题解析

2023-09-14 15:44:33

FPGA计数器边界问题解析
一次作者在处理AMBE2000数据接收过程中,遇到一个问题,对该计数器边界总是模糊不清。现在予以说明,以警示以后工作时书写错误代码。

AMBE2000数据一旦准备好后,一次会输出24个字,其中第1个字0x13ec是同步头,连上同步头的前12个字为控制字,后12个字为数据字,我们需要提前数据字,抛弃控制字。作者的解决思路是:当捕获到0x13ec同步头后拉高一个flag,然后计数23次,完成整个接收过程。这其中需要拉个另一个flag,将后12个数据字表示出来。

问题:除去帧头标志外,还需要去掉11个字。计数器边界到底是卡在10还是11?模棱两可的。

always @(posedge clk or posedge rst) begin
	if (rst==1'b1) begin
		vld_frame_flag<=1'b0;		
	end
	else if ( frame_flag==1'b1 && frame_cnt>='d11 ) begin
		vld_frame_flag<=1'b1;	
	end
	else begin
		vld_frame_flag<=1'b0;	
	end
end

分析:需要去掉11字,那么计数器的边界肯定是11。以上代码验证是拉高时刻是正确的,frame_cnt是在data_vld条件下增加的,所以去掉前11个字,那么cnt11后立即拉高是可以的。也可以如下文所述:上一个时刻frame_cnt10,data_vld又再一次有效,也表示第11个数。

always @(posedge clk or posedge rst) begin
	if (rst==1'b1) begin
		vld_frame_flag<=1'b0;		
	end
	else if ( frame_flag==1'b1 && data_lvd==1'b1 && frame_cnt>='d10 ) begin
		vld_frame_flag<=1'b1;	
	end
	else begin
		vld_frame_flag<=1'b0;	
	end
end

在这里插入图片描述

结论:为统一期间,计数器的边界判断都需要带上计数条件,要判断n个数,判断条件就是: 条件 && n-1。

更多推荐

旧版office如何卸载干净,Mac电脑移除office教程

版office卸载不干净导致无法激活新版Microsoftoffice,这个问题如何解决呢?深受这一烦恼的小伙伴看过来!旧版office由于证书一直清理不干净,电脑上有旧证书存在导致新版offce激活不成功,具体手动清理方法带给大家。Microsoftoffice365安装方法一:关闭所有Office应用程序。打开“应

无线定位中TDOA时延估计算法matlab仿真

目录1.算法运行效果图预览2.算法运行软件版本3.部分核心程序4.算法理论概述5.算法完整程序工程1.算法运行效果图预览2.算法运行软件版本matlab2022a3.部分核心程序...................................................................figu

详解window.print(),实现长列表打印分页

相信大家平时做项目时,打印需求很常见,但想把打印做好,还是要花点时间的。特别是长列表要分页的情况。我们知道浏览原生API`window.print()`可以用于印当前窗口(window.document)视图内容。调用此方法会产生一个打印预览弹框,用户可以根据具体设置来得到打印结果。一、window的打印事件默认情况下

抄写Linux源码(Day12:从 MBR 到 C main 函数 (1) )

回忆我们需要做的事情:为了支持shell程序的执行,我们需要提供:1.缺页中断(不理解为什么要这个东西,只是闪客说需要,后边再说)2.硬盘驱动、文件系统(shell程序一开始是存放在磁盘里的,所以需要这两个东西)3.fork,execve,wait这三个系统调用,也可以说是进程调度(否则无法haltshell程序并且启

C++ 字符串

C++字符串C++提供了以下两种类型的字符串表示形式:C风格字符串C++引入的string类类型C风格字符串C风格的字符串起源于C语言,并在C++中继续得到支持。字符串实际上是使用null字符\0终止的一维字符数组。因此,一个以null结尾的字符串,包含了组成字符串的字符。下面的声明和初始化创建了一个RUNOOB字符串

【Linux】系统编程生产者消费者模型(C++)

目录【1】生产消费模型【1.1】为何要使用生产者消费者模型【1.2】生产者消费者模型优点【2】基于阻塞队列的生产消费者模型【2.1】生产消费模型打印模型【2.2】生产消费模型计算公式模型【2.3】生产消费模型计算公式加保存任务模型【2.3】生产消费模型多生产多消费【1】生产消费模型生产消费模型的321原则(便于记忆)。

WebGL中JS与GLSL ES 语言通信,着色器间的数据传输示例:js控制绘制点位

js改变点位,动态传值<canvasid="canvas"></canvas><!--顶点着色器--><scriptid="vertexShader"type="x-shader/x-vertex">attributevec4a_Position;voidmain(){//点位gl_Position=a_Positio

<Babel> 前端语言的巴别塔

Babel中文站点:https://www.babeljs.cn/Babel外文站点:https://babeljs.io/什么是BabelBabel取自人类语言最早的传说,TowerofBabel。上帝摧毁了巴别塔上说着共同语言的我们,又被Babel重新带了回来。如果说巴别塔是人们对混乱到秩序的向往,那Babel在前

详细介绍Webpack5中的Loader

loader用于帮助webpack将不同类型的文件转换为webpack可识别的模块。优先级分类pre:前置loadernormal:普通loader,没有用enforce指定就是normalinline:内联loaderpost:后置loaderloader执行顺序pre>normal>inline>post相同优先级

【深度学习】卷积神经网络(LeNet)【文章重新修改中】

卷积神经网络LeNet前言LeNet模型代码实现MINST代码分块解析1构建LeNet网络结构2加载数据集3初始化模型和优化器4训练模型5训练完成完整代码Fashion-MINST代码分块解析1构建LeNet网络结构2初始化模型参数3加载数据集4定义损失函数和优化器5训练模型完整代码参考与更多阅读材料前言全连接神经网络

前端进阶--深入理解JavaScript

1、JS的作用域和作用域链作用域链的作用是保证对执行环境有权访问的所有变量和函数的有序访问,通过作用域链,我们可以访问到外层环境的变量和函数。作用域链的本质上是一个指向变量对象的指针列表。变量对象是一个包含了执行环境中所有变量和函数的对象。作用域链的前端始终都是当前执行上下文的变量对象。全局执行上下文的变量对象(也就是

热文推荐