1

私の知る限り、以下のコードを実装するために必要なハードウェアはザイリンクス ISE Web パックではサポートされていません。always ブロックを使用して、8 ビット加算器の機能のみを実装しようとしています。コードは次のとおりです。

module Addr_8bit(Clk, Rst, En, LEDOut  
    );

     input Clk;
     input Rst;
     input En;
     output reg [7:0] LEDOut;

    always @(posedge Clk or posedge Rst) begin
            if(Rst)
                LEDOut <= 8'b00000000;
            if(En)
                LEDOut <= LEDOut + 8'b00000001;
    end
endmodule

エラーは、ノンブロッキング代入:LEDOut <= LEDOut + 8'b00000001;が配置されている行にあります。

特に、次のように述べています。

ERROR:Xst:899 - "Addr_8bit.v" line 33: The logic for <LEDOut> does not match a known FF or Latch template. The description style you are using to describe a register or latch is not supported in the current software release.

LEDOut の 8 ビット出力を、BASYS2 FPGA ボード (Spartan-3E) の 8 つの LED のそれぞれに対応させようとしています。

ありがとうございました。

4

1 に答える 1

1

動作の説明 (always ブロック内のコード) を次のように変更します。

always@(posedge CLK or negedge RST) begin
    if(!RST) begin // Reset condition goes here
        LEDOut <= 0;
    end
    else begin // Everything else goes here
        if(En)
            LEDOut <= LEDOut + 1'b1;
    end
end

コードが合成されない理由は、通常、2 つの異なる信号の同じエッジで同じレジスタに割り当てることができないためです。(両方のケースで変数に割り当てている場合、CLKRSTのローからハイへの遷移で常にブロックをトリガーすることはできません。) したがって、RST の正のエッジでリセット条件をトリガーすることはできませんが、負のエッジでそれを行うことができます。これは、物理レジスタ要素 (フリップフロップと呼ばれる) の設計方法によるものです。

于 2018-02-27T07:14:40.723 に答える