第4章 各种语句语法(已排)_第1页
第4章 各种语句语法(已排)_第2页
第4章 各种语句语法(已排)_第3页
第4章 各种语句语法(已排)_第4页
第4章 各种语句语法(已排)_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞第第4章章 Verilog 各种语句语法各种语句语法主讲教师:刘政林主讲教师:刘政林 童乔凌童乔凌硬件描述语言和数字系统设计硬件描述语言和数字系统设计华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞24.1 连续连续/持续赋值持续赋值4.2 过程块与过程块与always块块(敏感量敏感量)解释解释4.3 阻塞赋值和非阻塞赋值阻塞赋值和非阻塞赋值4.4 过程块内部使用的条件语句过程块内部使用的条件语句4.5 过程块内部使用的循环语句过程块内部使用的循环语句4.6 function和和task的了解的了解主要内容:主要内容:华中科技大学电子系郑朝霞华

2、中科技大学电子系郑朝霞34.1 连续连续/持续赋值持续赋值知识点:知识点:u4.1.1 基本语法基本语法u4.1.2 电路刷新动作的理解电路刷新动作的理解u4.1.3 连续赋值语句使用举例连续赋值语句使用举例u4.1.4 连续赋值的目标类型连续赋值的目标类型u4.1.5 连续赋值语句的并行执行情况连续赋值语句的并行执行情况u4.1.6 连续赋值语句的线与问题连续赋值语句的线与问题u4.1.7 连续连续/持续赋值语法总结持续赋值语法总结华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞44.1.1 基本语法基本语法u持续赋值只能对线网持续赋值只能对线网net型信号进行赋值。型信号进行赋值。语法格式

3、:语法格式: = ;例如:例如:wire out;assign out = a & b; / 显式,显式,推荐使用推荐使用wire inv = in; / 隐含,不推荐使用隐含,不推荐使用华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞54.1.2 电路刷新动作的理解电路刷新动作的理解module mux2to1 (out, a, b, sel); input a, b, sel; output out; wire out; assign out=(sel)?b:a;endmodule为什么不可以去掉为什么不可以去掉assign ,直接使用,直接使用out=(sel)?b:a; 赋值?

4、赋值?/去掉去掉assign好像也可以描述相同的电路功能。好像也可以描述相同的电路功能。华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞6module mux2to1 (out, a, b, sel); input a, b, sel; output out; wire out; assign out=(sel)?b:a;endmodule答案答案:去掉:去掉assign是可以描述电路功能。但是是可以描述电路功能。但是无法模拟出电路的不断刷新无法模拟出电路的不断刷新的动作。的动作。 所以采用保留字所以采用保留字assign,来模拟表达式左边信号,来模拟表达式左边信号out,随右边表达式信,随右

5、边表达式信号号sel、a或者或者b的变化,而不断刷新的动作!的变化,而不断刷新的动作!华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞7连续赋值语句如何刷新呢连续赋值语句如何刷新呢? assign out=(sel)?b:a; 在上面的例子中,只要右边信号在上面的例子中,只要右边信号sel或或a或或b的值发生的值发生了改变,了改变,EDA工具提取工具提取assign保留字,映射成左边信保留字,映射成左边信号号out能及时反应最新的逻辑结果。能及时反应最新的逻辑结果。 用用assign赋值赋值 反应出这种不断刷新的过程,让建模反应出这种不断刷新的过程,让建模语句的描述与实际电路工作情况吻合!语句

6、的描述与实际电路工作情况吻合!华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞8wire buserr, z;例例1: assign buserr = Parity| (One & OP) ;例例2: assign z= (A|B) & (C|D) & (E|F) ; 例例2中,只要右边的信号中,只要右边的信号A、B、C、D、E或或F的值变化,的值变化,右边整个表达式的逻辑将被刷新,结果右边整个表达式的逻辑将被刷新,结果Z将刷新为最新将刷新为最新值。值。4.1.3 连续赋值语句使用举例连续赋值语句使用举例华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞9 在下一个例子中

7、,目标是一个向量线网和一个标量线网的拼在下一个例子中,目标是一个向量线网和一个标量线网的拼接结果。接结果。 例例3: wire Cout, Cin ; wire 3:0 Sum, A, B; . . . assign Cout, Sum = A + B + Cin; 因为因为A和和B是是4位宽,加操作的结果最大能够产生位宽,加操作的结果最大能够产生5位结果。位结果。左端表达式的长度指定为左端表达式的长度指定为5位位(Cout 1位,位,Sum 4位位)。赋值语句。赋值语句因此促使右端表达式最右边的因此促使右端表达式最右边的4位的结果赋给位的结果赋给Sum,第,第5位位(进进位位)赋给赋给Cou

