Verilog HDL数字设计与综合(第二版) 第五章课后习题答案

  • 格式:doc
  • 大小:125.50 KB
  • 文档页数:8

1.利用双输入端的nand门,用Verilog编写自己的双输入端的与门、或门和非门,把它们分别命名为my_or,my_and和my_not,并通过激励模块验证这些门的功能。

答:`timescale 1ns/1ns/**************************** ********** my_and *********** ****************************/ module my_and(in1,in2,out); input in1,in2;output out;wire out1;nand a1(out,out1,out1);nand a2(out1,in1,in2); endmodule/**************************** ********** my_or ************ ****************************/ module my_or(in1,in2,out);input in1,in2;output out;wire out1,out2;nand o1(out,out1,out2);nand o2(out1,in1,in1);nand o3(out2,in2,in2); endmodule/**************************** ********** my_not *********** ****************************/ module my_not(in,out);input in;output out;nand n1(out,in,in);endmodule/**************************** ********** test ***************************************/module test;reg a,b;wire and_c,or_c,not_c;initialbegina<=0;b<=0;#10 a<=0;b<=1;#10 a<=1;b<=0;#10 a<=1;b<=1;#10 $stop;endmy_and myand1(a,b,and_c);my_or myor1(a,b,or_c);my_not mynot1(a,not_c); endmodule2.使用上题中完成的my_or,my_and和my_not门构造一个双输入端的xor门,其功能是计算z第5章门级建模41= x’y + x y’,其中x和y为输入,z为输出;编写激励模块对x和y的四种输入组合进行测试仿真。

答:在上题代码的基础上,添加如下代码:(注意,xor在仿真器中已自备,这里用my_xor)/************************************* my_xor ******************* z=x'y+xy' *************************************/module my_xor(in1,in2,out);input in1,in2;output out;wire not_in1,not_in2,out_a1,out_a2;my_not mynot1(in1,not_in1);my_not mynot2(in2,not_in2);my_and myand1(in1,not_in2,out_a1);my_and myand2(in2,not_in1,out_a2);my_or myor1(out_a1,out_a2,out);endmodulemodule test52;reg x,y;wire z;initialbeginx<=0;y<=0;#10 x<=0;y<=1;#10 x<=1;y<=0;#10 x<=1;y<=1;#10 $stop;endmy_xor myxor(x,y,z);endmoduleVerilog HDL数字设计与综合(第二版)423.本章中的一位全加器使用乘积项之和的形式可以表示为①:sum = a ⋅ b ⋅ c_in + a’⋅ b ⋅ c_in’ + a’⋅ b’⋅ c_in + a ⋅ b’⋅ c_in’c_out = a ⋅ b + b ⋅ c_in + a ⋅ c_in其中a,b和c_in为输入,sum和c_out为输出;只使用与门、或门、非门实现一个一位全加器,写出其Verilog描述,限制是每个门最多只能有四个输入端。

编写激励模块对其功能进行检查,并对全部的输入组合进行测试。

答:在前面的课程中已经学习过一位全加器的相关知识,一位全加器的电路如下所示:按此电路图,采用门级描述代码如下:`timescale 1ns/1nsmodule full_add(a,b,c_in,sum,c_out);input a,b,c_in;output sum,c_out;wire s1,s2,s3,s4,s5,s6,s7;nand (s1,a,b);nand (s2,a,s1);nand (s3,b,s1);nand (s4,s2,s3);nand (s5,s4,c_in);nand (s6,s4,s5);nand (s7,s5,c_in);nand (sum,s6,s7);nand (c_out,s5,s1);endmodulemodule test53;reg a,b,c_in;wire sum,c_out;①上面两个习题中原书作者用“’”表示取反操作,用“⋅”表示与操作。

