verilog行为建模(三):块语句

微信公众号获取更多FPGA相关源码:
在这里插入图片描述

1.块语句

块语句用来将多个语句组织在一起,使得他们在语法上如同一个语句。
块语句分为两类:

  1. 顺序块:语句置于关键字begin和end之间,块中的语句以顺序方式执行。
  2. 并行块:关键字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然后回传

begin
    a = #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值安全交换

fork
    a = #5 b;
    b = #5 a;
    #10 $diplay(a, b);
join

b和a的值被立即采样(时刻0),保存的值在时刻5被赋值给他们各自的目标。这是一个安全传输。注意,另一个过程块可以在时刻0到时刻5之间影响a和b的值。

微信公众号获取更多FPGA相关源码:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值