1、 ___计算机__学院 网络工程 专业 1 班____组、学号 姓名 协作者______________ 教师评定_________________ 实验题目_________________数字逻辑期末综合实验_________________ 一、 题目(学号单号的做1、2,双号的做3、4) 1. 用HC161设计一个九进制计数器(清零法和置数法,参考《实验指导书》P53) 2. 用HC161设计一个分频器(参考《实验指导书》P52,不用数码显示) 3. 用HC138译码器实现符合电路 4. 用数据选择器实现符合电路 二、 要求按顺序报告以下内容
2、 1. 设计分析过程 2. 连线图 3. 预分析其运行步骤、输入输出的变化过程(包括控制端) 4. 实验通过老师验证的,拍下实验实际连线图,及验证数据; 没通过验证的,分析实验不成功的原因。 5. 用Verilog编写的代码模块及测试平台 6. 第一次仿真结果 实验报告 选做题目:用HC161设计一个九进制计数器(置数法) 1. 设计分析过程 九进制计数器的计数容量是9,而计数器74HC161的计数器容量为16。显然,如使74HC161的计数初值由7(对应的二进制数为0111)开始,即可将计数容量由16变为9,从而得到九进计数器,相应的状态图如图所示。 1110
3、 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
4、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. 预分析其运行步骤、输入输
5、出的变化过程(包括控制端) 输入变化主要是时钟信号的变化,其他数据变化都是根据时钟变化而变化的,实际连线图采用的是1Hz时钟信号,实验中是每1s产生一次时钟信号,即计数器每1s进行一次计数,从0111开始,随着时钟变化而进行计数,每次计数值达到1111后,下一个状态从0111开始。每次计数值达到1111时,还会生成进位信号,同时将进位信号取反,形成置位信号,使计数器重新由0111开始计数。 4. 实验通过老师验证的,拍下实验实际连线图,及验证数据; 没通过验证的,分析实验不成功的原因。 5. 用Verilog编写的代码模块及测试平台 代码模块: module HC161(C
6、P,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; e
7、nd 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=~c
8、p; 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; H
9、C161 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
10、 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. 描述其运行步骤、输入输出的
11、变化过程(包括控制端) 控制端: 因为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
12、 /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=
13、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 `timescal
14、e 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






