微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Verilog HDL基础之:赋值语句和块语句

Verilog HDL基础之:赋值语句和块语句

时间:06-05 来源:互联网 点击:

间100单位后(非绝对时间150),r再次被赋值

#150 r = h00;

#200 r = hF7;

#250 -> end_wave; //在绝对时间250单位后,触发事件end_wave

join

在这个例子中用并行块来替代前面例子中的顺序块来产生波形,用这两种方法生成的波形是一样的。

3.块名

在Verilog HDL语言中,可以给每一个块取名字,只需将名字加在关键词begin或fork后面即可,这样做的原因有以下几点。

(1)这样可以在块内定义局部变量,即只在块内使用的变量。

(2)这样可以允许块被其他语句调用,如被disable语句调用。

(3)在Verilog语言里,所有的变量都是静态的,即所有的变量都只有一个惟一的存储地址,因此进入或跳出块并不影响存储在变量内的值。

基于以上原因,块名就提供了一个在任何仿真时刻确认变量值的方法。需要注意的是,块名和变量名一样,都不能是关键词。

4.起始时间和结束时间

在并行块和顺序块中都有一个起始时间和结束时间的概念。对于顺序块,起始时间就是第一条语句开始被执行的时间,结束时间就是最后一条语句执行完的时间。而对于并行块来说,起始时间对于块内所有的语句是相同的,即程序流程控制进入该块的时间,其结束时间是按时间排序在最后的语句执行完的时间。

当一个块嵌入另一个块时,块的起始时间和结束时间是很重要的。跟在块后面的语句只有在该块的结束时间到了才能开始执行,也就是说,只有该块完全执行完后,后面的语句才可以执行。

在fork_join块内,各条语句不必按顺序给出,因此在并行块里,各条语句在前还是在后是无关紧要的,如下所示。

例6:并行块2。

fork

#250 -> end_wave; //按下面几条语句顺序执行结果和例[6]的执行结果一样

#200 r = hF7;

#150 r = h00;

#100 r = hE2;

#50 r = h35;

join

在这个例子中,各条语句并不是按被执行的先后顺序给出的,但同样可以生成前面例子中的波形。

关键词

在Verilog HDL中,所有的关键词是事先定义好的确认符,用来组织语言结构。关键词是用小写字母定义的,因此在编写原程序时要注意关键词的书写,以避免出错。下面是Verilog HDL中使用的关键词(请参阅附录:Verilog语言参考手册):

always、and、assign、begin、buf、bufif0、bufif1、case、casex、casez、cmos、deassign、default、defparam、disable、edge、else、end、endcase、endmodule、endfunction、endprimitive、endspecify、endtable、endtask、event、for、force、forever、fork、function、highz0、highz1、if、initial、inout、input、integer、join、large、macromodule、medium、module、nand、negedge、nmos、nor、not、notif0、notifl、or、output、parameter、pmos、posedge、primitive、pull0、pull1、pullup、pulldown、rcmos、reg、releses、repeat、mmos、rpmos、rtran、rtranif0、rtranif1、scalared、small、specify、specparam、strength、strong0、strong1、supply0、supply1、table、task、time、tran、tranif0、tranif1、tri、tri0、tri1、triand、trior、trireg、vectored、wait、wand、weak0、weak1、while、wire、wor、xnor、xor。

在编写Verilog HDL程序时,变量名、端口名、块名等的定义不要与这些关键词冲突。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top