目录
- 1.块语句
- 2.延迟赋值语句
微信公众号获取更多FPGA相关源码:
1.块语句
块语句用来将多个语句组织在一起,使得他们在语法上如同一个语句。
块语句分为两类:
- 顺序块:语句置于关键字begin和end之间,块中的语句以顺序方式执行。
- 并行块:关键字fork和join之间的是并行块语句,块中的语句并行执行。
Fork和join语句常用于test bench描述。这是因为可以一起给出矢量及其绝对时间,而不必描述所有先前事件的时间。
- 在顺序块中,语句一条接一条地计算执行。
- 在并行块中,所有语句在各自的延迟之后立即计算执行。
begin#5 a = 3;#5 a = 5;#5 a = 4;
end
fork#5 a = 3;#15 a = 4;#10 a = 5;
join
上面的两个例子在功能上是等价的。Fork-join例子里的赋值故意打乱顺序是为了强调顺序是没有关系的。
注意fork-join块是典型的不可综合语句,并且在一些仿真器时效率较差。
2.延迟赋值语句
语法:
LHS = <timing_ control> RHS;
- 时序控制延迟的是赋值而不是右边表达式的计算。
- 在延迟赋值语句中RHS表达式的值都有一个隐含的临时存储。
- 可以用来简单精确地模拟寄存器交换和移位。
- LHS: Left-hand-side
- RHS: Right-hand-side
并行语句在同一时间同步发生,但由仿真器在另外一个时间执行。
例1:b值拷贝到a然后回传
begina = #5 b;b = #5 a;#10 $diplay(a, b);
end
b的值被立即采样(时刻0),这个值在时刻5赋给a。a的值在时刻5被采样,这个值在时刻10赋给b。
注意,另一个过程块可能在时刻0到时刻5之间影响b的值,或在时刻5到时刻10之间影响a的值。
例2:a和b值安全交换
forka = #5 b;b = #5 a;#10 $diplay(a, b);
join
b和a的值被立即采样(时刻0),保存的值在时刻5被赋值给他们各自的目标。这是一个安全传输。注意,另一个过程块可以在时刻0到时刻5之间影响a和b的值。
微信公众号获取更多FPGA相关源码: