仿真结果与综合原理图不匹配
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.
所以这是愚蠢的,但故意的。
我有一个非常简单的电路来更新我的 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 之后,我得到以下电路原理图:
start
由我的测试平台引发,Vivado 插入的 IBUF 的输出产生相同的值。但是,由于未知原因,当 start
为高电平(t=35ns,t=45ns)时,lastStart
无法捕获两个时钟边沿中任一个的值。此外,尽管 start&&!lastStart
很高,但 ruleCountReg
也没有更新。
为了进行比较,这里是功能性 RTL 仿真:
编辑: 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.
所以这是愚蠢的,但故意的。