资源描述
___计算机__学院 网络工程 专业 1 班____组、学号 姓名 协作者______________ 教师评定_________________
实验题目_________________数字逻辑期末综合实验_________________
一、 题目(学号单号的做1、2,双号的做3、4)
1. 用HC161设计一个九进制计数器(清零法和置数法,参考《实验指导书》P53)
2. 用HC161设计一个分频器(参考《实验指导书》P52,不用数码显示)
3. 用HC138译码器实现符合电路
4. 用数据选择器实现符合电路
二、 要求按顺序报告以下内容
1. 设计分析过程
2. 连线图
3. 预分析其运行步骤、输入输出的变化过程(包括控制端)
4. 实验通过老师验证的,拍下实验实际连线图,及验证数据;
没通过验证的,分析实验不成功的原因。
5. 用Verilog编写的代码模块及测试平台
6. 第一次仿真结果
实验报告
选做题目:用HC161设计一个九进制计数器(置数法)
1. 设计分析过程
九进制计数器的计数容量是9,而计数器74HC161的计数器容量为16。显然,如使74HC161的计数初值由7(对应的二进制数为0111)开始,即可将计数容量由16变为9,从而得到九进计数器,相应的状态图如图所示。
1110
1011
1100
1101
1000
0111
1111
1010
1001
/0 /0 /0 /0
/1 /0
/0 /0 /0
由于需要在每次计数值达到1111后,下一个状态从0111开始,从而应使D3D2D1D0=0111。此时,还需生成置位信号,置位信号可通过将进位输出(TC)取反获得,即=。
2. 连线图
1666
1
1 VCC VCC
15
2
clk CP TC C
14
3
1 D0 Q0 Q0
13
41
1 D1 Q1 Q1
12
5
1 D2 Q2 Q2
11
6
0 D3 Q3 Q3
7
11
1 CEP CET 1
9
8
GND
3. 预分析其运行步骤、输入输出的变化过程(包括控制端)
输入变化主要是时钟信号的变化,其他数据变化都是根据时钟变化而变化的,实际连线图采用的是1Hz时钟信号,实验中是每1s产生一次时钟信号,即计数器每1s进行一次计数,从0111开始,随着时钟变化而进行计数,每次计数值达到1111后,下一个状态从0111开始。每次计数值达到1111时,还会生成进位信号,同时将进位信号取反,形成置位信号,使计数器重新由0111开始计数。
4. 实验通过老师验证的,拍下实验实际连线图,及验证数据;
没通过验证的,分析实验不成功的原因。
5. 用Verilog编写的代码模块及测试平台
代码模块:
module HC161(CP,CEP,CET,MRN,PEN,Dn,Qn,TC);
input CP;
input CEP,CET;
output[3:0] Qn;
input MRN,PEN;
input[3:0] Dn;
output TC;
reg[3:0] qaux;
reg TC;
always @ (posedge CP)
begin
if(!MRN)
qaux<=4'b0111;
else if(!PEN)
qaux<=Dn;
else if(CEP&CET)
qaux<=qaux+1;
else qaux<=qaux;
end
always @ (posedge CP)
begin
if(qaux==4'b1110 && CET==1)
TC=1'b1;
else TC=1'b0;
end
assign Qn=qaux;
endmodule
测试平台
`timescale 1ns/1ns
module testbench;
reg cp,cep,cet,mrn,pen;
reg[3:0] dn;
wire tc;
wire[3:0] qn;
parameter DELY=20;
always #(DELY/2) cp=~cp;
initial
begin
cep=1;
repeat(15)
#DELY cet=$random;
end
initial
begin
pen=1;
#DELY pen=0;
#60 pen=1;
end
initial
begin
mrn=1;
repeat(20)
#15 mrn=$random;
end
initial
#300 $finish;
HC161 test(cp,cep,cet,mrn,pen,dn,qn,tc);
endmodule
6. 第一次仿真结果
1. 设计分析过程
根据符合电路的特点知,当数据选择器输入为0(000)或者7(111)时,输出为1;因此,138芯片中只需关心Y0和Y7。当Y0和Y7其中一个为1的时候,输出为1。则只需要将Y0和Y7或之后的结果赋值给Yout。
2. 连线图
>=1
1666
1
A0 VCC VCC Yout
15
2
A1 Y0
14
3
A2 Y1
13
41
E1 Y2
12
5
E2 Y3
11
6
1 E3 Y4
7
11
Y7 Y5 1
9
8
GND Y6
3. 描述其运行步骤、输入输出的变化过程(包括控制端)
控制端:
因为138只有在E1=2=E3=1时才工作,所以测试代码中先让e1,e2,e3都为0,再分别过20个单位时间赋值为1使芯片工作。
输入输出变化:
输入端从0一直赋值到7,输出端是A0和A7的或运算之后的结果,因此只有在输入端为0或者7的时候输出端才为1。
4. 时序电路画出状态转换图
010
110
011
100
101
001
000
111
/0 /0 /0
/1 /0 /0 /0 /0
5. 用Verilog编写的代码模块及测试平台
/ 138.v
module hc138(E3,E2,E1,A,Yout);
input E3,E2,E1;
input [2:0]A;
output Yout;
reg Yout;
reg [7:0]Y;
always@(E3,E2,E1,A)
begin
if(!(E2|E1)||(!E3))
Y=8'b11111111;
else if(E2==E1&&E2==E3&&E3==1)
if(A==3'b000)
Y=8'b10000000;
else if(A==3'b111)
Y=8'b00000001;
else
Y=8'b00000000;
if(Y[7]|Y[0])
Yout=1;
else Yout=0;
end
endmodule
测试平台代码:
// test138fuhe.v
`timescale 1ns/1ns
module hc138test();
reg[2:0]a;
reg e3,e2,e1;
wire yout;
hc138 u1(e3,e2,e1,a,yout);
initial
begin
e1=0;e2=0;e3=0;
#20 e2=1;
#20 e1=1;
#20 e3=1;
#20 a=3'b000;
#20 a=3'b001;
#20 a=3'b010;
#20 a=3'b011;
#20 a=3'b100;
#20 a=3'b101;
#20 a=3'b110;
#20 a=3'b111;
#20;
end
endmodule
8
展开阅读全文