我是靠谱客的博主 傲娇月光,最近开发中收集的这篇文章主要介绍VL2 异步复位的串联T触发器一、题目二、分析三、RTL四、Testbench五、结果分析,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
写在前面
- 这个专栏的内容记录的是牛客的Verilog题库刷题,附带RTLTestBench,并进行覆盖率收集。
- 牛客算是一个
Verilog宝藏刷题网站
了,网站提供在线仿真环境,不用自己找题(点击直达),<刷题记录>专栏,持续打卡中…
文章目录
- 一、题目
- 1. 题目描述
- 2. 状态转换
- 3. 信号示意图
- 4. 波形示意图
- 5. 输入描述
- 6. 输出描述
- 二、分析
- 三、RTL
- 四、Testbench
- 五、结果分析
- (1)TB分析
- (2)波形图
- (3)覆盖率
一、题目
1. 题目描述
用verilog实现两个串联的异步复位的T触发器的逻辑
2. 状态转换
3. 信号示意图
4. 波形示意图
5. 输入描述
输入信号 | 类型 | 位宽 |
---|---|---|
data | wire | 1 |
clk | wire | 1 |
rst_n | wire | 1 |
6. 输出描述
输入信号 | 类型 | 位宽 |
---|---|---|
q1 | reg | 1 |
二、分析
由T触发器的特性表可以知道,当当前的输入为0时,无论输出是0还是1,输出的下一个状态均保持当前的输出值;当当前输入值是1时,输出的下一个状态是当前输出的取反。要求的时钟周期是5ns。
三、RTL
module Tff_2
(
input clk ,
input rst_n ,
input data ,
output reg q1
);
reg data_buf;
always @ (posedge clk or negedge rst_n) begin
if (!rst_n) begin
data_buf <= 1'b0;
end
else if (data == 1) begin
data_buf <= ~data_buf;
end
else begin
data_buf <= data_buf;
end
end
always @ (posedge clk or negedge rst_n) begin
if (!rst_n) begin
q1 <= 1'b0;
end
else if (data_buf == 1) begin
q1 <= ~q1;
end
else begin
q1 <= q1;
end
end
endmodule
四、Testbench
`timescale 1ps/1ps
module tb_Tff_2;
reg clk ;
reg rst_n ;
reg data ;
wire q1 ;
/*-----------------------------------------------
-- data | data_buf | next_data_buf --
-- 0 | 0 | 0 --
-- 0 | 1 | 1 --
-- 1 | 0 | 1 --
-- 1 | 1 | 0 --
-----------------------------------------------*/
initial begin
clk = 1;
rst_n = 1;
data = 0;
#2500 rst_n = 0;
#5000 rst_n = 1;
repeat(5)begin
case_4(data,1);
end
repeat(5)begin
case_4(data,0);
end
repeat(5)begin
case_4(data,1);
end
repeat(100)begin
case_random(data);
end
end
/*-----------------------------------------------
-- --
-----------------------------------------------*/
task case_4;
output a;
input b;
case(b)
0: #5000 a = 0;
1: #5000 a = 1;
endcase
endtask
task case_random;
output a;
#5000 a = {$random}%2;
endtask
/*-----------------------------------------------
-- clock period is 5ns --
-----------------------------------------------*/
always begin
#2500 clk = ~clk;
end
/*-----------------------------------------------
-- display --
-----------------------------------------------*/
always @ (posedge clk ) begin
$display("data = %d ; data_buf = %d ; q1 = %d",data,Tff_2.data_buf,q1);
end
Tff_2 tb_Tff_2(
.clk (clk ),
.rst_n (rst_n),
.data (data ),
.q1 (q1 )
);
initial #350000 $finish;
initial begin
$fsdbDumpfile("Tff_2.fsdb");
$fsdbDumpvars ;
$fsdbDumpMDA ;
end
endmodule
五、结果分析
(1)TB分析
有TB测试结果可以看出,DUT符合“异步复位的串联T触发器”的预期功能
(2)波形图
(3)覆盖率
由覆盖率收集情况可以看到,涉及的行、信号翻转覆盖、分支覆盖率均是100%。
✍✍☛ 题库入口
经过一段时间的沉淀,发现入行IC行业,自己的底子还是很差,写的文章质量参差不齐,也没能解答大家的疑问。决定还是要实打实从基础学起,由浅入深。因此决定通过补充/完善基础知识的同时,通过题库刷题不断提高自己的设计水平,题库推荐给大家(点击直达),<题库记录>栏目不定期更新,欢迎前来讨论。
作者:xlinxdu
版权:本文版权归作者所有
转载:未经作者允许,禁止转载,转载必须保留此段声明,必须在文章中给出原文连接。
最后
以上就是傲娇月光为你收集整理的VL2 异步复位的串联T触发器一、题目二、分析三、RTL四、Testbench五、结果分析的全部内容,希望文章能够帮你解决VL2 异步复位的串联T触发器一、题目二、分析三、RTL四、Testbench五、结果分析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复