《Verilog数字系统设计教程》夏宇闻 第三版思考题
答案合集 : Verilog学习系列 第三部分
1.逻辑运算符与按位逻辑运算符有什么不同,它们各在什么场合使用?
用逻辑运算符运算时是两个操作数进行逻辑运算,而按位逻辑运算符是两个操作数对应的每一位进行逻辑运算。逻辑运算符多用于条件的判断,按位逻辑运算符用于信号的运算和检测。
2.指出两种逻辑等式运算符的不同点,解释书上的真值表。
两种逻辑运算符有很大的区别。“===” 要求两个比较数完全一样,无论高阻还是未知,只要每位完全相同即可。 “= =”只有在两个操作数每位都已知(即0或1),在这种前提下两个操作数每位相同结果才为真,如果不是在这个前提那么其结果始终未x。
3.拼接符的作用是什么?为什么说合理地使用拼接符可以提高程序的可读性和可维护性?拼接符表示的操作其物理意义是什么?
拼接符的作用是把两个或多个信号的某些位拼接起来进行运算操作。因为借助拼接符可以用一个符号名来表示由多位信号组成的复杂信号。其物理意义是将多个信号结合成一个信号。
4.如果都不带时间延迟,阻塞和非阻塞赋值有什么不同?举例说明它们的不同点?
区别:阻塞是顺序执行 而 非阻塞是并行执行。
举例:非阻塞赋值
always@(posedge clk)
begin
b<=a; //块结束后执行
c<=b;
end
结果:b=a;c=b
举例:阻塞赋值
always@(posedge clk)
begin
b=a; //立即执行
c=b;
end
结果:b=a;c=a
5.举例说明顺序块和并行块的不同
顺序块如下:
parameter d = 50;
reg [7:0] r;
begin
#d r = 'h35;
#d r ='hE2;
#d r = 'hF7;
#d -> end_wave; //表示触发事件 end_wave使其翻转
end //利用顺序块和延迟控制,产生一个时序波形
并行块如下:
fork
#50 r = 'h35;
#150 r = 'hF7; //语句可以不按顺序给出,执行顺序是按照延迟时间
#100 r ='hE2;
#200 -> end_wave; //表示触发事件 end_wave使其翻转
join //利用并行块和延迟控制,产生一个时序波形
上面两个块执行起来效果是完全一样的,第一个模块是按顺序执行,而第二个模块是每个语句同时执行的。
6.如果在顺序块中,前面有一条语句是无限循环,下面的语句能否进行?
下面的语句不能执行。
7.如果在并行块中,发生上述情况,会如何呢?
下面的语句可以执行。