行为模拟和合成后模拟中的值分配不同

问题描述 投票:-1回答:1
`timescale 1ns / 1ps

module pc_reg(
    input wire clk,
    input wire rst,
    input wire stall,

    input wire [`AddrLen - 1 : 0] jmp_target,
    input wire jmp_enable,
    input wire [`AddrLen - 1 : 0] prediction,
    input wire pred_enable,

    output reg [`AddrLen - 1 : 0] pc,
    output reg enable_pc
    );

    reg [`AddrLen - 1 : 0] npc;
    reg assigned;

always @ (posedge clk) begin
    if (rst == `ResetEnable) begin
        pc <= `ZERO_WORD;
        npc <= 4;
        assigned <= 1'b0;
        enable_pc <= 1'b1;
    end
    else begin
        if (jmp_enable == `JumpEnable) begin
            ....
        end
        else if (pred_enable == `JumpEnable && assigned != 1'b1) begin
            ....
        end
        else if (stall == `StallDisable) begin
            pc <= npc;
            npc <= npc + 4;
            assigned <= 1'b0;
            enable_pc <= 1'b1;
        end
        else begin
            enable_pc <= 1'b0;
        end
    end
end

endmodule

这段代码的预期功能是在每个周期将4添加到npc。

在行为模拟中,这是正确的。但是,在合成后仿真中,无论时钟频率如何,它都会在每个周期添加2enter image description here

verilog fpga vivado synthesis
1个回答
0
投票

[如果您仔细看,您会发现波形显示将npc显示为[30:0](因此它不显示[31:0],它应为32位宽)。

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