8、t。华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞104.1.4 连续赋值的目标类型连续赋值的目标类型u1.标量标量线网线网u2. 向量向量线网线网u3.线网线网向量的常数型一位选择向量的常数型一位选择u4.线网线网向量的常数型部分位选择向量的常数型部分位选择u5.上述类型的任意的拼接运算结果上述类型的任意的拼接运算结果华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞11例:用连续赋值方式描述例:用连续赋值方式描述1位全加器位全加器module FA_Df (A, B, Cin, Sum, Cout ) ;input A, B, Cin;output Sum, Cout ;assign Co

9、ut=(A&Cin)|(B&Cin)|(A&B) ;assign Sum =ABCin;endmodule4.1.5 连续赋值语句的并行执行情况连续赋值语句的并行执行情况华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞12用连续赋值方式描述用连续赋值方式描述1位全加器位全加器 (cont.) 在本例中,有两个连续赋值语句:在本例中,有两个连续赋值语句: assign Sum =ABCin; assign Cout=(A&Cin)|(B&Cin)|(A&B) ; 这两个赋值语句是并行执行的,与其书写的顺序无这两个赋值语句是并行执行的,与其书写的顺序

10、无关。关。只要信号只要信号A或者或者B或者或者Cin任何一个信号发生改变,任何一个信号发生改变,和信号和信号Sum与高位进位信号与高位进位信号Cout 的值就会立即相应的的值就会立即相应的进行刷新,跟代码的前后顺序无关。进行刷新,跟代码的前后顺序无关。 华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞正确表达正确表达:module mux4to1_right (MUX1, a, b, c, d,sel); output MUX1; input a, b, c, d; input 1:0 sel; assign MUX1=(sel = 2b00) ? a :( (sel = 2b01) ? b

11、: ( ( sel = 2b10) ? c : d) ); endmodule错误表达:错误表达:module mux4to1_wrong (MUX2, a, b, c, d,sel1,sel2); input a, b, c, d; input sel1,sel2; output MUX2; wire MUX2; assign MUX2 = (sel1) ? b : a ;/画出电路逻辑图画出电路逻辑图 assign MUX2 = (sel2) ? c : d;/为什么不能生成电路?为什么不能生成电路? endmodule134.1.6 连续赋值语句的线与问题连续赋值语句的线与问题 为什么这

