欢迎来到天天文库
浏览记录
ID:37798981
大小:624.86 KB
页数:24页
时间:2019-05-31
《Verilog HDL硬件描述语言(标注版)-08》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、下载第8章行为建模在前几章中,我们已经介绍了使用门和UDP实例语句的门级建模方式,以及用连续赋值语句的数据流建模方式。本章描述VerilogHDL中的第三种建模方式,即行为建模方式。为充分使用VerilogHDL,一个模型可以包含所有上述三种建模方式。8.1过程结构下述两种语句是为一个设计的行为建模的主要机制。1)initial语句2)always语句一个模块中可以包含任意多个initial或always语句。这些语句相互并行执行,即这些语句的执行顺序与其在模块中的顺序无关。一个initial语句或a
2、lways语句的执行产生一个单独的控制流,所有的initial和always语句在0时刻开始并行执行。8.1.1initial语句initial语句只执行一次。initial语句在模拟开始时执行,即在0时刻开始执行。initial语句的语法如下:initial[timing_control]procedural_statementprocedural_statement是下列语句之一:procedural_assignment(blockingornon-blocking)//阻塞或非阻塞性过程赋值语
3、句//procedural_continuous_assignmentconditional_statementcase_statementloop_statementwait_statementdisable_statementevent_triggersequential_blockparallel_blocktask_enable(userorsystem)顺序过程(begin...end)最常使用在进程语句中。这里的时序控制可以是时延控制,即等待一个确定的时间;或事件控制,即等待确定的事件发生
4、或某一特定的条件为真。initial语句的各个进程语句仅执行一次。注意initial语句在模拟的0时刻开始执行。initial语句根据进程语句中出现的时间控制在以后的某个时间完成执行。下面是initial语句实例。regYurt;...initialYurt=2;60VerilogHDL硬件描述语言下载上述initial语句中包含无时延控制的过程赋值语句。initial语句在0时刻执行,促使Yurt在0时刻被赋值为2。下例是一个带有时延控制的initial语句。regCurt;...initial#2
5、Curt=1;寄存器变量Curt在时刻2被赋值为1。initial语句在0时刻开始执行,在时刻2完成执行。下例为带有顺序过程的initial语句。parameterSIZE=1024;reg[7:0]RAM[0:SIZE-1];regRibReg;initialbegin:SEQ_BLK_AintegerIndex;RibReg=0;for(Index=0;Index6、语句,与C语言等高级编程语言相似。SEQ_BLK_A是顺序过程的标记;如果过程中没有局部说明部分,不要求这一标记。例如,如果对Index的说明部分在initial语句之外,可不需要标记。整数型变量Index已在过程中声明。并且,顺序过程包含1个带循环语句的过程性赋值。这一initial语句在执行时将所有的内存初始化为0。下例是另一个带有顺序过程的initial语句。在此例中,顺序过程包含时延控制的过程性赋值语句。//波形生成:parameterAPPLY_DELAY=5;reg[0:7]port_A;7、...initialbeginPort_A='h20;#APPLY_DELAYPort_A='hF2;#APPLY_DELAYPort_A='h41;#APPLY_DELAYPort_A='h0A;end执行时,Port_A的值如图8-1所示。图8-1使用initial语句产生的波形如上面举例所示,Initial语句主要用于初始化和波形生成。第8章行为建模61下载8.1.2always语句与initial语句相反,always语句重复执行。与initial语句类似,always语句语法如下:alway8、s[timing_control]procedural_statement过程语句和时延控制(时序控制)的描述方式与上节相同。例如:alwaysClk=~Clk;//将无限循环。此always语句有一个过程性赋值。因为always语句重复执行,并且在此例中没有时延控制,过程语句将在0时刻无限循环。因此,always语句的执行必须带有某种时序控制,如下例的always语句,形式上与上面的实例相同,但带有时延控制。always#5Clk=~Clk;//产生时
6、语句,与C语言等高级编程语言相似。SEQ_BLK_A是顺序过程的标记;如果过程中没有局部说明部分,不要求这一标记。例如,如果对Index的说明部分在initial语句之外,可不需要标记。整数型变量Index已在过程中声明。并且,顺序过程包含1个带循环语句的过程性赋值。这一initial语句在执行时将所有的内存初始化为0。下例是另一个带有顺序过程的initial语句。在此例中,顺序过程包含时延控制的过程性赋值语句。//波形生成:parameterAPPLY_DELAY=5;reg[0:7]port_A;
7、...initialbeginPort_A='h20;#APPLY_DELAYPort_A='hF2;#APPLY_DELAYPort_A='h41;#APPLY_DELAYPort_A='h0A;end执行时,Port_A的值如图8-1所示。图8-1使用initial语句产生的波形如上面举例所示,Initial语句主要用于初始化和波形生成。第8章行为建模61下载8.1.2always语句与initial语句相反,always语句重复执行。与initial语句类似,always语句语法如下:alway
8、s[timing_control]procedural_statement过程语句和时延控制(时序控制)的描述方式与上节相同。例如:alwaysClk=~Clk;//将无限循环。此always语句有一个过程性赋值。因为always语句重复执行,并且在此例中没有时延控制,过程语句将在0时刻无限循环。因此,always语句的执行必须带有某种时序控制,如下例的always语句,形式上与上面的实例相同,但带有时延控制。always#5Clk=~Clk;//产生时
此文档下载收益归作者所有