Verilog HDL阻塞属性探究及其应用

最新更新时间:2011-12-09来源: 互联网关键字:Verilog  HDL  阻塞属性 手机看文章 扫描二维码
随时随地手机看文章
Verilog HDL中,有两种过程赋值方式,即阻塞赋值(blocking)和非阻塞赋值(nonblocking)。阻塞赋值执行时,RHS(right hand statement)估值与更新LHS(left hand statement)值一次执行完成,计算完毕,立即更新。在执行时阻塞同块中的其他语句的执行。阻塞式(blocking)的操作符为 “ = ”。它的执行很像传统程序设计语言。非阻塞赋值RHS估值与更新LHS值分两步执行。在单位仿真周期开始时RHS估值,在同一单位仿真周期末更新LHS值,不阻塞同块中其他语句的执行。非阻塞式(non-blocking)的操作符为 “ <= ”,它的执行更像并行电路,使描述电路更自然。阻塞赋值与非阻塞赋值是Verilog HDL程序设计的难点,它们既有共同点,也有差异,深入剖析其异同,对于硬件程序的开发具有重大意义。

  1 Verilog 事件处理机制

  层积事件列(The Stratified Event Queue)是一个事件管理概念模型,而非硬件逻辑。模型内事件的具体实现与EDA软件生产商的算法策略有关。在IEEE-2001中,Verilog把事件分为5个不同部分,按照时间顺序如图1所示。

  

 

  触发的任何事件可以加入到这5个事件列中的任何事件列中,但只能从活跃事件列中移出。即上面的5个事件列中的事件最后都将被激活而放入活跃事件列中。层积事件列是层次模型,层积事件列的执行顺序是按优先级排列的。任何EDA软件都只能执行活跃事件。其他事件列都按优先级级别依次激活本列事件以供执行。

  1.1 活跃事件列

  由图1可见,大部分事件都被放入活跃事件列。活跃事件列里包括非阻塞赋值RHS估值。但是,非阻塞赋值的更新不是在活跃事件列,它被列成独立的非阻塞更新事件列。活跃事件列是仿真的执行源,从一开始执行活跃事件列到活跃事件列执行完毕称为一个仿真周期。活跃事件列中的事件可以触发活跃或非活跃等其他事件。当活跃事件列中的所有事件执行完后,EDA软件会按优先级依次触发其余事件列以供仿真执行。但在当前活跃事件列中的事件执行顺序是不确定的。

  1.2 非活跃事件列

  发生在当前仿真时间里并且在活跃事件列执行完后执行的事件列,即非活跃事件列执行优先级仅次于活跃事件列。如带PLI例程的回调过程(tf_synchronize()、vpi_register_cb(cb_readwrite))。非活跃事件列中的事件亦可以触发其他事件。如果触发了优先级更高的活跃事件,非活跃事件列中的其余事件执行后移。

  1.3 非阻塞赋值更新事件列

  活跃事件列中的每个非阻塞赋值RHS估值,都会触发一个与之对应的非阻塞赋值更新事件,这些事件被放在非阻塞赋值更新事件列中,执行优先级次于活跃与非活跃事件列。非阻塞赋值更新事件亦可以触发其他事件。若在非阻塞赋值更新事件列中,存在多个对同一变量的先后赋值,只有最后一个有效,其余值将被覆盖。

  1.4 监控事件列

  监控事件列被放在非阻塞赋值更新事件列后。由此可见,用监控事件列中的监控命令监控得到的值都是赋值后的值,活跃事件列$display系统命令则可以查看非阻塞更新前的值。

  1.5 未来事件列

  在执行事件时,如果事件含有延时,为不阻碍仿真的继续执行,该事件将被挂起而放入未来事件列。未来事件包含未来非活跃事件和未来非阻塞赋值更新事件。

  理解阻塞与非阻塞赋值就需要深入理解层积事件列,层积事件列反应了Verilog事件处理机制。

