Я создал некоторый verilog-код и тестовый стенд для создания триггера T, но не могу заставить выходные данные изменить что-либо, кроме x. Я попытался сделать o / p как 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: