我是靠谱客的博主 傲娇月光,这篇文章主要介绍VL2 异步复位的串联T触发器一、题目二、分析三、RTL四、Testbench五、结果分析,现在分享给大家,希望可以做个参考。

写在前面

  1. 这个专栏的内容记录的是牛客的Verilog题库刷题,附带RTLTestBench,并进行覆盖率收集。
  2. 牛客算是一个Verilog宝藏刷题网站了,网站提供在线仿真环境,不用自己找题(点击直达),<刷题记录>专栏,持续打卡中…

文章目录

  • 一、题目
    • 1. 题目描述
    • 2. 状态转换
    • 3. 信号示意图
    • 4. 波形示意图
    • 5. 输入描述
    • 6. 输出描述
  • 二、分析
  • 三、RTL
  • 四、Testbench
  • 五、结果分析
    • (1)TB分析
    • (2)波形图
    • (3)覆盖率


一、题目

1. 题目描述

  用verilog实现两个串联的异步复位的T触发器的逻辑


2. 状态转换

在这里插入图片描述


3. 信号示意图

在这里插入图片描述


4. 波形示意图

在这里插入图片描述


5. 输入描述

输入信号类型位宽
datawire1
clkwire1
rst_nwire1

6. 输出描述

输入信号类型位宽
q1reg1

二、分析

  由T触发器的特性表可以知道,当当前的输入为0时,无论输出是0还是1,输出的下一个状态均保持当前的输出值;当当前输入值是1时,输出的下一个状态是当前输出的取反。要求的时钟周期是5ns。


三、RTL

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
`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内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(91)

评论列表共有 0 条评论

立即
投稿
返回
顶部