2 应用及分析

  通常非阻塞赋值产生寄存器等存储元件,对应的物理器件是带存贮功能的元件,如寄存器、触发器等。阻塞赋值则对应网线(wire)类型,通常与物理连线对应。这是两种赋值方式的最明显的差异,也是时序逻辑用非阻塞、组合逻辑用阻塞的重要原因。但这并不是绝对的,事实上阻塞赋值对应网线(wire)型,亦可对应寄存器(reg)型;阻塞赋值也能生成存贮元件,因此不能片面理解。在组合逻辑里,锁存器可能引发测试问题,带来隐患。说明在建模时,首先要从硬件出发来考虑问题,应先在头脑中形成电路结构,由于赋值方式的不同,综合结果差异甚大,运用不当很可能会导致建模失败。阻塞赋值在时序逻辑中亦有着重要应用,在需要实时更新的组合逻辑中只有阻塞赋值能满足要求。

  以下示例代码的功能是计算传送过来的data中1和0的个数。

  reg [5:0]count0,count1;

  always @(posedge clk,negedge Rst_n)

  begin

  if(!Rst_n)

  ...

  else

  begin

  count0 = 0; //语句1

  count1 = 0; //语句2

  for(i = 0;i <= 11;i = i+1)

  begin

  if(data[i] == 1)

  count1 = count1 + 1; //语句3

  else if(data[i] == 0)

  count0 = count0 - 1; //语句4

  else

  count0 = count0 + 0; //防止生成锁存器

  end

  end

  end

  在这段代码里,count0、count1的值必须在每次计数之前被清零,count0、count1必须实时更新。显然,只有阻塞赋值能满足要求。非阻塞赋值分两步完成,所有的更新事件在单位仿真周期末同时执行,只有最后一个值有效,所以非阻塞赋值无法完成计数任务。阻塞赋值却能很好地胜任,因为阻塞赋值估值和更新一次性完成。

  事件上,在时序逻辑中经常碰到上述实时更新问题,非阻塞赋值往往无法实现,如用阻塞赋值则可很好地解决问题。

  正如阻塞赋值在时序逻辑中有重要应用一样,非阻塞赋值在组合逻辑中亦有不可替代的应用。在组合逻辑中用非阻塞赋值可以把组合逻辑改造成流水线。可执行如下所示纯组合逻辑代码,将生成纯组合逻辑,综合结果如图2所示。

  

 

  input a,b,c,clk,sel;

  output out;

  reg out,temp;

  always @(posedge clk)

  begin

  temp = a & b; //语句1

  if(sel)

  out = temp | c; //语句2

  else

  out = c; //语句3

  end

  若把上面代码中语句1、语句2、语句3阻塞赋值(" = ")改为非阻塞赋值(" <= "),则综合结果如图3所示。

  

 

  流水线设计方法在高性能、需经常进行大规模运算的组合逻辑中可以到广泛运用。

  在组合逻辑中,如在begin、end块中同时有许多非阻塞赋值,则它们的赋值顺序是并发的。实际上它们赋予的都是上一个时钟送入寄存器的值。这与使用同一时钟沿触发的许多在同一个使能控制信号下赋值完全一致,并且这种赋值因为数据保存在寄存器中,当时钟沿到来时都已稳定,所以存入的数值是可靠的。用这种方法可以避免由组合逻辑产生的竞争冒险[2]。

  在相关应用中,非阻塞赋值能较好地解决零时刻竞争冒险问题。因为非阻塞赋值分两步完成,非阻塞赋值更新事件是在所有活跃与非活跃事件执行完之后执行,能确保所有敏感变量值在零时刻都被触发[3]。

  在同一always块混合使用阻塞赋值与非阻塞赋值,利弊共存,混合使用的结果可能事半功倍,亦可能功亏一篑。只有了解其处理机制,深刻理解阻塞与非阻塞赋值底层实现的异同,方可灵活运用。

  本文通过Verilog事件处理机制,详细讨论了阻塞与非阻塞赋值的区别、联系及其应用示例。由本文可知,阻塞与非阻塞赋值灵活多变,底层实现也差异甚大。因而在数字电路设计时,依据预期功能,从硬件实现出发,斟酌差异,仔细选用阻塞与非阻塞赋值才能有效避免出错,缩短开发周期。

关键字:Verilog  HDL  阻塞属性 编辑:神话 引用地址:Verilog HDL阻塞属性探究及其应用

上一篇:绝缘电线安全载流量表
下一篇:基于二阶相位扰动的DDS杂散抑制新方法

推荐阅读最新更新时间:2023-10-12 20:33

经典的verilog键盘扫描程序
拿到威百仕( VibesIC )的板子后就迫不及待的开始我的学习计划,从最基础的分频程序开始,但看到这个键盘扫描程序后,直呼经典,有相见恨晚的感觉,还想说一句:威百仕( VibesIC ),我很看好你!WHY?待我慢慢道来,这个程序的综合后是0error,0warning。想想自己编码的时候那个warning是满天飞,现在才明白HDL设计有那么讲究了,代码所设计的不仅仅是简单的逻辑以及时序的关系,更重要的是你要在代码中不仅要表现出每一个寄存器,甚至每一个走线。想想我写过的代码,只注意到了前者,从没有注意过后者,还洋洋自得以为自己也算是个高手了,现在想来,实在惭愧啊!学习学习在学习,这也重新激发了我对HDL设计的激情,威百仕给了我一个
[单片机]
基于Verilog计算精度可调的整数除法器的设计
  除法器是电子技术领域的基础模块,在电子电路设计中得到广泛应用。目前,实现除法器的方法有硬件实现和软件实现两种方法。硬件实现的方法主要是以硬件的消耗为代价,从而有实现速度快的特点。用硬件的方法来实现除法器的研究很多,如利用微处理器实现快速乘除法运算,FPGA实现二进制除法运算,模拟除法器等;而通过软件实现的除法器算法,可以大大提高器件的工作频率和设计的灵活性,可以从总体上提高设计性能,而设计高效实用的算法是除法器的关键,故除法器的算法研究成为现今热点。      目前,软件方面主要是通过减法算法来实现除法运算,把被除数作为被减数,除数作为减数,作减法,直到被减数小于减数为止,记录能够相减的次数即得到商的整数部分。将所得的余数乘以
