新闻中心

EEPW首页 > EDA/PCB > 设计应用 > Verilog HDL基础教程之:赋值语句和块语句

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

作者:时间:2013-08-23来源:网络收藏

2.并行块

并行块有以下4个特点。

(1)块内语句是同时执行的,即程序流程控制一进入该并行块,块内语句则开始同时并行地执行。

(2)块内每条语句的延迟时间是相对于程序流程控制进入到块内时的仿真时间的。

(3)延迟时间是用来给赋值语句提供执行时序的。

(4)当按时间时序排序在最后的语句执行完后或一个disable语句执行时,程序流程控制跳出该程序块。

并行块的格式如下:

fork

语句1;

语句2;

.......

语句n;

join

或者:

fork:块名

块内声明语句

语句1;

语句2;

......

语句n;

join

其中:

(1)块名即标识该块的一个名字,相当于一个标识符。

(2)块内说明语句可以是参数说明语句、reg型变量声明语句、integer型变量声明语句、real型变量声明语句、ime型变量声明语句或者事件(event)说明语句。

下面举例说明。

例5:并行块1。

fork

#50 r = 'h35; //在绝对时间50单位后,r被赋值

#100 r = 'hE2; //在绝对时间100单位后(非绝对时间150),r再次被赋值

#150 r = 'h00;

#200 r = 'hF7;

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

join

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

3.块名

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

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

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

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

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

4.起始时间和结束时间

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

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

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

例6:并行块2。

fork

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

#200 r = 'hF7;

#150 r = 'h00;

#100 r = 'hE2;

#50 r = 'h35;

join

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

关键词

中,所有的关键词是事先定义好的确认符,用来组织语言结构。关键词是用小写字母定义的,因此在编写原程序时要注意关键词的书写,以避免出错。下面是Verilog 中使用的关键词(请参阅附录: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程序时,变量名、端口名、块名等的定义不要与这些关键词冲突。


上一页 1 2 下一页

关键词: Verilog HDL 基础教程

评论


相关推荐

技术专区

关闭