题解 | #异步复位的串联T触发器#

异步复位的串联T触发器

https://www.nowcoder.com/practice/9c8cb743919d405b9dac28eadecddfb5

`timescale 1ns/1ns
module Tff_2 (
input wire data, clk, rst,
output reg q  
);
//*************code***********//
    reg q1;
    always @(posedge clk or negedge rst) begin
        if(!rst) begin
            q1 <= 1'b0;
            q <= 1'b0;
        end
        else begin
            if(data) begin
                q1 <= ~q1;
                if(q1)
                    q <= ~q;
                else
                    q <= q;
            end
            else begin
                q1 <= q1;
                if(q1)
                    q <= ~q;
                else
                    q <= q;
            end

        end
    end

//*************code***********//
endmodule

T触发器概念

T触发器(Toggle Flip-Flop,or Trigger Flip-Flop)只有一个信号输入端T,在时钟有效边沿(上升沿/下降沿)到来时,T端输入有效信号,则触发器翻转,否则触发器保持不变。触发器的输出信号有一个,当T端为0时,输出取Q,当T端为1时,取Q的反相Q_bar。

T触发器特征方程

T触发器的特征表

触发器的输出信号有一个,当T端为0时,输出取Q,当T端为1时,取Q的反相Q_bar

本题是两个T触发器的叠加,前一个触发器的输出给到后一个触发器的输入

data对Q过程的影响会在下一个时钟周期

Q过程对Q输出的影响也会在下一个时钟周期

Testbench

`timescale 1ns/1ns
module testbench();
	reg clk=0;
	always #5 clk = ~clk;  // Create clock with period=10
// A testbench
    reg rst;
    reg data;
    parameter MAX_NUM = 5;
    reg [2:0] num;
    wire q;
    
    initial begin
        rst <= 1'b0;
        data <= 1'b0;
        num <= 3'b0;
        #10;
        rst = ~rst;
        
        #200 $finish;
    end
    
    //data
    always @(negedge clk or negedge rst) begin
        if(!rst) begin
            data <= 1'b0;
            num <= 3'b0;
        end
        else begin
            if(num == MAX_NUM - 1) begin
                data <= ~data;
                num <= 3'b0;
            end
            else begin
                num <= num + 1;
                data <= data;
            end
        end
    end       
    
    //dut
    Tff_2 Tff_2_inst(
        .clk(clk),
        .rst(rst),
        .data(data),
        .q(q)
    );
    
    
//end    
  initial begin
    $dumpfile("out.vcd");
    // This will dump all signal, which may not be useful
    //$dumpvars;
    // dumping only this module
    //$dumpvars(1, testbench);
    // dumping only these variable
    // the first number (level) is actually useless
    $dumpvars(0, testbench);
end  
    
endmodule

Verilog小白 文章被收录于专栏

记录自学Verilog的过程

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务