题目
用Verilog实现两个串联的异步复位的T触发器的逻辑,结构如图:
分析:
题目要求完成异步复位的T触发器,T触发器本质就是
- 输入为’0‘时,输出保持;
- 输入为’1‘时,输出翻转;
而题目要求的是两个TFF串联,所以只需要会写TFF的翻转逻辑,再级联即可。异步复位只需要在每个触发器上使用异步复位端口rst,这个端口是触发器器件自带的。
此处需要注意的是,所有的触发器,不论是DFF或者TFF都是时序逻辑,组合逻辑是实现不了保持这个行为的!
题解:
`timescale 1ns/1ns
module Tff_2 (
input wire data, clk, rst,
output reg q
);
reg data_tmp;
always @ ( posedge clk or negedge rst)begin //TFF0
if(~rst)
data_tmp <= 1'b0;
else
if(data)
data_tmp <= !data_tmp;
end
always @ ( posedge clk or negedge rst)begin //TFF1
if(~rst)
q <= 1'b0;
else
if(data_tmp)
q <= !q;
end
endmodule
在写这段Verilog时,很多同学很将两个触发器逻辑写在一个always块中,其实两个触发器输出并没有共同点。
博主建议大家可以将逻辑相同的触发器写在一个always块内,否则还是尽可能分开完成。
没有回复内容