12、种做法不对?为什么这种做法不对?华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞14 错误原因错误原因- -犯了线与错误犯了线与错误答案:答案: 线与逻辑是线与逻辑是两个输出信号直接相连,实现与的功两个输出信号直接相连,实现与的功能。能。在在CMOS工艺下,线与会使灌电流过大,而烧坏工艺下,线与会使灌电流过大,而烧坏逻辑门。要用逻辑门。要用oc门或者门或者od门门来实现。来实现。(还可以继续深入下去:(还可以继续深入下去:为什么为什么oc门和门和od门可以实现线门可以实现线与逻辑?如何实现?与逻辑?如何实现?)华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞15练习练习- -常见公司数字常见公

13、司数字IC设计招聘题目设计招聘题目1.什么是什么是线与线与逻辑,要实现它,在硬件特性上有什么逻辑,要实现它,在硬件特性上有什么具体要求?(汉王)具体要求?(汉王) 华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞16u可以可以用持续赋值语句描述组合逻辑用持续赋值语句描述组合逻辑。u持续赋值在持续赋值在过程块外部使用。过程块外部使用。u持续赋值持续赋值只能对线网只能对线网net型信号进行赋值。型信号进行赋值。 即即连续赋值语句左边的信号只能是线网型(连续赋值语句左边的信号只能是线网型(wire),),不能是寄存器类型(不能是寄存器类型(reg)。)。4.1.7 连续连续/持续赋值语法总结持续赋值

14、语法总结华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞174.2 过程块与过程块与always块块(敏感量敏感量)解释解释知识点:知识点:u4.2.1 过程过程(procedural)块块u4.2.2 过程块的赋值对象要求过程块的赋值对象要求u4.2.3 过程赋值的信号类型过程赋值的信号类型u4.2.4 过程块过程块always的结构的结构u4.2.5 过程块的电平触发过程块的电平触发u4.2.6 过程块的边沿触发过程块的边沿触发华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞184.2.1 过程过程(procedural)块块u过程块有两种:过程块有两种:uinitial块,只能执行一次,

15、用在测试模块中块,只能执行一次,用在测试模块中。ualways块,循环执行,常用来描述组合或者时序逻辑电路。块,循环执行,常用来描述组合或者时序逻辑电路。ualways过程过程(procedural)块的结构包括两部分块的结构包括两部分:u1. 过程块内部语句过程块内部语句(描述具体的电路功能、结构)(描述具体的电路功能、结构)u2. always (敏感量敏感量) (设定电路刷新条件)(设定电路刷新条件) 华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞19u在过程块中的赋值称为过程赋值。在过程块中的赋值称为过程赋值。u在过程赋值语句中表达式左边的信号必须是寄存器类型在过程赋值语句中表达式左

16、边的信号必须是寄存器类型(如(如reg类型)类型)u在过程赋值语句等式右边可以是任何有效的表达式,数据在过程赋值语句等式右边可以是任何有效的表达式,数据类型也没有限制。类型也没有限制。u如果一个信号没有声明则缺省为如果一个信号没有声明则缺省为wire类型。类型。使用过程赋值使用过程赋值语句给语句给wire赋值会产生错误。赋值会产生错误。4.2.2 过程块的赋值对象要求过程块的赋值对象要求华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞204.2.3 过程赋值过程赋值(procedural assignment)的信号类型的信号类型练习练习 信号类型改错:信号类型改错:module adder

17、(out, a, b, cin); input a, b, cin; output 1:0 out; wire a, b, cin; reg half_carry ; wire half_sum; assign out = half_carry, half_ sum; always ( a or b or cin) begin half_sum = a b cin ; half_carry = (a & b) | (a & cin) |(b & cin ); endendmodule华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞214.2.4 过程块过程块always

18、的结构的结构例如:例如:module adder (out, a, b); input 2: 0 a, b; output 3: 0 out; reg 3: 0 out; always ( a or b) /敏感量列表,表示电路刷新条件,敏感量列表,表示电路刷新条件, /也叫触发条件,一般有电平触发或者边沿触发两种。也叫触发条件,一般有电平触发或者边沿触发两种。 begin out = a + b; /过程块内语句描述电路功能:过程块内语句描述电路功能: /包括过程块赋值语句(包括过程块赋值语句(=、=)和条件判断语句等)和条件判断语句等 endendmodule1.过程块内语句描述具体电路结

19、构、功能;过程块内语句描述具体电路结构、功能;2.过程块内语句多行用过程块内语句多行用begin 、end引导;引导;3.用用(敏感量敏感量)来来 控制控制 块里语句描述的电路块里语句描述的电路 刷新条件,如例题中,将敏感量改刷新条件,如例题中,将敏感量改为为always ( a) 与与always ( a or b) 时电路刷新有什么不同?时电路刷新有什么不同?华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞224.2.5 过程块的电平触发过程块的电平触发module reg_ adder (out, a, b, clk); input clk; input 2: 0 a, b; outpu

20、t 3: 0 out; reg 3: 0 out; reg 3: 0 sum; / 电平触发电平触发,只要,只要敏感量敏感量a或或b发生任何变化,发生任何变化, /加法运算电路就会刷新,加法运算电路就会刷新,sum输出最新值输出最新值 always ( a or b) sum = a + b; /与与 wire 3:0 sum; assign sum = a + b; 相似相似 endmodule华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞234.2.6 过程块的边沿触发过程块的边沿触发用关键字用关键字posedge(上升沿)(上升沿)和和negedge(下降沿)(下降沿)限定信号敏感边沿

21、。限定信号敏感边沿。敏感表中可以有多个信号,用关键字敏感表中可以有多个信号,用关键字or连接。连接。module reg_ adder (out, a, b, clk); input clk; input 2: 0 a, b; output 3: 0 out; reg 3: 0 out; reg 3: 0 sum; / 边沿触发边沿触发,只有只有时钟信号时钟信号clk到达上升沿(到达上升沿(posedge)时,)时, /块内描述的电路才刷新,将块内描述的电路才刷新,将a和和b进行加操作,然后赋给进行加操作,然后赋给out always ( posedge clk) out = a + b; e

22、ndmodule华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞24u边沿敏感的时序控制:边沿敏感的时序控制:(posedge /negedge )u可以说明信号可以说明信号(通常是时钟信号通常是时钟信号)有效沿是上升沿有效沿是上升沿(posedge)还是下降沿还是下降沿(negedge)。u只有在信号到达指定上升只有在信号到达指定上升/下降边沿时下降边沿时,块内描述的电路块内描述的电路才刷新。才刷新。u可以用关键字可以用关键字or指定多个参数,但是多个参数都必须指定多个参数,但是多个参数都必须是边沿触发的。是边沿触发的。u边沿触发一般用来表达时序逻辑电路:边沿触发一般用来表达时序逻辑电路:u

23、如常用时序逻辑电路表达方式:如常用时序逻辑电路表达方式: always ( posedge clk or posedge rst)华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞254.3 阻塞赋值和非阻塞赋值阻塞赋值和非阻塞赋值过程块内的赋值方式分为两类:过程块内的赋值方式分为两类:1) 阻塞性过程赋值阻塞性过程赋值(使用使用 = 符号符号)2) 非阻塞性过程赋值非阻塞性过程赋值(使用使用 = 符号符号) 华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞26 练习练习-常见公司数字常见公司数字IC设计招聘题目设计招聘题目1.BLOCKING、NONBLOCKING 赋值的区赋值的区别。(南山

24、之桥)别。(南山之桥) 华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞27 知识点:知识点:u4.3.1 阻塞赋值阻塞赋值u4.3.2 非阻塞赋值非阻塞赋值u4.3.3 过程赋值的比较示例过程赋值的比较示例u4.3.4 过程块的并行执行情况过程块的并行执行情况u4.3.5 两种不同两种不同过程过程赋值语句赋值语句的的区别区别u4.3.6 数据类型对应的电路模型数据类型对应的电路模型u4.3.7 过程赋值语句的限制过程赋值语句的限制u4.3.8 常见过程块的线与问题常见过程块的线与问题华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞284.3.1 阻塞赋值阻塞赋值赋值操作符是赋值操作符是“=”