[嵌入式]
基于<font color='red'>Verilog</font>计算精度可调的整数除法器的设计
科锐发布 Verilog-A 无线射频器件模型
2012年7月19日,中国上海讯 — 科锐公司(Nasdaq: CREE)宣布推出适用于 GaN 无线射频器件的全新 Verilog-A 非线性器件模型,该模型专为安捷伦的 ADS 以及 AWR 的 Microwave Office 等领先无线射频设计平台而研发。全新器件模型能够支持更为复杂的电路仿真,包括最新宽带调制包络分析和4G 蜂窝通信的多模式无线射频功率放大器。 科锐无线射频(RF)及微波部门总监 Jim Milligan 表示:“新型器件模型能够使得无线射频设计工程师通过谐波平衡预测非线性性能、进行瞬态分析以及使用真实环境中的任意调制信号进行科锐 GaN HEMT 器件的包络模拟。Verilog-A 模型和包络模拟
[网络通信]
芯片设计:verilog语法
1. 组合逻辑:assign wire = 。。。。。。; 2. 时序逻辑:always @(敏感列表) begin end always @(*) begin end 3. module name #(parameters) (signals); .............. endmodule 4. for 循环: genvar i; generate for(i=0;i 10;i=i+1) begin always ..... assign ..... end endgenerate
[单片机]
基于FPGA和Verilog的液晶显示控制器设计
   液晶显示器由于具有低压、微功耗、显示信息量大、体积小等特点,在移动通信终端、便携计算机、GPS卫星定位系统等领域有广泛用途,成为使用量最大的显示器件。液晶显示控制器作为液晶驱动电路的核心部件通常由集成电路组成,通过为液晶显示系统提供时序信号和显示数据来实现液晶显示。本设计是一种基于FPGA(现场可编程门阵列)的液晶显示控制器。与集成电路控制器相比,FPGA更加灵活,可以针对小同的液晶显示模块更改时序信号和显示数据。FPGA的集成度、复杂度和面积优势使得其日益成为一种颇具吸引力的高性价比ASIC替代方案。本文选用Xilinx公司的SpananIII系列XC3S200器件,利用硬件描述语言Verilog设计了液晶显示拧制器,实现
[电源管理]
基于FPGA和<font color='red'>Verilog</font>的液晶显示控制器设计
SystemC 和SystemVerilog的比较
就 SystemC 和 SystemVerilog 这两种语言而言, SystemC 是C++在硬件支持方面的扩展,而 SystemVerilog 则继承了 Verilog,并对 Verilog 在面向对象和验证能力方面进行了扩展。这两种语言均支持诸如信号、事件、接口和面向对象的概念,但每一种语言又均拥有自己明确的应用重点: (1) SystemC 特别适合建模体系结构,开发事务处理级(TL)模型和在验证中描述软件的行为。对于具有很强C++实力的团队和有基于C/C++ IP 集成要求(如处理器仿真器),以及为早期软件开发设计的虚拟原型来说, SystemC 特别适合。 (2) SystemVerilog 是进行RTL设
[模拟电子]
嵌入式存储器的设计方法和策略
       随着集成电路制造工艺水平的提高,半导体芯片上可以集成更多的功能,为了让产品有别于竞争对手的产品特性,在ASIC上集成存储器可以降低成本和功耗、改善性能、增加系统级芯片的可靠性。随着对嵌入式存储器需求的持续增长,其复杂性、密度和速度也日益增加,从而需要提出一种专用存储器设计方法。 存储器的外包设计         存储器模块都具有相对独立的特性,在一个时钟系统中它通常占用一个管道,从成本和人力资源两方面考虑,许多芯片开发商都将存储器模块外包设计,因为,与其它半导体芯片相比,在系统中定义和分离存储器模块要容易得多。此外,诸多因素促进了存储器编辑器及定制存储器设计公司的发展,例如:存储器模块的标准模块特性、对嵌入式存储器
[嵌入式]
CY7C68013与FPGA接口的Verilog HDL实现
0 引 言 USB(通用串行总线)是英特尔、微软、IBM、康柏等公司1994年联合制定的一种通用串行总线规范,它解决了与网络通信问题,而且端口扩展性能好、容易使用。最新的USB2.0支持3种速率:低速1.5 Mbit/s,全速12 Mbit/s,高速480 Mbit/s。这3种速率可以满足目前大部分外设接口的需要。 本文介绍了目前使用较多的USB2.0控制器CY7C68013芯片与FPGA(现场可编程门阵列)芯片接口的Verilog HDL(硬件描述语言)实现。本系统可扩展,完全可用于其他高速数据采集系统中。 1 系统构成 本系统主要是由FPGA和USB2.0控制器CY7C268013组成,系统框图及其信号
[应用]
小广播
最新模拟电子文章
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved