仿真结果与综合原理图不匹配

Simulation results don't match Synthesis schematics

我有一个非常简单的电路来更新我的 IP 核中的寄存器。

input clk;
input rst;
input start;
input [31:0] ruleCount;

reg lastStart;
output reg [31:0] ruleCountReg;

always@(posedge clk)
    if (rst)
        lastStart <= 0;
    else
        lastStart <= start;

always@(posedge clk) 
    if (rst) begin
        ruleCountReg <= 0;
    end
    else if (start && !lastStart) begin
        ruleCountReg <= ruleCount;
    end

这里的目标是在第一个周期注册 ruleCount start 被断言(一些其他的 traitions 也依赖于此)。所以,我将start注册到lastStart,等待条件,然后适当地行动。

我正在使用 Vivado 2015.4 和 vSim XSim,以及 Kintex Ultrascale 060。在 elaborate/synthesis 之后,我得到以下电路原理图:

我的 functional/RTL 模拟符合我的预期。然而,由于设计在电路板上无法正常工作,我选择尝试 post-综合模拟,并得到以下结果: 如图所示,start 由我的测试平台引发,Vivado 插入的 IBUF 的输出产生相同的值。但是,由于未知原因,当 start 为高电平(t=35ns,t=45ns)时,lastStart 无法捕获两个时钟边沿中任一个的值。此外,尽管 start&&!lastStart 很高,但 ruleCountReg 也没有更新。

为了进行比较,这里是功能性 RTL 仿真: 这是 Vivado 中的错误吗? Verilog 是微不足道的,它似乎为电路生成了正确的原理图,但它会不会创建了一个不正确的网表? Synthesis 不会产生任何与这些信号相关的警告。


编辑: xSim 似乎在模拟的前 100ns 期间没有更新任何寄存器。

根据 Xilinx UG900,这是预期的行为。

In post-synthesis and post-implementation simulations, the GSR (Global Set/Reset) signal is automatically asserted for the first 100 ns to simulate the reset that occurs after configuration.

所以这是愚蠢的,但故意的。