25、的过程赋值是阻塞性过程赋值。例如,的过程赋值是阻塞性过程赋值。例如, RegA = 52; 是阻塞性过程赋值。是阻塞性过程赋值。 阻塞性过程赋值是顺序执行的阻塞性过程赋值是顺序执行的,即写在前面的语句先执,即写在前面的语句先执行,写在后面的语句后执行。行,写在后面的语句后执行。华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞29例例1:input A,B,Cin;output Cout; reg T1 , T2 , T3 ; /内部信号内部信号reg Cout;always (A or B or Cin)beginT1 = A&B;T2 = B & Cin;T3 = A &am

26、p; Cin;Cout = T1 | T2 | T3;end T1赋值首先发生,计算赋值首先发生,计算T1;接着执行第二条语句,;接着执行第二条语句, T2被赋值;被赋值;然后执行第三条语句,然后执行第三条语句, T3被赋值;最后才执行被赋值;最后才执行Cout赋值语句。赋值语句。 (如果某时刻,(如果某时刻,A信号变为信号变为1, B变为变为1, Cin变为变为0,然后过了,然后过了t时刻,时刻,A从从1变为变为0,此时假如,此时假如B 、 Cin保持不变)保持不变)华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞30上例中,如果将语句顺序换换,会有什么样的结果?上例中,如果将语句顺序换换,

