基于SparkRoad的《Verilog数字系统设计教程·第三版(夏宇闻)》学习(9)——第8章

此章含有 28 个练习题


(1)图 8.1 为一个填空练习,将所给各个选项根据以下电路图,填入程序中的适当位置。

module AOI(A,B,C,D,F);   //这个地方的AOI的命名忘记了,只写了module
   input A,B,C,D;
   output F;
   assign F=((A&B)&(C&D));
endmodule

(2)在这一题中,将做有关层次电路的练习(见图 8.2)。通过这个练习,将加深对模块间调用时,引脚间连接的理解。假设已有全加器模块 FullAdder,若有一个顶层模块调用此全加器,连接线分别为 W4,W 5,W 3,W 2,W 1。请在调用时正确地填入 I/O 的对应信号。

FullAdder(.Sum(W1),
		  .Count(W2),
		  .Cin(W3),
		  .A(W4),
		  .B(W5),
);

(3)本题是一个测试模块,没有输入、输出端口,请将相应项填入合适的位置,如图 8.3 所示。

module TestFixture
   reg A,B,SEL;
   wire F;
   $monitor(SEL,A,B,F);
   initial
   begin
   SEL=0;A=0;B=0;
   #10 A=1;
   #10 SEL=1;
   #10 B=1;
   end
   initial
   MUX2 M(SEL,A,B,F)
endmodule

(4)指出下面几个信号的最高位和最低位。
最高位分别为 SEL[1]和 IP[0]和A[16]
最低位分别为 SEL[0]和 IP[2]和 A[23]
这一题记住,不是说一定是数字低位就是高位


(5)P, Q, R 都是 4 bit 的输入矢量,下面哪一种表达形式是正确的。
第五个
第四个写的应该是不严谨,如果三个定义的顺序不一样,要分开定义


(6)请将下面选项中的正确答案填入空的方括号中。
第五个,位宽相同,右边的填入左边的


(7)请根据以下两条语句,从选项中找出正确答案。
1)第一个和第二个
十六位 FF 为 11111111,A 只选取最低两位,故为 8'b0000_0011 换成十六进制为8'h 03,另外_的书写并不影响程序,只是为了方便观察
2)第四个
这题没有写出来见 P 30,x、z 在数字电路中 x 代表不定值,z 代表高阻值,且是从某一位开始都是 x 或 z


(8 )请指示下面几条语句中变量的类型
A wire 类型;B wire/reg 类型;C wire/reg 类型;Count reg 类型


(9)指出下面模块中 Cin,Cout,C 3,C 5 的类型
Cin wire 类型;Cout wire/leg 类型;C 3 wire/leg 类型;C 5 wire 类型;


(10)在下一个程序中,当 ADDRESS 的值等于 5'b 0 X 000 时,问 caseX 执行完后 A 和 B 的值是多少。
A=1 和 B=0. 因为 case、casez、casex 都是只要从上至下有一位符合,则接下来不用执行。
输入考虑高阻态;考虑不定态
[不定态与高阻态]((33条消息) 不定态与高阻态,及modelsim默认波形颜色的含义_modelsim蓝色波形_刘小适的博客-CSDN博客)


(11)事件 A 分别在 10,20, 30 发生,而 B 一直保持 X 状态,问在 50 时 Count 的值是多少。
Count=1。多个 always 模块式并行驱动,但是针对某一个单独 always 模块内,是按照顺序执行的,敏感列表中的 A 改变第一次之后,B 一直保持 X 状态,并不知道是什么状态,所以@(B)后续的程序一直没触发,阻挡了程序进一步进行,至于 A 的第二三次发生也不存在了。


(12)在下列程序中 initial 块执行完后,I, J, A, B 的值会是多少?
Integer 表示整数,可以为负数,所以进行后,I=-1,J=0。
Reg 不可以表示负数,A=0,减一操作后,用补码表示负数,-1 为 111,计算方式为-22+21+2^0=-4+2+1=-1,计算得出 A,而 B 位宽为 4,则 111+1=1000,故 A 为 7,B 为 8。


(13)在下列程序中,当 V 的值发生变化且为-1 时,执行完 always 块后 Count 的值应是多少?
V 为-1,则为 1111_1111,发生了改变触发 always 模块,Count=0,但此时 V[0]为 1,并不符合 while 发生条件,所以 Count 仍保持 0。


(14)在下列程序中,循环执行完后,V 的值是多少?
V 并没有给出初值,但对于这个题,当 V=1 时,运行结束后为 0;当 V=0 时,运行结束后为 1,即位初值取反。


(15)在下列程序中,给出了几种硬件实现,问以下的模块被综合后可能是哪一种?
第二个和第五个
[多路器](“多路复用器”是一种什么样的元器件? (enroo.com))
[透明锁存器](什么是透明锁存器_百度知道 (baidu.com))


(16)在下列程序中,always 状态将描述一个带异步 Nreset 和 Nset 输入端的上升沿触发器,则空括号内应填入什么?

  1. 带有 Nreset 信号,排除第二选项
  2. 程序中所写的为 !Nreset =1和 !Nset=1 触发,故 Nreset 和 Nset 应为下降沿触发,为 negedge,排除第一、三选项
  3. Nreset 为异步出发,所以还需要 clock 信号,排除第五选项
  4. 答案为第四选项

(17)下面给出了集中硬件实现,问以下的模块被综合后可能是哪一种?

  1. 第五个
  2. 第二个
  3. 第一个,受两个触发影响,异步复位的触发器
  4. 第二个(不能综合或与预先设想的不一致这一个要再想一想哪些是这种情况?)

(18)在下列程序中,模块被综合后将产生几个触发器?
这一道题没有弄懂。 网上也有针对这一题的讨论,对答案也有质疑。
[知乎讨论此题]((9 封私信 / 50 条消息) 为什么以下verilog代码产生两个寄存器(B和C)? - 知乎 (zhihu.com))


(19)在下列程序中,各条语句的顺序是错误的,请根据图 8.4 所示电路图调整好它们的顺序。
关键在于等号邮编赋值给左边,并且按照串联顺序依次赋值。

reg FF1,FF2,FF3;
always@(posedge Clock)
   begin
   FF1<=Input;
   FF2<=FF1;
   FF3<=FF2;
   Output<=FF3;
end

或者

reg FF1,FF2,FF3;
always@(posedge Clock)
   begin
   Output<=FF3;
   FF3<=FF2;
   FF2<=FF1;
   FF1<=Input;
end

(20)根据 SEL 列与 OP 列的对应关系,在模块的空括号中填入相应的值。

3'bXX1:OP=3;
3'b0X0:OP=1;
3'b1X0:OP=0;

类似于卡诺图化简即可


(21)在以下表达式中选出正确的。
3、5、8、9


(22)在下列程序的括号中填入 display 的正确值。

  1. A=1111;B=0000_1111
  2. A=0111 除 2 就是集体右移
  3. B=0001_0101 (b)=21 (d)
  4. A=0101 (b)=5 (d)
  5. A=1110 (b)/2=0111 (b)=7 (d)

(23)请问{1,0}与下面哪一个值相等。
第五个。位拼接运算必须要指明位数,若不指明则隐含为 32 位的二进制数。


(24)根据下题给出的程序,确定应将哪一个选项填入尖括号内。
见书 P 126


(25)如果调用 Pipe 时,想把 Depth 的值变为 8,问程序中的空括号内应填入何值?
#(1,8)其中 1 对应参数 Option,8 对应参数 Depth。


(26)、(27)、(28)见书 P 128

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