首页 > 其他分享 >Verilog语法 - 阻塞赋值 & 非阻塞赋值

Verilog语法 - 阻塞赋值 & 非阻塞赋值

时间:2023-06-16 10:46:40浏览次数:48  
标签:always 旧值 阻塞 如下 Verilog 赋值 时钟


1. 非阻塞赋值

  • 代码如下
always @( posedge clk )
begin
    b<=a;
    c<=b;
end
  • RTL会综合出两个寄存器串行,如下波形图所示,第一个时钟上升沿来临时,会把a的旧值赋值给b;同时,c获得的是b的旧值,而不是从a那里拿到的新值。
  • 非阻塞赋值可以理解成 a对b的赋值 并不阻塞 b对c的赋值,两行代码可以看成并行执行,在时钟沿到来时,b和c同时获得值;
  • 波形图如下

2. 阻塞赋值

  • 代码如下
always @(posedge clk)
begin
    b=a;
    c=b;
end
  • RTL只会综合出一个寄存器,在上升沿来临时,会把a的旧值赋值给b,之后,b再将从a获得的新值赋值给c。
  • 阻塞赋值可以理解成a赋值给b的这个过程阻塞b赋值给c,所以当b拿到了a的旧值之后,才会赋值给c。

3. 阻塞赋值和非阻塞赋值的原则

  • 错误的使用阻塞赋值可能会导致出现竞争冒险:如果在一个过程块中阻塞赋值的RHS 变量正好是另一个过程块中阻塞赋值的LHS 变量,这两个过程块又用同一个时钟沿触发,如果阻塞赋值的次序安排不好,就会出现竞争。
  • 使用下面的原则编码会更安全
    • 时序电路建模时,用非阻塞赋值。
    • 锁存器建模时,使用非阻塞赋值。
    • 用always 块写组合逻辑时,采用阻塞赋值。
    • 在同一个always 块中同时建立时序和组合逻辑电路时,用非阻塞赋值。
    • 在同一个always 块中不要同时使用非阻塞赋值和阻塞赋值。
  • 注意,阻塞赋值和非阻塞赋值都是可用在always块中的时序逻辑和组合逻辑。只是遵守上面的原则编码会更安全。

标签:always,旧值,阻塞,如下,Verilog,赋值,时钟
From: https://www.cnblogs.com/qianbinbin/p/17484960.html

相关文章

  • 队列全集(线程池任务队列选择,有界队列,阻塞队列)
    转载:https://juejin.cn/post/7125373259066900493https://juejin.cn/post/6870298844425371655#comment......
  • SystemVerilog接口练习
           结合《SystemVerilog验证测试平台编写指南》和《FPGA应用开发和仿真》,在gVim里敲代码,学习一下接口的用法。1interfacemembus2#(3parameterLEN=256,DW=84)5(6inputwireclk,7inputwirerst8);9logic[$clog2(......
  • c# 相同类 赋值
    publicDMapper<D,S>(Ss){Dd=Activator.CreateInstance<D>();try{varsType=s.GetType();vardType=typeof(D);foreach(PropertyInfosPinsType.GetP......
  • java开发C语言解释器:数组元素的读取和赋值
    本节技术内容难度较大,请结合视频对代码的讲解和调试来理解本节内容:用java开发编译器一个成熟的编译器或解释器,要能够解析和执行目标语言开发的逻辑复杂的程序代码,我们用java开发的C语言解释器,能够执行用C语言开发的较为复杂的程序时,才称得上是合格的,从本节开始,我们致力于C语言解......
  • axios-使用解构赋值
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="utf-8"><title></title></head><body><buttonid="btnPost">发起POST请求</button><buttonid="btnG......
  • SystemVerilog练习(结构体加队列)
           《SystemVerilog验证测试平台编写指南》,刚刚学完队列和结构体,就想练习一下。1moduleTestStruct;2typedefstructpacked3{4bit[7:0]addr;5bit[7:0]pr;6bit[15:0]data;7}Packet;89Pac......
  • m基于FPGA的AGC自适应增益控制系统verilog实现,包含testbench
    1.算法仿真效果Vivado2019.2仿真结果如下:放大后可以看到:2.算法涉及理论知识概要数字AGC(AutomaticGainControl)是一种广泛应用于通信系统中的自动增益控制技术。它可以自动调节接收信号的增益,以使信号的强度保持在适当的范围内,从而保证接收到的信号质量。数字AGC广泛应......
  • m基于FPGA的CRC循环冗余校验系统verilog实现,包含testbench
    1.算法仿真效果本系统进行了两个平台的开发,分别是:Vivado2019.2Quartusii18.0+ModelSim-Altera6.6dStarterEdition其中Vivado2019.2仿真结果如下:Quartusii18.0+ModelSim-Altera6.6dStarterEdition的测试结果如下:对比matlab结果:2.算法涉及理论知识概要CRC(CyclicR......
  • m基于FPGA的CRC循环冗余校验系统verilog实现,包含testbench
    1.算法仿真效果本系统进行了两个平台的开发,分别是: Vivado2019.2 Quartusii18.0+ModelSim-Altera6.6d StarterEdition 其中Vivado2019.2仿真结果如下:   Quartusii18.0+ModelSim-Altera6.6d StarterEdition的测试结果如下:  对比matlab结果:  2......
  • m基于FPGA的AGC自适应增益控制系统verilog实现,包含testbench
    1.算法仿真效果Vivado2019.2仿真结果如下:  放大后可以看到:   2.算法涉及理论知识概要       数字AGC(AutomaticGainControl)是一种广泛应用于通信系统中的自动增益控制技术。它可以自动调节接收信号的增益,以使信号的强度保持在适当的范围内,从而保证接收到......