Verilog HDL提供了两种类型的显式时序控制:一种是延迟控制,即定义执行语句的延迟时间;另一种是事件控制,只有当某一事件发生时才允许该语句继续向下执行。
Verilog仿真时,仿真时间由以下四种形式进行控制:
(1)定义过的门级或线传输延迟
(2)由#符号引入的延迟控制
(3)由@符号引入的事件控制
(4)等待语句
其中形式1是由门级器件来决定的,无须讨论。
1、延迟控制#
Verilog延迟控制格式为:
# expression
延迟时间由expression的值确定。
example1:
module delay; reg[1:0] r; initial #70 $stop; initial begin : b1 #10 r=1; #20 r=1; #30 r=1; end initial begin : b2 #5 r=2; #20 r=2; #30 r=2; end always @r begin $display(“r=%0d at time %0d”,r,$time); end endmodule
执行结果如下:
r=2 at time 5 r=1 at time 10 r=2 at time 25r=1 at time 30 r=2 at time 55 r=1 at time 60
在赋值语句中使用:
current_state=#clock_period next_state;
2、事件控制
一个事件可以通过运行表达式:-》event变量来被激发。
事件变量的声明:
event var;
event触发为:
-》var;
捕获触发为:
@(var);
在赋值语句中使用:
current_state=@(posedge clock) next_state;
3、等待语句
wait(expression)
当等待的表达式为假则中断运行,知道表达式变为真。
4、延迟定义模块
Verilog可以对模块中某一指定的路径进行延迟定义,延迟定义块内容要放在specify和endspecify之间,延迟定义块是一个独立的块结构,不在任何其他模块(如initial或always)内出现,在定义块内使用specparam关键字定义参数。
(1)并行连接:每条路径都有一个源域和一个目标域,每一位对应相连(向量位数相同)。
(source=》destination)=《delay_value》;
(2)全连接:位对位连接,源和目标位数不必相同(源域的每一位和目标域的每一位分别相连)。
(source*》destination)=《delay_vaule》;
编辑:jq
全部0条评论
快来发表一下你的评论吧 !