27、会有什么样的结果?如改为,例如改为,例2:input A,B,Cin;output Cout; reg T1 , T2 , T3 ; /内部信号内部信号reg Cout;always (A or B or Cin)begin Cout = T1 | T2 | T3;T1 = A&B;T2 = B & Cin;T3 = A & Cin;End (如果某时刻,(如果某时刻,A信号变为信号变为1, B变为变为1, Cin变为变为0,然后过了,然后过了t时刻,时刻,A从从1变为变为0,此时假如,此时假如B 、 Cin保持不变,会有什么情况发生,保持不变,会有什么情况发生,Cou

28、t值为什值为什么与例么与例1不同?如何解决这个问题?)不同?如何解决这个问题?)华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞31改正为例改正为例3 :reg T1 , T2 , T3 ;reg Cout;always (A or B or Cin or T1 or T2 or T3 )begin Cout = T1 | T2 | T3;T1 = A&B;T2 = B & Cin;T3 = A & Cin;end问题得以解决!问题得以解决! (如果某时刻,(如果某时刻,A信号变为信号变为1, B变为变为1, Cin变为变为0,然后过了,然后过了t时时刻,刻,A从从1变

29、为变为0,此时假如,此时假如B 、 Cin保持不变)保持不变)华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞32或者改正为,例或者改正为,例4 :reg T1 , T2 , T3 ;reg Cout;always (A or B or Cin or T1 or T2 or T3 )beginT1 = A&B;T2 = B & Cin;T3 = A & Cin; Cout = T1 | T2 | T3;end问题得以解决!问题得以解决! 实际工程中,例实际工程中,例1、例、例2表达方式均不使用,而使用例表达方式均不使用,而使用例3、例、例4方式!方式!(如果某时刻,(如

30、果某时刻,A信号变为信号变为1, B变为变为1, Cin变为变为0,然后过了,然后过了t时刻,时刻,A从从1变为变为0,此时假如,此时假如B 、 Cin保持不变)保持不变)华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞334.3.2 非阻塞赋值非阻塞赋值1.在非阻塞性过程赋值中,使用赋值符号在非阻塞性过程赋值中,使用赋值符号“ =”。 2.非阻塞性过程赋值是并行执行的非阻塞性过程赋值是并行执行的,即写在前面的语句与,即写在前面的语句与写在后面的语句同时执行,跟书写顺序没有关系。写在后面的语句同时执行,跟书写顺序没有关系。华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞34例如:例如:reg

31、T1 , T2 , T3 ;reg Cout;always (posedge clk)beginT1 = A&B; /Cout = T1 | T2 | T3;T2 = B & Cin; / T1 = A&B; T3 = A & Cin; / T2 = B & Cin; Cout = T1 | T2 | T3; / T3 = A & Cin; end 左边蓝色部分描述的逻辑跟右边绿色部分描述的逻辑完全一样,跟书写左边蓝色部分描述的逻辑跟右边绿色部分描述的逻辑完全一样,跟书写顺序没有关系!顺序没有关系!华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞

32、35 赋值语句的阻塞和非阻塞性质不会造成赋值语句本身赋值语句的阻塞和非阻塞性质不会造成赋值语句本身生成的逻辑电路有任何不同,但是会影响以后对生成的逻辑电路有任何不同,但是会影响以后对赋值赋值结果结果的使用。的使用。 强烈建议强烈建议! 描述组合逻辑使用阻塞式赋值描述组合逻辑使用阻塞式赋值; 而描述时序逻辑使用非阻塞式赋值。而描述时序逻辑使用非阻塞式赋值。华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞364.3.3 过程赋值的比较示例过程赋值的比较示例下面这些表达的区别下面这些表达的区别?:表达一(建议不使用该方式)表达一(建议不使用该方式):module .reg B , out; alwa

33、ys (A) begin out = B; B = A; endendmodule表达二表达二(建议不使用该方式)(建议不使用该方式) :reg B , out;always (A) begin B = A; out = B;end华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞37表达三(可使用方式)表达三(可使用方式) :module .;reg B , out; always (A or B) beginB = A;out = B; endendmodule表达四(可使用方式)表达四(可使用方式):reg B , out;always (A or B) begin out = B; B

34、= A; end华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞38表达五(可使用方式)表达五(可使用方式) :module . reg B , out; always (A) B = A; always (B) out = B; endmodule华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞39表达六(可使用方式)表达六(可使用方式) :module . wire B , out; assign B = A; assign out = B;endmodule华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞404.3.4 过程块的并行执行情况过程块的并行执行情况例例1:module add

35、er (out, a, b, cin); input a, b, cin; output 1:0 out; wire a, b, cin; reg half_carry ; wire half_sum; assign out = half_carry, half_ sum; assign half_sum = a b cin ; always ( a or b or cin) begin half_carry = (a & b) | (a & cin) |(b & cin ); endendmodule华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞41例例2:modu

