在Verilog中使用SR翻转模块创建JK翻转模块。

问题描述 投票:0回答:1

我为SR Latch、SR Flip Flop(通过实例化SR Latch模块)和JK Flip Flop(通过实例化SR Latch模块)编写了verilog模块。我使用Xilinx Vivado 2019版进行仿真和查看输出波形。SR Latch和SR Flip flop模块工作得很好,我也得到了正确的输出波形。我试着通过实例化SR Latch模块来创建一个JK翻转模块。但我就是没有得到输出波形。我不知道是哪里出了问题。我也检查了布尔表达式。一切似乎都没有问题。谁能指出错误的地方?

下面是代码。

SR锁存模块

module sr_latch(s, r, q, qbar);
    input s, r;
    output q, qbar;
    nand(q, s, qbar);
    nand(qbar, r, q);
endmodule

使用SR闩锁的SR翻转模块

module sr_ff(s, r, clk, q, qbar);
    input s, r, clk;
    output q, qbar;
    reg t1, t2;
    always @(posedge clk)
        begin
            t1 <= !(clk & s);
            t2 <= !(clk & r);
        end
    sr_latch SRL(t1, t2, q, qbar);
endmodule

使用SR锁存器的JK翻转开关

module jk_ff(j, k, clk, q, qbar);
    input j, k, clk;
    output q, qbar;
    reg t1, t2;
    always @(posedge clk)
        begin
            t1 <= !(clk & qbar & j);
            t2 <= !(clk & q & k);
        end
    sr_latch SRL(t2, t1, q, qbar);
endmodule

JK Flip Flop Testbench

module jk_ff_tb();
    wire q, qbar;
    reg j, k, clk=1;
    integer i;
    jk_ff JKFF(j, k, clk, q, qbar);
    always #25 clk = !clk;

    initial
        begin
            for(i=0; i<4; i=i+1)
                begin
                    {j, k} <= i; #50;
                end
        $stop;
        end
endmodule
verilog hdl flip-flop
1个回答
0
投票

你的输出未知(X)因为你的 jk_ff 模型不允许对SR锁存器进行适当的初始化。

基于这个简单的原理图,你只需要在SR锁存器的输入端实现2个NAND门。

jkff schematic

这是一种方法,使用连续赋值。

module jk_ff (j, k, clk, q, qbar);
    input j, k, clk;
    output q, qbar;
    wire sn = clk & qbar & j;
    wire rn = clk & q    & k;
    sr_latch SRL (sn, rn, q, qbar);
endmodule

这样可以让输出成为已知的

另一种方法是在SR锁存器的输入端增加2个NAND门:这是一种方法,使用连续赋值:这样可以使输出成为已知。nand 基元。

请注意,JK 触发器可以从一个 SR 锁定,而不是SR 人字拖.

© www.soinside.com 2019 - 2024. All rights reserved.