题解 | #异步复位的串联T触发器#
异步复位的串联T触发器
https://www.nowcoder.com/practice/9c8cb743919d405b9dac28eadecddfb5
`timescale 1ns/1ns module Tff_2 ( input wire data, clk, rst, output reg q ); reg q1; //*************code***********// always@(posedge clk or negedge rst) if(~rst) begin q1 <= 1'b0; q <= 1'b0; end else begin if(data) begin q1 <= !q1; end if(q1) begin q <= !q; end end //*************code***********// endmodule
`timescale 1ns/1ns module testbench(); reg clk=0; always #5 clk = ~clk; // Create clock with period=10 // A testbench reg rst,data; initial begin rst = 0;data=0; #60 data = 1; #60 data = 0; #60 data = 1; $finish(0); end Tff_2 u1(.data(data), .rst(rst), .clk(clk), .q(q) ); //end initial begin $dumpfile("out.vcd"); $dumpvars(0, testbench); end endmodule
`timescale 1ns/1ns module Tff_2 ( input wire data, clk, rst, output reg q ); //*************code***********// reg data_1; always @ (posedge clk or negedge rst) begin if (!rst) data_1 <= 1'b0; else data_1 <= data ^ data_1 ; end always @ (posedge clk or negedge rst) begin if (!rst) q <= 1'b0; else q <= data_1 ^ q; end //*************code***********// endmodule