数字系统设计实验一:区别begin_end和fork_join块

3 篇文章 5 订阅

以下在数字系统设计(verilog)学习过程中联系过的实验,在这里进行记录。

1.问题主干:
区别begin-end与fork-join语句块,并生成特定信号波形。
在这里插入图片描述

2.内容分析:
Begin_end是串行块,其中每条语句是按顺序从上至下工作;而fork_join是并行块,其中每条语句是并行执行的。
与一般对硬件电路工作原理的理解不同,begin_end是可以综合的,即可以生成对应的硬件电路;而fork_join是不能综合的,没有对应的硬件电路,一般仅在testbench文件中使用来进行测试使用。
Begin_end中,每句话前如果有延时语句,那么这个延时是前一句话结束到这句话开始的延时,延时逐句累加,而fork_join语句中每句话前面的延时是这句话开始时间到fork块开始的时间。
根据以上分析,可以在同一个tb文件中通过这两种不同的方式生成同样的两组测试信号。
3. 参考程序:
.v文件:

`timescale 1ns/1ps

module checkfile(A,B,A1,B1);

output reg [0:0] A,B,A1,B1;//下面将会通过过程赋值语句对aba1b1进行赋值,他们是否为wire类型呢?

initial begin
#0 A=0;B=1;
#10 A=1;B=0;
#10 A=1;B=1;
#10 A=0;B=1;
#10 A=1;B=1;
end

initial fork       //这里会提示error或者warning,fork_join无法被综合
#0 A1=0;
#0 B1=1;

#10 A1=1;
#10 B1=0;

#20 A1=1;
#20 B1=1;

#30 A1=0;
#30 B1=1;
#40 A1=0;
#40 B1=0;
#50 A1=1;
#50 B1=1;       //fork_join的每条语句前面都必须有延时,否则就是从fork开始零延时直接执行
join

endmodule

4. 实验结果
在这里插入图片描述
可以看到,两组波形完全相同。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值