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

更新时间:2023-03-15 19:57:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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; initial begin

a<=0;b<=0; #10 a<=0;b<=1; #10 a<=1;b<=0; #10 a<=1;b<=1; #10 $stop; end

my_and myand1(a,b,and_c); my_or myor1(a,b,or_c); my_not mynot1(a,not_c);

endmodule

2.使用上题中完成的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);

endmodule

module test52; reg x,y; wire z; initial begin

x<=0;y<=0; #10 x<=0;y<=1; #10 x<=1;y<=0; #10 x<=1;y<=1; #10 $stop; end

my_xor myxor(x,y,z);

endmodule

42 Verilog HDL数字设计与综合(第二版)

3.本章中的一位全加器使用乘积项之和的形式可以表示为:

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/1ns

module 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);

endmodule

module test53; reg a,b,c_in; wire sum,c_out;

① 上面两个习题中原书作者用“’”表示取反操作,用“?”表示与操作。——译者注

第5章 门 级 建 模

43

initial begin

a<=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; end initial

$monitor($time,\

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= 1

4.带有延迟的RS锁存器如下图所示,写出其带有延迟的Verilog门级描述。编写其激励模块,

根据下面的输入-输出关系表对其功能进行验证。

41 第5章 门 级 建 模

reset

#1 q

set (reset) #1 qbar

答:代码如下`timescale 1ns/1ns

module my_rs(reset,set,q,qbar); input reset,set; output q,qbar;

nor #(1) nand1(q,reset,qbar); nor #(1) nand2(qbar,set,q);

endmodule

module test54; reg set,reset; wire q,qbar; initial begin

set<=0;reset<=1; #10 set<=0;reset<=0;

set reset qn+1 0 0 qn 0 1 0 1 0 1 1 1 ?

本文来源:https://www.bwwdw.com/article/eh6v.html

Top