36、le reg_ adder (out, a, b, clk); input clk; input 2: 0 a, b; output 3: 0 out, sum; reg 3: 0 out; reg 3: 0 sum; always ( posedge clk) out = a-b; always ( a or b) sum = a + b;endmodule华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞424.3.5 两种不同两种不同过程过程赋值语句赋值语句的的区别区别u非阻塞(非阻塞(non-blocking) 赋值语句:赋值语句: reg b,c; always (posedge cl

37、k or posedge rst) if(rst) b=0; else b=a;always (posedge clk or negedge rst) if(!rst) c=1; else c=b;clkDFFcD QD QabDFF华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞43u阻塞(阻塞(blocking) 赋值语句:赋值语句: reg b,c; always (posedge clk) begin b = a ; /不建议使用不建议使用 c = b; /不建议使用不建议使用 end clkDFFcD Qab华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞44u非阻塞(非阻塞(non

38、-blocking) 赋值语句赋值语句 ( b= a): - 块内的块内的赋值语句同时赋值语句同时被被赋值;赋值; - 建议在建议在时序逻辑时序逻辑中使用中使用非阻塞非阻塞赋值。赋值。u阻塞(阻塞(blocking) 赋值语句赋值语句 ( b = a): - 完成该赋值语句后才能做下一句的操作;完成该赋值语句后才能做下一句的操作; - 时序电路中,对于阻塞赋值,硬件没有对应的电路,时序电路中,对于阻塞赋值,硬件没有对应的电路,因而综合结果未知因而综合结果未知。 -阻塞赋值语句阻塞赋值语句常用来表达常用来表达组合逻辑电路组合逻辑电路。华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞454.3.6

39、 数据类型对应的电路模型数据类型对应的电路模型综合时综合时, 网线数据类型的变量会被映射成硬件中的连线;网线数据类型的变量会被映射成硬件中的连线; 寄存器数据类型的变量根据被赋值的具体情况寄存器数据类型的变量根据被赋值的具体情况,被映射被映射成成连线、触发器或者锁存器。连线、触发器或者锁存器。下面详细讨论寄存器数据类型的变量。下面详细讨论寄存器数据类型的变量。华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞46寄存器型变量被综合成网线寄存器型变量被综合成网线:wire acr,bar,fra;reg trg,sqp;always (acr or bar or fra or trq)begint

40、rq=bar&acr;sqp=trq|fra;end华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞47华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞48寄存器的变量被综合成触发器寄存器的变量被综合成触发器:module target(clk,clr,rega,regb,mask);input clk,clr;input 3:0 mask, rega,;output 3:0 regb;reg 3:0 regb;always (posedge clk) if(!clr) regb =4b0000; else regb = rega& mask;endmodule华中科技大学电子

41、系郑朝霞华中科技大学电子系郑朝霞49华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞50 寄存器的变量被综合成触发器寄存器的变量被综合成触发器2umodule procedure_reg(clk,rst,a,c);u input clk,rst,a; u output c; u reg b,c; u always (posedge clk or negedge rst)u /always (rst or a)u if(!rst) b=0; u else b=a; u always (posedge clk or negedge rst)u /always (rst or b)u if(!rst

42、) c=1; u else c=b; u endmodule 在电路开始上电工作时,复位信号有效,经过一小段时间后,复位信在电路开始上电工作时,复位信号有效,经过一小段时间后,复位信号无效,时钟信号开始工作,号无效,时钟信号开始工作, 如果对于输入信号如果对于输入信号a由由0变为变为1的波形,请画出的波形,请画出信号信号b、c相应的波形图?相应的波形图?clkDFFD QD QabDFFc华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞514.3.7 过程赋值语句的限制过程赋值语句的限制!对同一个赋值对象对同一个赋值对象不能不能既使用阻塞赋值,又使用非阻塞赋值。既使用阻塞赋值,又使用非阻塞赋值

43、。!在同一个过程块里面,在同一个过程块里面,不能不能既使用阻塞赋值,又使用非阻塞赋值。既使用阻塞赋值,又使用非阻塞赋值。如如: /error1 reg T1 , T2 , T3 ;reg Cout;always (A or B or Cin)begin /CARRY_OUTT1 = A&B;T2 = B & Cin; T3 = A & Cin;Cout = T1 | T2 | T3; /同一个同一个always块里不能既有阻塞赋值,块里不能既有阻塞赋值, /又有非阻塞赋值又有非阻塞赋值end华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞52改错:改错: module

44、dff(rst,clk,d,q);/errorinput rst,clk,d;output q;reg q; /赋值赋值 混用混用 error! always (posedge clk or negedge rst)if (!rst) q = 1b0; else q = d;endmodule 赋值的限制赋值的限制- -举例举例华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞534.3.8 常见过程块的线与问题常见过程块的线与问题module dff(rst,clk,d,q); /errorinput rst,clk,d;output q;reg q;always (negedge rst)i

45、f (!rst) q =1b0;always (posedge clk) q=d;endmodule上面示例为什么出错,如何修改?上面示例为什么出错,如何修改?华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞54答案答案: 出现了线与问题出现了线与问题,改正如下:改正如下: module dff(rst,clk,d,q); /correctinput rst,clk,d;output q;reg q; always (posedge clk or negedge rst)if (!rst) q =1b0; else q=d;endmodule华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞55

46、4.4 过程块内部使用的条件语句过程块内部使用的条件语句知识点:知识点:u4.4.1 条件语句条件语句-if语句语句u4.4.2 条件语句条件语句-case分支语句分支语句华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞564.4.1 条件语句条件语句-if语句语句if语句的语法如下:语句的语法如下: if (condition_1) begin procedural _ statement _ 1 end else if (condition_2) begin procedural _ statement _ 2 end else procedural _ statement _ 3华中科技

47、大学电子系郑朝霞华中科技大学电子系郑朝霞57 if语句示例语句示例if (Sum 60)Total _A = Total _A +1;else if (60 Sum 75)Total _B = Total _ B +2;elseTotal _C= Total _C + 3;华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞584.4.2 条件语句条件语句-case分支语句分支语句module compute (result, rega, regb, opcode);input 7: 0 rega, regb;input 2: 0 opcode;output 7: 0 result;reg 7:

48、0 result;always ( rega or regb or opcode) case (opcode) 3b000 : result = rega + regb; 3b001 : result = rega - regb; 3b010: 3b100 : result = rega & regb; default : result =8b0; endcaseendmodulecase语句语句:在在Verilog中重复说中重复说明明case项是合法的,项是合法的,因为因为Verilog的的case语句只执行第一个语句只执行第一个符合项。符合项。 华中科技大学电子系郑朝霞华中科技大学

49、电子系郑朝霞59case语句是测试表达式与另外一系列表达式分支是否匹配的一个多路条语句是测试表达式与另外一系列表达式分支是否匹配的一个多路条件语句。件语句。uCase语句进行逐位比较以求完全匹配(包括语句进行逐位比较以求完全匹配(包括x和和z)。)。u多个多个default语句是非法的。语句是非法的。重要内容:重要内容:使用使用default语句是一个很好的编程习惯,特别是用于检测语句是一个很好的编程习惯,特别是用于检测x和和z。Casez和和casex为为case语句的变体,允许比较无关值。语句的变体,允许比较无关值。u case表达式或表达式或case项中的任何位为无关值时,在比较过程中该

50、位不项中的任何位为无关值时,在比较过程中该位不予考虑。予考虑。u 在在casez语句中,语句中,? 和和 z 被当作无关值。被当作无关值。u 在在casex语句中,语句中,?,z 和和 x 被当作无关值。被当作无关值。4.4.2 条件语句条件语句-case分支语句分支语句华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞604.5 过程块内部使用的循环语句过程块内部使用的循环语句知识点:知识点:u4.5.1 循环语句循环语句u4.5.2 for语句示例语句示例华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞614.5.1 循环语句循环语句Verilog HDL中有四类循环语句,它们是:中有四类循

51、环语句,它们是:1) forever循环循环2) repeat循环循环3) while循环循环4) for 循环循环For循环语句是典型的能用于综合的循环语句。循环语句是典型的能用于综合的循环语句。一个一个for 循环语句按照指定的次数重复执行过程赋值语句循环语句按照指定的次数重复执行过程赋值语句若干次。若干次。华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞62repeat:将一块语句循环执行确定次数。:将一块语句循环执行确定次数。 repeat (次数表达式)次数表达式) while:在条件表达式为真时一直循环执行:在条件表达式为真时一直循环执行 while (条件表达式)条件表达式) f

