FPGA仿真与上板实测不一致可能的一点问题

两段Verilog代码在仿真时均通过,但实际应用中,第二段使用乘法运算进行条件判断会导致上板后PC值无法更新。原因在于乘法操作可能引入延迟,影响预期结果,建议优先使用位运算以减少潜在问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

请看下面两段代码:

module PC(
    input PCwr,clk,rst,Z,
    input [31:0] NPC,
    output reg [31:0] PC
    );

    always @(posedge clk) begin
        if(!rst)
        begin
          PC <= 32'h0000_0000;
        end
        else begin
            if(PCwr&Z)
            begin
                PC <= NPC;
            end
            else begin
                PC <= PC;
            end
            //$display(PC);
        end
    end
endmodule

module PC(
    input PCwr,clk,rst,Z,
    input [31:0] NPC,
    output reg [31:0] PC
    );

    always @(posedge clk) begin
        if(!rst)
        begin
          PC <= 32'h0000_0000;
        end
        else begin
            if(PCwr*Z)
            begin
                PC <= NPC;
            end
            else begin
                PC <= PC;
            end
            //$display(PC);
        end
    end
endmodule

这两段代码在仿真时都可以通过,但上板后却出现不同的效果。

第一段是正确的,使用位运算在进行条件判断;第二段在仿真时可以正常运行,但在板上却没办法给PC赋成新的值,所以在写verilog的时候还是尽量使用位运算,上板子不容易出现这种错误,明明逻辑正确但无法得到预期结果。

可能的原因是*会调用乘法器,导致延迟的发生。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值