verilog语法详细解读

verilog语法详细解读

ID:36325532

大小:294.50 KB

页数:120页

时间:2019-05-09

verilog语法详细解读_第1页
verilog语法详细解读_第2页
verilog语法详细解读_第3页
verilog语法详细解读_第4页
verilog语法详细解读_第5页
资源描述:

《verilog语法详细解读》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、语法详细讲解强制激励在一个过程块中,可以用两种不同的方式对信号变量或表达式进行连续赋值。过程连续赋值往往是不可以综合的,通常用在测试模块中。两种方式都有各自配套的命令来停止赋值过程。两种不同方式均不允许赋值语句间的时间控制。assign和deassign适用于对寄存器类型的信号(例如:RTL级上的节点或测试模块中在多个地方被赋值的信号)进行赋值。initialbegin#10assigntop.dut.fsml.state_reg=`init_state;#20deassigntop.dut.fsml.state_

2、reg;endforce和release用于寄存器类型和网络连接类型(例如:门级扫描寄存器的输出)的强制赋值,强制改写其它地方的赋值。initialbegin#10forcetop.dut.counter.scan_reg.q=0;#20releasetop.dut.counter.scan_reg.q;end在以上两个例子中,在10到20这个时间段内,网络或寄存器类型的信号被强制赋值,而别处对该变量的赋值均无效。force的赋值优先级高于assign。如果先使用assign,再使用force对同一信号赋值,则信号

3、的值为force所赋的值,语法详细讲解强制激励语法详细讲解字符串语法详细讲解强制激励语法详细讲解强制激励当执行release后,则信号的值为assign所赋的值。如果用force对同一个信号赋了几次值,再执行release,则所有赋的值均不再存在。可以对信号的某(确定)位、某些(确定)位或拼接的信号,使用force和release赋值;但不能对信号的可变位使用force和release来赋值。不能对寄存器类型的信号某位或某些位使用assign和deassign来赋值。语法详细讲解强制激励语法详细讲解建立时钟虽然有时

4、在设计中会包含时钟,但时钟通常用在测试模块中。下面三个例子分别说明如何在门级和行为级建立不同波形的时钟模型。[例1]简单的对称方波时钟:语法详细讲解建立时钟regclk;alwaysbegin#period/2clk=0;#period/2clk=1;endreggo;wireclk;nand#(period/2)ul(clk,clk,go);initialbegingo=0;#(period/2)go=1;end注:在有些仿真器中,如果设计所用的时钟是由与其相同抽象级别的时钟模型产生的,则仿真器的性能就能得到提高

5、。[例2]简单的带延迟的对称方波时钟:语法详细讲解建立时钟regclk;initialbeginclk=0;#(period)forever#(period/2)clk=!clkendreggo;wireclk;nand#(period/2)ul(clk,clk,go);initialbegingo=0;#(period)go=1;end注:这两个时钟模型有些不同,行为描述的模型延迟期间一直是低电平,而门级描述的模型开始延迟有半个周期是不确定的。语法详细讲解建立时钟[例3].带延迟、头一个脉冲不规则的、占空比不为1

6、的时钟:语法详细讲解建立时钟regclk;initialbegin#(period+1)clk=1;#(period/2-1)foreverbegin#(period/4)clk=0;#(3*period/4)clk=1;endendreggo;wireclk;nand#(3*period/4,period/4)ul(clk,clk,go);initialbegin#(period/4+1)go=0;#(5*period/4-1)go=1;end注:这两个时钟模型也有些不同,行为描述的模型一开始就有确定的电平,而门

7、级描述的模型有延迟开始时电平是不确定的。语法详细讲解怎样使用任务moculebus_ctrl_tbreg[7:0]data;regdata_valid,data_rd;cpuul(data_valid,data,data_rd);initialbegincpu_driver(8’b0000_0000);cpu_driver(8’b1010_1010);cpu_driver(8’b0101_0101);endtaskcpu_driver;语法详细讲解怎样使用任务语法详细讲解怎样使用任务input[7:0]data_i

8、n;begin#30data_valid=1;wait(data_rd==1);#20data=data_in;wait(data_rd==0);#20data=8’hzz;#30data_valid=0;endendtask语法详细讲解怎样使用任务语法详细讲解怎样使用任务endmodule在测试模块中使用任务可以提高程序代码的效率,可以进行多次重复操作。语

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。