私は奇妙な問題に直面しています。このコードは単純なALU用です。関心のコードだけをここに貼り付けられます:Verilogの奇妙なシミュレーション結果の合成
always @(posedge clk or posedge rst)
begin
if (rst == 1) begin
mul_valid_shr = 3'b000;
end else begin
if (op_mul_i == 1) begin
mul_valid_shr = 3'b111;
end else begin
mul_valid_shr <= mul_valid_shr << 1;
end
end
end
、常にブロックの外側:
:
assign mul_valid = mul_valid_shr[2];
私のテストベンチとPOST合成機能シミュレーション結果を以下ましたリセットはすでに低いですが、なぜシムが初めて動作しませんでしたが、2回目と3回目は正常に動作していますか? op_mul_i
を100nsの前にトリガーすると、rst
が低くても、初めてmul_result
が機能しなくなります。
いずれの場合も歓迎します。
UPDATE:FULL CODE HERE:op_mul_i生成される方法https://www.edaplayground.com/x/28Hx
これは問題の原因ではないと思われますが、ブロックされた割り当てとブロックされていない割り当ては、通常、フリップフロップを意味する変数に対してノンブロッキング代入を使用したいとします。私はあなたのシンセサイザーがあなたにこれをさせるのを許して驚いています。だから、 'mul_valid_shr'(' mul_valid_shr = 3'b ... ')に対する2つのブロッキング割り当ては非ブロック(' mul_valid_shr <= 3'b ... ')でなければなりません。 –
私はすでにこれを試して、すべてを非ブロッキングにしました。それでも、まったく同じ結果が得られます。 – Qazi
私はそれが助けになるとは思わなかった。それにもかかわらず、それらを混同しないでください。 –