原创 语句内时延和语句间时延的区别

2014-5-28 14:56 907 3 3 分类: FPGA/CPLD

 

  时延可以细分为两种类型:

  1) 语句间时延: 这是时延语句执行的时延。

  2) 语句内时延: 这是右边表达式数值计算与左边表达式赋值间的时延。

  下面是语句间时延的示例:

Sum = (A ^ B) ^ Cin;

#4 T1 = A & Cin;

  在第二条语句中的时延规定赋值延迟4个时间单位执行。就是说,在第一条语句执行后等待4个时间单位,然后执行第二条语句。下面是语句内时延的示例。

Sum = #3 (A^ B) ^ Cin;

  这个赋值中的时延意味着首先计算右边表达式的值, 等待3个时间单位,然后赋值给Sum。

  如果在过程赋值中未定义时延,缺省值为0时延,也就是说,赋值立即发生。这种形式以及在always 语句中指定语句的其他形式将在第8章中详细讨论。

  下面是initial语句的示例:

`timescale 1ns / 1ns

module Test (Pop, Pid);

output Pop, Pid;

reg Pop, Pid;

initial

begin

Pop = 0; // 语句 1。

Pid = 0; // 语句 2。

Pop = #5 1; // 语句 3。

Pid = #3 1; // 语句 4。

Pop = #6 0; // 语句 5。

Pid = #2 0; // 语句 6。

end

endmodule

  initial语句包含一个顺序过程。这一顺序过程在0 ns时开始执行,并且在顺序过程中所有语句全部执行完毕后, initial语句永远挂起。这一顺序过程包含带有定义语句内时延的分组过程赋值的实例。语句1和2在0 ns时执行。第三条语句也在0时刻执行,导致Pop 在第5 ns时被赋值。语句4在第5 ns执行,并且Pid 在第8 ns被赋值。同样,Pop在14 ns被赋值0,Pid在第16 ns被赋值0。第6条语句执行后,initial语句永远被挂起。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
3
关闭 站长推荐上一条 /3 下一条