——译者注第5章门级建模43initialbegina<=0;b<=0;c_in<=0;#10 a<=0;b<=0;c_in<=1;#10 a<=0;b<=1;c_in<=0;#10 a<=0;b<=1;c_in<=1;#10 a<=1;b<=0;c_in<=0;#10 a<=1;b<=0;c_in<=1;#10 a<=1;b<=1;c_in<=0;#10 a<=1;b<=1;c_in<=1;#10 $stop;endinitial$monitor($time,"a=%b,b=%b,c_in=%b,sum= %b,c_out= %b",a,b,c_in,sum,c_out);full_add fadd(a,b,c_in,sum,c_out);endmodule输出的数据和波形:# 0a= 0,b= 0,c_in= 0,sum= 0,c_out= 0# 10a= 0,b= 0,c_in= 1,sum= 1,c_out= 0# 20a= 0,b= 1,c_in= 0,sum= 1,c_out= 0# 30a= 0,b= 1,c_in= 1,sum= 0,c_out= 1# 40a= 1,b= 0,c_in= 0,sum= 1,c_out= 0# 50a= 1,b= 0,c_in= 1,sum= 0,c_out= 1# 60a= 1,b= 1,c_in= 0,sum= 0,c_out= 1# 70a= 1,b= 1,c_in= 1,sum= 1,c_out= 14.带有延迟的RS锁存器如下图所示,写出其带有延迟的Verilog门级描述。

编写其激励模块,根据下面的输入-输出关系表对其功能进行验证。

Verilog HDL 数字设计与综合(第二版)44答:代码如下`timescale 1ns/1nsmodule my_rs(reset,set,q,qbar); input reset,set; output q,qbar;nor #(1) nand1(q,reset,qbar); nor #(1) nand2(qbar,set,q);endmodulemodule test54; reg set,reset; wire q,qbar; initial beginset<=0;reset<=1; #10 set<=0;reset<=0;resetset qqbar第5章门级建模45 #10 set<=1;reset<=0;#10 set<=1;reset<=1;endmy_rs rs1(reset,set,q,qbar);initial$monitor($time,"set= %b,reset= %b,q= %b,qbar= %b",set,reset,q,qbar);endmodule测试输出文件# 0set= 0,reset= 1,q= x,qbar= x# 1set= 0,reset= 1,q= 0,qbar= x# 2set= 0,reset= 1,q= 0,qbar= 1# 10set= 0,reset= 0,q= 0,qbar= 1# 20set= 1,reset= 0,q= 0,qbar= 1# 21set= 1,reset= 0,q= 0,qbar= 0# 22set= 1,reset= 0,q= 1,qbar= 0# 30set= 1,reset= 1,q= 1,qbar= 0# 31set= 1,reset= 1,q= 0,qbar= 05.使用bufif0和bufif1设计一个二选一多路选择器,如下图所示:Verilog HDL 数字设计与综合(第二版)46门b1和b2的延迟说明如下所示:最 小 值典 型 值最 大 值上升延迟 1 2 3 下降延迟 3 4 5 关断延迟567在设计完成后,写出激励模块对其进行仿真。

答:代码如下 `timescale 1ns/1nsmodule mux21(out,in0,in1,s); input in0,in1; input s; output out;bufif0 #(1:2:3,3:4:5,5:6:7) b1(out,in0,s); bufif1 #(1:2:3,3:4:5,5:6:7) b2(out,in1,s);endmodulemodule test55; reg in0,in1; reg s; wire out; initial beginin0<=0;in1<=1;s<=1; #100 in0<=0;in1<=1;s<=0;sbufif0out第5章门级建模47#100 in0<=1;in1<=0;s<=1;#100 in0<=1;in1<=0;s<=0;#100 $stop;endmux21 my_mux(out,in0,in1,s);initial$monitor($time,"in0= %b,in1= %b,s= %b,out= %b",in0,in1,s,out);endmodule输出波形和数据# 0in0= 0,in1= 1,s= 1,out= x# 6in0= 0,in1= 1,s= 1,out= 1# 100in0= 0,in1= 1,s= 0,out= 1# 104in0= 0,in1= 1,s= 0,out= x# 106in0= 0,in1= 1,s= 0,out= 0# 200in0= 1,in1= 0,s= 1,out= 0# 300in0= 1,in1= 0,s= 0,out= 0# 302in0= 1,in1= 0,s= 0,out= x# 306in0= 1,in1= 0,s= 0,out= 1。