Verilog HDL基础之:赋值语句和块语句
间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程序时,变量名、端口名、块名等的定义不要与这些关键词冲突。
VerilogHDL 华清远见 赋值语句 块语句 阻塞赋值 相关文章:
- Verilog门电平模型化(06-06)
- VHDL:中文版Verilog HDL简明教程:第3章 Verilog语言要素(06-06)
- VHDL:中文版Verilog HDL简明教程:第2章 HDL指南(06-06)
- VHDL:中文版Verilog HDL简明教程:第1章 简介(06-06)
- VHDL:中文版Verilog HDL简明教程:第3章 Verilog语言要素(续)(06-06)
- 基于Verilog应用(06-06)