FPGA基础篇(一):阻塞与非阻塞赋值,不只是比原始信号差一个时钟周期的问题!(深入剖析)
时间:08-19
来源:电子大兵
点击:
阻塞与非阻塞赋值
首先从名字上理解,阻塞赋值即赋值没完成,后边的语句将无法执行,非阻塞刚好与其相反,即赋值完不完成并不阻碍后续程序的执行,所以我们常说非阻塞赋值的对象并未立马得到新值,如果从时序来看,被赋值对象会比赋值对象差一个时钟周期。
有了上述理解之后,我们就很容易明白为什么阻塞赋值的对象会立即发生改变,在fpga中我们多接触到的是时序电路,并不希望被赋值对象立即改变,所以有对于组合电路而言,常用阻塞赋值,时序电路常用非阻塞赋值。
先看一个大家都熟悉的例子:
先看非阻塞代码:
clk为主时钟分频之后的时钟,clk先赋值给a,然后a在赋值给b,看一看生成的电路图
可以看出是两个触发器,而且前一个触发器的输出是后一个触发器的输入,再来看看阻塞的
由于完全为组合电路并未有触发器产生,从仿真结果来看两种的区别
相信大家能够很容易看出哪个是阻塞的,哪个是非阻塞的,从非阻塞的时序来看,a比clk延迟了一个主时钟,b比a又延迟了一个主时钟,这不是我想说的重点,我想让大家看看a和b是什么时候开始发生变化的,教材上一直说是当整个进程结束时,a和b的值才发生更新,试问你知道什么时候进程结束么?从仿真结果来看,还不如理解为,在每个时钟的上升沿到来时a,b的值立即改变,只不过比原始信号差一个时钟周期。
fpga 相关文章:
- 用大电流LDO为FPGA供电需要低噪声、低压差和快速瞬态响应(08-17)
- 基于FPGA 的谐波电压源离散域建模与仿真(01-30)
- 基于FPGA的VRLA蓄电池测试系统设计(06-08)
- 降低从中间总线电压直接为低电压处理器和FPGA供电的风险(10-12)
- FPGA和功能强大的DSP的运动控制卡设计(03-27)
- DE0-Nano-SoC 套件 / Atlas-SoC 套件(10-30)