其他分享
首页 > 其他分享> > 实现74LVC161的计数器功能

实现74LVC161的计数器功能

作者:互联网

VerilogHDL程序设计与仿真作业8:

——实现74LVC161的计数器功能

文章目录

一、实验目的

二、实现74LVC161的计数器功能

1、设计思路

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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、仿真

在这里插入图片描述

在这里插入图片描述

fuchaoxinHUST

标签:74LVC161,功能,CEP,计数器,CET,MR,CP,PE
来源: https://blog.csdn.net/Antonioxv/article/details/110981323