牛客网Verilog刷题——VL2
- 题目
- 答案
题目
要求用verilog实现两个串联的异步复位的T触发器的逻辑,如下图所示。
模块的输入输出信号如下表,需要注意的是:这里rst是低电平复位,且采用异步复位的方式复位。
信号 | 类型 | 输入/输出 |
---|---|---|
clk | wire | Intput |
rst | wire | Intput |
qt | reg | Output |
模块的输入输出时序如下图所示。
在数字电路中,我们学过,T触发器的次态
Q
∗
Q^*
Q∗取决于现态
Q
Q
Q和输入T,当T=0时,
Q
∗
=
Q
Q^*=Q
Q∗=Q,当T=1时,
Q
∗
Q^*
Q∗=~
Q
Q
Q。其真值表如下。
T T T | Q Q Q | Q ∗ Q^* Q∗ |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
答案
根据T触发器的原理,可以编写Verilog代码。
`timescale 1ns/1ns
module Tff_2 (
input wire data, clk, rst,
output reg q
);
//*************code***********//
reg data_1;
always @(posedge clk or negedge rst)
if(!rst)
data_1 <= 1'b0;
else if(data)
data_1 <= ~data_1;
else
data_1 <= data_1;
always @(posedge clk or negedge rst)
if(!rst)
q <= 1'b0;
else if(data_1)
q <= ~q;
else
q <= q;
//*************code***********//
endmodule