首页 > 解决方案 > T触发器不会产生输出

问题描述

我已经制作了一些verilog代码和一个测试台来创建一个T触发器,但不能让输出改变为x以外的任何东西。我尝试在模块和测试台中将 o/p as reg 执行,然后将 tb reg 分配给电线,但没有奏效。不知道挂在哪里。

下面是触发器模块:

module Tflipflop(input T, S, R, En, clk, output reg Q, output Qn);

assign Qn = ~Q;

always@(posedge clk | R | S) begin
    if(R == 1'b1)
        Q <= 1'b0;
    else if (S ==1'b1)
        Q <= 1'b1;
    else if (En==1'b1) begin
        case(T)
            1'b1: Q <= ~Q;
            1'b0: Q <= Q;
        default: Q <= Q;
        endcase
    end
    else
        Q <= Q; 
end
endmodule

下面是测试台:

`timescale 1ns/1ps

module Tflipflop_tb();

reg T, S, R, En, clk;
wire Qn, Q;

Tflipflop TFF_1(.T(T), .S(S), .R(R), .En(En), .clk(clk), .Q(Q), .Qn(Qn));

initial begin
clk = 0; T = 1; S = 0; R = 0; En = 1; #5;
clk = 1;                              #5;
clk = 0;                              #5;
clk = 1;                              #5;
clk = 0;                              #5;
clk = 0;                              #5;
clk = 1;                              #5;
clk = 0;                      En = 0; #5;         
clk = 1;                              #5;
clk = 0;                              #5;
clk = 1;                              #5;
end

endmodule

modelsim 中的仿真图片:

t_flip_flop 模拟

标签: verilogflip-flop

解决方案


您的 DUT 和测试台代码中有两个问题。

  • DUT:使用事件or运算符,而不是按位布尔运算符。您不希望代码对表达式的上升沿敏感(clk | R | S)。有关说明,请参阅此链接
  • TB:您需要设置R或设置S为 1 以使翻牌摆脱未知状态。

推荐阅读