牛客网——VL2 异步复位的串联T触发器

1. 题目

 VL2 异步复位的串联T触发器

2.T触发器

T触发器逻辑功能为:当T=0时,触发器状态不变Qn+1=Qn;而当T=1时,在脉冲有效边沿到来时翻转。触发器的特性表如表1-1所示:
表1-1:

TQn+1
0Qn
1~Qn

3. RTL 代码

思路:例化两个T触发器。

`timescale 1ns/1ps

module Tff_2
(
    input   clk     ,
    input   rst     ,
    input   data    ,
    output  q   
);

//output of U1 to U2 input
wire    q_temp;

Tff Tff_U1 (.clk(clk), .rst_n(rst), .t(data), .q(q_temp));
Tff Tff_U2 (.clk(clk), .rst_n(rst), .t(q_temp), .q(q));

endmodule 

//**** Tff design ****//
module Tff
(
    input   wire    clk     ,
    input   wire    rst_n   ,
    input   wire    t       ,
    
    output  reg     q
);

always@(posedge clk or negedge rst_n)begin 
    if(~rst_n)begin 
        q <= 1'b0;
    end else if (t) begin 
        q <= ~q;
    end else begin 
        q <= q;
    end 
end 

endmodule 

4.Tb

`timescale 1ns/1ps

module tb();

reg clk;
reg rst_n;
reg data;
wire q;

/*-------------------------------------\
     data | q_temp | q
      0   |   0    | 0 
      0   |   1    | 1
      1   |   0    | 1
      1   |   1    | 0
\-------------------------------------*/

//***** generate clk *****//
always begin 
    #10 clk = ~clk; //clk is 20ns
end 

initial begin 
    clk     = 1'b1;
    rst_n   = 1'b1;
    data    = 1'b0;

    repeat(10) @(posedge clk);
    rst_n = 1'b0;
    repeat(5) @(posedge clk);
    rst_n = 1'b1;

//***** fixed testing *****//
    repeat(5)begin 
        case_4(data,1);
    end 

    repeat(5)begin 
        case_4(data,0);
    end 

    repeat(5)begin 
        case_4(data,1);
    end 

//***** random testing *****//
    repeat(100)begin 
        case_random(data);
    end 

    repeat(100) @(posedge clk);
    $finish();
end 

//***** task define *****//
task case_4;
    output  a;
    input   b;

    case(b)
        0: #20 a = 0;
        1: #20 a = 1;
    endcase
endtask

task case_random;
    output  a;
     a = #20 {$random} % 2;
endtask


always@(posedge clk)begin 
    $display("data = %d; q_temp = %d; q = %d",data, Tff_2.q_temp, q);
end 

//***** generate .fsdb *****//
initial begin 
    $fsdbDumpfile("tb.fsdb");
    $fsdbDumpvars(0,tb);
end 

Tff_2 U1
(
    .clk    (clk)   ,
    .rst    (rst_n) ,
    .data   (data)  ,
    .q      (q) 
);

endmodule 

5. 仿真结果

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值