HDLBits Dff8p - 使用生成循环时重置不起作用

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

我正在尝试解决这个 HDLBits 问题,我的问题在提交以下代码时出现:

module top_module (
    input clk,
    input reset,
    input [7:0] d,
    output [7:0] q
);
    
    genvar i;
    generate for(i = 0; i < 8; i = i + 1)
        begin: DFF
            dFlipFlop instance_i(.clk(clk), .reset(reset), .d(d[i]), .q(q[i]));
        end
    endgenerate

endmodule

module dFlipFlop(input clk, input reset, input d, output q);
    always@(negedge clk) begin
        if(reset) q <= 8'h34;
        else q <= d;
    end
endmodule

提交此代码会给我提示“您的重置似乎不起作用。”这是一次不成功的尝试。

通过删除生成循环的使用并实现单个 8 位触发器来修复此错误,如下所示:

module top_module (
    input clk,
    input reset,
    input [7:0] d,
    output [7:0] q
);
    
    always@(negedge clk) begin
        if(reset) q <= 8'h34;
        else q <= d;
    end

endmodule

为什么使用生成循环会导致问题?

verilog hdl flip-flop
1个回答
0
投票

问题不在于

generate
循环。

问题出在这一行:

    if(reset) q <= 8'h34;

当您声明

output q
时,
q
是 1 位宽,但您尝试为其分配 8 位值 (8'h34)。这与
8b0011_0100
相同。
q
始终分配给值的 LSB,即 0。忽略 7 个 MSB。

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