基于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.如果在并行块中,发生上述情况,会如何呢?

下面语句可以执行。

posted @ 2023-05-22 19:32  江左子固  阅读(32)  评论(0编辑  收藏  举报