教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 教育文库 >

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

来源:网络收集 时间:2026-07-27
导读: 1.一个全减器具有三个一位输入:x,y和z(前面的借位),两个一位输出D(差)和B(借位)。 计算D和B的逻辑等式如下所示: D = x’ y’ z’ + x’ y z’ + x y’ z’ + x y z B = x’ y + x’ z + y z 根据上面的定义写出Verilog描述,包括I/O端口(注意:

1.一个全减器具有三个一位输入:x,y和z(前面的借位),两个一位输出D(差)和B(借位)。

计算D和B的逻辑等式如下所示:

D = x’ y’ z’ + x’ y z’ + x y’ z’ + x y z B = x’ y + x’ z + y z

根据上面的定义写出Verilog描述,包括I/O端口(注意:逻辑等式中的+对应于数据流建模中的逻辑或(| |)操作符)。编写激励块,在模块中实例引用全减器。对x,y和z这三个输入的8种组合及其对应的输出进行测试。

x 0 0 0 0 1 1 1 1

y 0 0 1 1 0 0 1 1

z 0 1 0 1 0 1 0 1

B 0 1 1 1 0 0 0 1

D 0 1 1 0 1 0 0 1

答:代码及测试激励如下:(D 应该= x’ y’ z + x’ y z’ + x y’ z’ + x y z) `timescale 1ns/1ns

module full_sub(x,y,z,D,B); input x,y,z; output D,B;

assign D=((!x)&(!y)&(z))||((!x)&y&(!z))||(x&(!y)&(!z))||(x&y&z); assign B=((!x)&y)||((!x)&z)||(y&z);

endmodule

module test61; reg x,y,z; wire D,B;

58

initial begin

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

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

full_sub fsubtracter(x,y,z,D,B); initial

$monitor($time,"x= %b,y= %b,z= %b,B= %b,D= %b",x,y,z,B,D);

endmodule

最终输出观测结果:

# 0x= 0,y= 0,z= 0,B= 0,D= 0 # 10x= 0,y= 0,z= 1,B= 1,D= 1 # 20x= 0,y= 1,z= 0,B= 1,D= 1 # 30x= 0,y= 1,z= 1,B= 1,D= 0 # 40x= 1,y= 0,z= 0,B= 0,D= 1 # 50x= 1,y= 0,z= 1,B= 0,D= 0 # 60x= 1,y= 1,z= 0,B= 0,D= 0 # 70x= 1,y= 1,z= 1,B= 1,D= 1

第6章 数据流建模

59

2.大小比较器的功能是比较两个数之间的关系:大于、小于或等于。一个四位大小比较器的输

入是两个四位数A和B。我们可以将它们写成下面的形式,最左边的位为最高有效位:

A =A(3) A(2) A(1) A(0) B =B(3) B(2) B(1) B(0)

两个数的比较可以从最高有效位开始,逐位进行。如果两个位不相等,则该位值为0的数为较小的数。为了用逻辑等式实现这个功能,我们需要定义一个中间变量x。注意下面实现的是同或(xnor)的功能。

x (i) = A(i) B (i) + A (i)’ B (i)’

大小比较器的三个输出为:A_gt_B,A_lt_B和A_eq_B。其计算公式为:

A_gt_B = A(3) B(3)’ + x(3) A(2) B(2)’ + x(3) x(2) A(1) B(1)’ + x(3) x(2) x(1) A(0) B(0)’ A_lt_B = A(3)’ B(3) + x(3) A(2)’ B(2) + x(3) x(2) A(1)’ B(1) + x(3) x(2) x(1) A(0)’ B(0) A_eq_B = x (3) x (2) x (1) x (0)

写出模块magnitude_comparator的Verilog描述。写出激励模块并在模块中实例引用magnitude_ comparator模块。选择A和B的几种组合,对模块的功能进行测试。 答:代码以及测试激励: `timescale 1ns/1ns

module magnitude_comparator(A,B,A_gt_B,A_lt_B,A_eq_B); input [3:0] A,B;

output A_gt_B,A_lt_B,A_eq_B; wire x0,x1,x2,x3;

assign x0=((A[0])&(B[0]))||((!A[0])&(!B[0])); assign x1=((A[1])&(B[1]))||((!A[1])&(!B[1])); assign x2=((A[2])&(B[2]))||((!A[2])&(!B[2])); assign x3=((A[3])&(B[3]))||((!A[3])&(!B[3]));

assign A_gt_B =

(A[3]&(!B[3]))||(x3&A[2]&(!B[2]))||(x3&x2&A[1]&(!B[1]))||(x3&x2&x1&A[0]&(!B[0])), A_lt_B =

((!A[3])&B[3])||(x3&(!A[2])&B[2])||(x3&x2&(!A[1])&B[1])||(x3&x2&x1&(!A[0])&B[0]), A_eq_B = x3&x2&x1&x0; endmodule

module test62; reg [3:0] A,B;

wire A_gt_B,A_lt_B,A_eq_B;

60

initial begin

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

A<=0000;B<=0000; #10 A<=0000;B<=1000; #10 A<=1000;B<=0000; #10 $stop; end initial

$monitor($time,"When A=%b and B=%b,the outputs A_gt_B=%b, A_lt_B%b, A_eq_ B=%b; ", A, B, A_gt_B, A_lt_B, A_eq_B);

magnitude_comparator m1(A,B,A_gt_B,A_lt_B,A_eq_B);

endmodule 输出数据:

# 0When A= 0000 and B= 0000,the outputs A_gt_B=0,A_lt_B0,A_eq_B=1; # 10When A= 0000 and B= 1000,the outputs A_gt_B=0,A_lt_B1,A_eq_B=0; # 20When A= 1000 and B= 0000,the outputs A_gt_B=1,A_lt_B0,A_eq_B=0;

3.一个同步计数器可以使用主从JK触发器来设计。设计一个同步计数器,其逻辑图和JK触发

器的逻辑图如图6.5和图6.6所示。清零信号clear低电平有效,输入数据在时钟信号clock的上升沿被锁存,触发器在clock的下降沿输出;当count_enable信号为低电平时停止计数。写出同步计数器的Verilog描述和激励模块,在激励模块中使用clear和count_enable对计数器进行测试,并显示输出计数Q[3:0]。

J

clear

K

clock

图6.5 主从JK触发器

Q[3]

Q[0] Q[1]

CR Q CR Q CR J

Q CR Q clear clock

count-enable

图6.6 四位带清零端和计数使能端的同步计数器

答:

`timescale 1ns/1ns

module master_slave_jk(J,K,clear,clock, q,qbar); input J,K; input clear,clock; output q,qbar; wire a,b,y,ybar,c,d;

assign #1 a=~(qbar&J&clear&clock), b=~(q&clock&K); assign #1 y=~(a&ybar), ybar=~(y&b&clear); assign #1 c=~(y&(~clock)), d=~(ybar&(~clock)); assign #1 q=~(c&qbar), qbar=~(d&q&clear);

endmodule

module counter63(clock,clear,count_enable,Q); input clock,clear; input count_enable; output [3:0] Q;

wire a1,a2,a3;

//module master_slave_jk(J,K,clear,clock,q,qbar);

master_slave_jk jk0(count_enable,count_enable,clear,clock,Q[0],); //and a_1(a1,Q[1],count_enable);

master_slave_jk jk1(a1,a1,clear,clock,Q[1],); //and a_2(a2,Q[2],a1);

master_slave_jk jk2(a2,a2,clear,clock,Q[2],);

//and a_3(a3,Q[3],a2);

master_slave_jk jk3(a3,a3,clear,clock,Q[3],);

assign a1=Q[0]&count_enable; assign a2=Q[1]&a1; assign a3=Q[2]&a2; endmodule

module test63;

reg clock,clear,count_enable; wire [3:0] Q; initial begin

clock<=0;clear<=0;count_enab …… 此处隐藏:2396字,全部文档内容请下载后查看。喜欢就下载吧 ……

Verilog HDL数字设计与综合(第二版) 第六章课后习题答案.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/115536.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)