1

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がアサートされたときに登録することです (他のいくつかの伝統もこれに依存しています)。だから、私は に登録startlastStart、条件を待ってから、適切に行動します。

Vivado 2015.4 とvSim XSim、および Kintex Ultrascale 060 を使用しています。エラボレート/合成の後、次の回路図が得られます。

精緻化回路図

合成後の回路図 私の機能/RTL シミュレーションは、私が期待したものと一致しています。しかし、ボード上でデザインが機能していなかったので、合成後のシミュレーションを試すことにしました。次のような 合成後のシミュレーション 結果が得られました。 示されているようにstart、テストベンチによって発生し、Vivado によって挿入された IBUF からの出力は同じ値を生成します。 . ただし、理由は不明ですが、が High の場合 (t=35ns、t=45ns) lastStart、2 つのクロック エッジのいずれかで値をキャプチャできません。startまた、start&&!lastStart高いにも関わらずruleCountReg更新されません。

比較のために、機能 RTL シミュレーションを次に示します 関数型 RTL シミュレーション 。Is this a bug in Vivado? Verilog は簡単で、回路の正しい回路図を生成しているように見えますが、正しくないネットリストを作成している可能性はありますか? 合成では、これらの信号に関連する警告は生成されません。


編集:シミュレーションの最初の 100ns の間、xSim がレジスタを更新していないように見えます。

タイミングシミュレーション(シンセ後)

4

1 に答える 1

3

Xilinx UG900によると、これは意図した動作です。

合成後およびインプリメンテーション後のシミュレーションでは、コンフィギュレーション後に発生するリセットをシミュレートするために、GSR (グローバル セット/リセット) 信号が最初の 100 ns の間自動的にアサートされます。

だからばかげていますが、意図的です。

于 2016-05-19T17:23:18.200 に答える