基于SparkRoad的《Verilog数字系统设计教程·第三版(夏宇闻)》学习(5)——第4章
学习:
1.块语句通常用来将两条或者多条语句组合在一起,块语句分为两种:一种是begin_end语句,通常用来表示顺序执行的语句,用它来标识的块称为顺序块;另一种是fork_join语句,通常用来标识并行执行的语句,用它来标识的块称为并行块。
顺序块有以下特点:
(1)块内的语句是按顺序执行的,即只有上面一条语句执行完后下面的语句才能执行
(2)每条语句的延迟时间是相对于前一条语句的仿真时间而言的
(3)直到最后一条语句执行完,程序流程控制才跳出该语句块
思考题:
1.逻辑运算符与按位逻辑运算符有什么不同,它们各在什么场合使用?
逻辑运算符输出1位,按位运算符输出与输入位数一致;逻辑运算符多用于条件判断,按位运算符用于信号的运算和检测。(这个算是对于这方面问题一个很好的解答)
2.指出两种逻辑等式运算符的不同点,解释书上的真值表。
区别:相等和相同。
3.拼接符的作用是什么?为什么说合理使用拼接符可以提高程序的可读性和可维护性?拼接符表示的操作其物理意义是什么?
拼接符可以把两个或多个信号的某些位拼接起来进行运算操作。借助拼接符可以用一个信号名表示由多位信号组成的复杂信号。物理意义:将多个信号结合成一个信号。
4.如果都不带时间延迟,阻塞和非阻塞赋值有什么不同?举例说明它们的不同点?
阻塞是顺序执行,非阻塞赋值是并行执行。
//非阻塞赋值
always @(posedge clk) begin
b <= a;
c <= b;
end
//阻塞赋值
always @(posedge clk) begin
b = a;
c = b;
end
5.举例说明顺序块和并行块的不同。
//顺序块
begin
#50 r = 'h35;
#50 r = 'hE2;
#50 r = 'h00;
#50 ->end_wave;
end
//并行块
fork
#50 r = 'h35;
#100 r = 'hE2;
#150 r = 'h00;
#200 ->end_wave;
join
效果相同,前者顺序执行,后者并行执行。
6.如果在顺序块中,前面有一条语句是无限循环,下面的语句能否进行?
不能。
7.如果在并行块中,发生上述情况,会如何呢?
下面语句可以执行。