【问题标题】:D FlipFlop sequence generator for the sequence 1101011 does not generate resultsD 序列 1101011 的触发器序列生成器不生成结果
【发布时间】:2020-11-28 16:03:30
【问题描述】:

我在DFF 模块中为 DFlipFlop 创建了一个模块,并在seqgen 模块中实例化了其中的 4 个。我无法生成结果。你能帮我看看哪里出错了吗?

module DFF(input d, input rstn, input clk, output reg q);

    always @(posedge clk or negedge rstn)
        if(!rstn)
            q <= 0;
        else
            q <= d;
endmodule

module seqgen();
    wire q1=1'b1,q2=1'b1,q3=1'b1,q4=1'b0;
    wire da=1'b1;
    reg clk = 1'b0,rstn  = 1;
    always #10 clk = ~clk;
    assign da = ~q1|~q2|~q4;
    DFF dffa(da,rstn,clk,q1);
    DFF dffb(q1,rstn,clk,q2);
    DFF dffc(q2,rstn,clk,q3);
    DFF dffd(q3,rstn,clk,q4);
endmodule

【问题讨论】:

    标签: verilog register-transfer-level digital-design


    【解决方案1】:

    有两种类型的问题。

    由于连续的wire 分配,您的DFF 模块的输出是从DFF 模块和seqgen 模块内部驱动的。您不应为wire 赋值。这会导致争用,这是输出上未知值 (x) 的来源之一。在da 的情况下,您有 2 个连续分配,但您应该只有 1 个。

    此外,您应该在时间 0 置位复位,等待延迟,然后取消置位复位。这是未知数的另一个来源。由于是低电平有效复位,设置为0,延时后设置为1。

    这段代码为我消除了未知信号。

    module seqgen();
        wire q1,q2,q3,q4;
        wire da;
        reg clk = 1'b0, rstn = 0;
        initial #25 rstn=1;
        always #10 clk = ~clk;
        assign da = ~q1|~q2|~q4;
        DFF dffa(da,rstn,clk,q1);
        DFF dffb(q1,rstn,clk,q2);
        DFF dffc(q2,rstn,clk,q3);
        DFF dffd(q3,rstn,clk,q4);
    endmodule
    

    【讨论】:

      猜你喜欢
      • 2022-11-05
      • 2012-12-19
      • 1970-01-01
      • 1970-01-01
      • 2011-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多