52、orever:重复执行直到仿真结束:重复执行直到仿真结束 forever for:在执行过程中对变量进行计算和判断,在条件满足时执行:在执行过程中对变量进行计算和判断,在条件满足时执行 for(赋初值;条件表达式;计算)赋初值;条件表达式;计算) 综合工具综合工具还不支持还不支持,了解了解华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞634.5.2 for语句示例语句示例 input 31:0 addr; output 3:0 line; reg 3:0 line; integer n; /注意注意,integer为为32位位,/最好改为最好改为reg1:0 n; always (posed

53、ge clk) for(n=3;n=0;n=n-1) if (addr=n) linen=1; else linen=0;华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞644.6 function和和task的了解的了解知识点:知识点:u4.6.1 Verilog的任务与函数的任务与函数u4.6.2 任务任务tasku4.6.3 函数(函数(function)u4.6.4 实际工程中实际工程中Function语句实例语句实例u4.6.5 特别说明特别说明华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞654.6.1 Verilog的任务与函数的任务与函数u 任务(任务(task) 通常用于调

54、试通常用于调试 可以包含时序控制可以包含时序控制 可以有可以有 input,output,和,和inout参数参数 可以调用其他任务或函数可以调用其他任务或函数u 函数函数(function) 通常用于数学计算,描述组合逻辑通常用于数学计算,描述组合逻辑 不能包含任何延迟;函数仿真时间为不能包含任何延迟;函数仿真时间为0 只含有只含有input参数参数 由函数名返回一个结果由函数名返回一个结果 可以调用其他函数,但不能调用任务可以调用其他函数,但不能调用任务u 任务和函数必须在任务和函数必须在module内定义和例化内定义和例化华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞664.6.2 任

55、务任务task 任务既可表示任务既可表示组合逻辑组合逻辑又可表达又可表达时序逻辑时序逻辑,定义的形式,定义的形式如下:如下: task task _ id; declarations procedural _ statement endtask任务可以没有或有一个或多个输入输出参数。值通过参任务可以没有或有一个或多个输入输出参数。值通过参数传入和传出。除数传入和传出。除input参数外,任务还能带有参数外,任务还能带有output参数(从任务中返回值)和参数(从任务中返回值)和inout参数。参数。华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞67 task示例示例1module Has _

56、 Task;. parameter MAXBITS =4h8; task Reverse _ Bits; input MAXBITS-1:0 Din; output MAXBITS-1:0 Dout; integer k; begin for (k = 0; k MAXBITS; k = k + 1) Dout MAXBITS-k = Dink ; end endtask . . .endmodule华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞68module mult (clk, a, b, out, en_mult); input clk, en_adder; input 3: 0 a

57、, b; output 4: 0 out; reg 4: 0 out; always ( posedge clk) adder_tme (a, b, en_adder, out); / 任务调用任务调用 task adder_tme; / 任务定义任务定义 input 3: 0 add1, add2; input en; output 4: 0 result; if (en) result = add1 + add2; endtaskendmodule task示例示例2: :任务调用时的参数按任务定义的顺序列出。任务调用时的参数按任务定义的顺序列出。 华中科技大学电子系郑朝霞华中科技大学电子

58、系郑朝霞694.6.3 函数(函数(function)函数表达的是组合逻辑。函数表达的是组合逻辑。函数与任务的不同之处是函数只能返回一个值,它不能函数与任务的不同之处是函数只能返回一个值,它不能包含任何时延或时序控制(必须立即执行),包含任何时延或时序控制(必须立即执行),函数必函数必须带有至少一个输入,须带有至少一个输入,在函数中允许没有输出或输入在函数中允许没有输出或输入输出说明。输出说明。华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞70函数中不能有时序控制,但调用它的过程可以有时序控制。函数中不能有时序控制,但调用它的过程可以有时序控制。module orand (a, b, c,

59、d, e, out); input 7: 0 a, b, c, d, e; output 7: 0 out; reg 7: 0 out; always ( a or b or c or d or e) out = f_or_and (a, b, c, d, e); function 7:0 f_or_and; input 7:0 a, b, c, d, e; if (e = = 1) f_or_and = (a | b) & (c | d); else f_or_and = 0; endfunctionendmodule华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞71主要特性:主要

60、特性:u 函数定义中函数定义中不能不能包含任何时序控制语句。包含任何时序控制语句。u 函数函数至少有一个输入,不能包含任何输出或双向端口。至少有一个输入,不能包含任何输出或双向端口。u 函数函数只返回一个数据,只返回一个数据,其缺省为其缺省为reg类型。类型。u 传送到函数的参数顺序和函数输入参数的说明顺序相同。传送到函数的参数顺序和函数输入参数的说明顺序相同。u 函数在模块(函数在模块(module)内部定义。内部定义。u 虽然函数只返回单个值,但返回的值可以直接给信号连接赋值。虽然函数只返回单个值,但返回的值可以直接给信号连接赋值。这在需要有多个输出时非常有效。这在需要有多个输出时非常有效。 o1, o2, o3, o4 = f_ or_ and (a, b, c, d, e);华中科技大学电子系郑朝霞华中科技大学电子系郑朝霞72 要返回一个向量值(多于一位),要返回一个向量值(多于一位),在函数定义时在函数名前说明在函数定义时在函数名前说明 范范 围。函数中需要多条语句时用围

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论