正常的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不是必须的。