正常的T触发器,有三个输入:
1、clk:时钟信号。
2、rst:复位信号。
3、data:控制信号。
一个输入:0或1。
其运算过程如下:
在每个时钟clk上升沿:如果data为1,输出为上一次输出取反,data若为0,则输出仍为上一次输出。
例如:在第一个clk上升沿时,T触发器输出为1,那么在第二个上升沿,若data为1,则输出变为:0;若data为0,则输出仍然为1。
复位信号为0,输出都为0,没什么好说的。
这个题直接按照提议,连着写两个T触发器即可。
`timescale 1ns/1ns module Tff_2 ( input wire data, clk, rst, output reg q ); //*************code***********// reg q1; initial begin q1 = 1'b0; q = 1'b0; end always@(posedge clk) if(rst == 1'b0) q1 <= 1'b0; else if(data == 1'b1) q1 <= ~q1; always@(posedge clk) if(rst == 1'b0) q <= 1'b0; else if(q1 == 1'b1) q <= ~q; //*************code***********// endmodule两个always是两个T触发器,用一个中间变量q1将两个触发器联系起来,组成串联网络。
initial 是将两个输出初始化,主要是因为题目要求初始都是0,否则报错。实际工程里initial不是必须的。