实现74LVC161的计数器功能

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

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

文章目录

一、实验目的

  • 实现74LVC161的计数器功能

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

1、设计思路

  • 结合74LVC161的引脚图、功能表等等,进行为级建模,实现74LVC161的计数器功能

  • 74LVC161的引脚定义

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

  • 波形

实现74LVC161的计数器功能

  • 监控器

实现74LVC161的计数器功能

fuchaoxinHUST

上一篇:Swift - final关键字的介绍,以及使用场景


下一篇:如何设置listview每个item高度