VerilogHDL程序设计与仿真作业8:
——实现74LVC161的计数器功能
文章目录
一、实验目的
- 实现74LVC161的计数器功能
二、实现74LVC161的计数器功能
1、设计思路
-
结合74LVC161的引脚图、功能表等等,进行为级建模,实现74LVC161的计数器功能
-
74LVC161的引脚定义
- 74LVC161逻辑符号
- 74LVC161的功能表
2、实现代码
//文件名称:_74LVC161.v
//fuchaoxinHUST12102020
module _74LVC161(CP, MR_, PE_, D, CEP, CET, Q, TC);
input CP, MR_, PE_;
input [3:0] D;
input CEP, CET;
output reg [3:0] Q;
output reg TC;
/*说明:
输入端:PE_预置信号端;CR_清零信号端;CEP,CET使能信号;CP时钟信号,上升沿敏感;[3:0] D预置输入;
输出端:[3:0] Q输出端;进位信号TC;
*/
always @(posedge CP or negedge MR_) begin
if(~ MR_) begin
Q = 4'b0000;
TC = 0;
end
else if (~ PE_) begin
Q <= D;
end
else begin
casex ({CEP, CET})
2'b0x: Q <= Q; // 保持
2'bx0: begin
Q <= Q; TC = 0; // 保持
end
2'b11: begin
Q <= Q + 1'b1; TC = (Q == 4'b1111);
end
endcase
end
end
endmodule
3、测试代码
//文件名称:Test_74LVC161.v
//fuchaoxinHUST12102020
`timescale 10ns/1ns
module Test_74LVC161;
reg CP, MR_, PE_, CEP, CET ;
reg [3:0] D;
wire [3:0] Q;
wire TC;
_74LVC161 U0(CP, MR_, PE_, D, CEP, CET, Q, TC);//实例化元件
initial
$monitor($time,":\t MR_=%b, PE_=%b, D=%b, CEP=%b, CET=%b, Q=%b, TC=%b \n", MR_, PE_, D, CEP, CET, Q, TC);
//监视器的显示内容
initial
CP = 0;
always
#1 CP = ~CP;
initial begin
// 预置1111
MR_=1; PE_ = 0; CEP=1; CET=1; D=4'b1111;
#1
// 保持
MR_=1; PE_ = 1; CEP=0; CET=1; D=4'b1111;
#1
// 清零
MR_=0; PE_ = 1; CEP=1; CET=1; D=4'b1111;
#1
// 计数
MR_=1; PE_ = 1; CEP=1; CET=1; D=4'b1111;
#25
// 停止计数,并保持
MR_=1; PE_ = 1; CEP=1; CET=0; D=4'b1111;
#2
$stop;//停止模拟仿真
end
endmodule
4、仿真
- 波形
- 监控器