写在前面
牛客网中有各类题库,其中就有 FPGA/IC 的 Verilog 题库,通过刷题可以巩固基础。
牛客网 Verilog 题库包括基础、进阶以及企业笔试真题,并且全部免费!
本系列持续更新自己的刷题历程。
牛客网刷题直达链接
牛客网 Verilog 刷题链接(FPGA/IC)
目录
题目描述
题目分析
Verilog 代码
testbench 代码
仿真结果
用verilog实现两个串联的异步复位的T触发器的逻辑,结构如图:
信号示意图:
波形示意图:
输入描述:
输入信号 |
data |
clk |
rst |
类型 |
wire |
wire |
wire |
在 testbench 中,clk 为周期 5ns 的时钟,rst 为低电平复位
输出描述:
输出信号 |
q |
类型 |
reg |
T 触发器
T 触发器是在数字电路中,凡在 CP 时钟脉冲控制下,根据输入信号 T 取值的不同,具有保持和翻转功能的触发器,即当 T=0 时能保持状态不变,当 T=1 时一定翻转的电路。
将 JK 触发器的输入端 J、K 连接在一起,作为输入端 T,就构成了 T 触发器。
T 触发器的特性方程
Qn+1 = T Qn ' +T ' Qn = T⊕Qn
(其中 Qn 为现态,Qn+1 为次态)
T触发器的特性表
T |
Q |
Q* |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
本题就是要实现两个 T 触发器串联,并且采用同源时钟且异步复位的形式。
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
// Engineer : Linest-5
// File : Tff_2.v
// Create : 2022-09-29 22:18:20
// Revise : 2022-09-29 22:18:22
// Module Name : Tff_2
// Description : 两个T触发器串联,T触发器的输出逻辑为 Q = D ^ Q
// Editor : sublime text3, tab size (4)
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
`timescale 1ns/1ps
module Tff_2(
input wire clk,
input wire rst, //低电平复位
input wire data,
output reg q
);
//*************code***********//
reg data_reg;
always @(posedge clk or negedge rst) begin
if (!rst) begin
data_reg <= 'd0;
q <= 'd0;
end
else begin
data_reg <= data ^ data_reg;
q <= data_reg ^ q;
end
end
//*************code***********//
endmodule
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
// Engineer : Linest-5
// File : tb_Tff_2.v
// Create : 2022-09-29 22:20:30
// Revise : 2022-09-30 09:52:35
// Module Name :
// Description :
// Editor : sublime text3, tab size (4)
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
`timescale 1ns/1ps
module tb_Tff_2();
reg clk;
reg rst; //低电平复位
reg data;
wire q;
initial begin
clk = 'd1;
rst = 'd0;
data = 'd0;
#100
rst = 'd1;
#1000
$finish;
end
always #5 clk = ~clk;
always #45 data = ~data;
Tff_2 inst_Tff_2 (
.clk(clk),
.rst(rst),
.data(data),
.q(q)
);
//verdi
initial begin
$fsdbDumpfile("tb_Tff_2.fsdb");
$fsdbDumpvars(0);
end
endmodule
电路结构
仿真波形
经过两级 T 触发器,结果 q 输出与设计一致。