• 【牛客网刷题】VL2 异步复位的串联T触发器


    👉 写在前面

    👉 本系列博客记录牛客网刷题记录

    👉 日拱一卒,功不唐捐!


    目录

    题目描述    

    题目分析

    Verilog 代码

    testbench 代码

    仿真结果


    题目描述    

    verilog实现两个串联的异步复位的T触发器的逻辑,结构如图:

    信号示意图:

    波形示意图:

    输入描述:

    输入信号

     data

    clk

    rst

    类型

    wire

    wire

    wire

    testbench 中,clk 为周期 5ns 的时钟,rst 为低电平复位

    输出描述:

    输出信号

    q

    类型

    reg

    题目分析

    T 触发器

    T 触发器是在数字电路中,凡在 CP 时钟脉冲控制下,根据输入信号 T 取值的不同,具有保持和翻转功能的触发器,即当 T=0 时能保持状态不变,当 T=1 时一定翻转的电路。

    将 JK 触发器的输入端 J、K 连接在一起,作为输入端 T,就构成了 T 触发器。

    T 触发器的特性方程

    Qn+1 = T Qn ' +T ' Qn = T⊕Qn

    (其中 Qn 为现态,Qn+1 为次态)

    T触发器的特性表

    T

    Q

    Q*

    0

    0

    0

    0

    1

    1

    1

    0

    1

    1

    1

    0

    本题就是要实现两个 T 触发器串联,并且采用同源时钟且异步复位的形式。

    Verilog 代码

    1. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
    2. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
    3. // Engineer : Linest-5
    4. // File : Tff_2.v
    5. // Create : 2022-09-29 22:18:20
    6. // Revise : 2022-09-29 22:18:22
    7. // Module Name : Tff_2
    8. // Description : 两个T触发器串联,T触发器的输出逻辑为 Q = D ^ Q
    9. // Editor : sublime text3, tab size (4)
    10. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
    11. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
    12. `timescale 1ns/1ps
    13. module Tff_2(
    14. input wire clk,
    15. input wire rst, //低电平复位
    16. input wire data,
    17. output reg q
    18. );
    19. //*************code***********//
    20. reg data_reg;
    21. always @(posedge clk or negedge rst) begin
    22. if (!rst) begin
    23. data_reg <= 'd0;
    24. q <= 'd0;
    25. end
    26. else begin
    27. data_reg <= data ^ data_reg;
    28. q <= data_reg ^ q;
    29. end
    30. end
    31. //*************code***********//
    32. endmodule

    testbench 代码

    1. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
    2. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
    3. // Engineer : Linest-5
    4. // File : tb_Tff_2.v
    5. // Create : 2022-09-29 22:20:30
    6. // Revise : 2022-09-30 09:52:35
    7. // Module Name :
    8. // Description :
    9. // Editor : sublime text3, tab size (4)
    10. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
    11. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
    12. `timescale 1ns/1ps
    13. module tb_Tff_2();
    14. reg clk;
    15. reg rst; //低电平复位
    16. reg data;
    17. wire q;
    18. initial begin
    19. clk = 'd1;
    20. rst = 'd0;
    21. data = 'd0;
    22. #100
    23. rst = 'd1;
    24. #1000
    25. $finish;
    26. end
    27. always #5 clk = ~clk;
    28. always #45 data = ~data;
    29. Tff_2 inst_Tff_2 (
    30. .clk(clk),
    31. .rst(rst),
    32. .data(data),
    33. .q(q)
    34. );
    35. //verdi
    36. initial begin
    37. $fsdbDumpfile("tb_Tff_2.fsdb");
    38. $fsdbDumpvars(0);
    39. end
    40. endmodule

    仿真结果

    电路结构

    仿真波形

    经过两级 T 触发器,结果 q 输出与设计一致。

  • 相关阅读:
    Docker-Compose
    c语言:通讯录管理系统(增删查改)
    表白墙服务器版【交互接口、服务器端代码、前端代码、数据存入文件/数据库】
    平衡车的建模与控制
    pyside6开发-01-开发环境搭建
    2000-2021年三批“智慧城市”试点名单匹配数据
    C++11模板元编程-std::enable_if示例详解
    Oracle技术分享控制文件自动备份
    Torch模型打包(七)
    五种最流行的DNS攻击及防御对策
  • 原文地址:https://blog.csdn.net/m0_61298445/article/details/127118703