仿真结果与综合示意图

时间:2016-05-14 20:46:22

标签: verilog system-verilog xilinx vivado

我有一个非常简单的电路来更新我的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被断言(其他一些传统也取决于此)。所以,我将start注册到lastStart,等待条件,然后采取适当的行动。

我使用的是Vivado 2015.4和 vSim XSim,以及Kintex Ultrascale 060.经过精心设计/综合后,我得到了以下电路原理图:

elaboration schematic

post-synthesis schematic 我的功能/ RTL仿真符合我的期望。但是,由于设计在电路板上没有运行,我选择尝试后综合模拟,并得到以下结果: post-synthesis simulation 如图所示,我的测试平台引发start,Vivado插入的IBUF输出产生相同的值。但是,由于未知原因,lastStartstart为高(t = 35ns,t = 45ns)时无法捕获两个时钟边沿中任何一个的值。此外,尽管start&&!lastStart为高ruleCountReg401 unauthorized也不会更新。

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

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

timing sim (post-synth)

1 个答案:

答案 0 :(得分:2)

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

  

在合成后和实现后仿真中,GSR(全局置位/复位)信号   在前100 ns自动置位以模拟复位   在配置之后发生。

所以它是愚蠢的,但是有意的。