記事 ID: 000084426 コンテンツタイプ: トラブルシューティング 最終改訂日: 2012/09/11

Quartus® II 合成で、ビット・セレクトが符号付き変数から不正に処理されるのはなぜですか?

環境

BUILT IN - ARTICLE INTRO SECOND COMPONENT
詳細

Quartus® II ソフトウェア・バージョン 6.0 および 6.0 SP1 は、既知のソフトウェアの問題により、符号付き変数からのビット選択を誤って処理します。符号付き変数からビット選択を含む Verilog コードは、Verilog LRM (Std 1364-2001 バージョン C、Sec 4.5.1) で指定されている内容のコードを戻す必要があります。

この問題はバージョン 5.1 以前には存在しません。この問題は、インテル® Quartus® II ソフトウェア・バージョン 6.1 から修正されています。

この問題の一例として、Quartus® II ソフトウェア・バージョン 6.0 では、以下のコードサンプルが誤って処理されます。

reg [7:0] unrounded;

reg [6:0] rounded;

always @ (posedge clk) begin

 rounded <= unrounded[7:1]   unrounded[0];

ソフトウェアは、シグナル un 0 をゼロ拡張して、ビットスライスに 1 ビット値が追加されていることを確認する必要があります unrounded[7:1]

Quartus® II ソフトウェアのバージョン 6.0 および 6.0 SP1 の符号は、信号を unrounded[0] ゼロ拡張するのではなく拡張します。この例では、 unrounded[0] 信号が 1 の値の場合、ソフトウェアは 1 を数字の符号と解釈するため、数値の代わりに-1 の 7 ビット符号付き表記に変換します。そのため、ソフトウェアは 1 を追加 unrounded[7:1] する代わりに -1 を追加します。

(バージョン 6.0 または 6.0 SP1) この問題を回避するには、次のいずれかの手順を実行します。

  • Quartus® II ソフトウェア・バージョン 6.0 SP1 のパッチ 1.20 をリクエストするには、mySupportにお問い合わせください。
  • 変数の 1 つを囲み、Verilog-2001 関数を使用して式全体を強制して「スプリント」と評価します。
rounded <= (unrounded[7:1])   unrounded[0]
  • 以下のように手動で先頭のゼロを埋め込みます (つまり、先頭のビットを 0 にする必要があると明示的に述べてください)。
  • rounded <= unrounded[7:1]   {{6{1'b 0}}, unrounded[0]};

     

関連製品

本記事の適用対象: 1 製品

Stratix® II FPGA

このページのコンテンツは、元の英語のコンテンツを人力翻訳および機械翻訳したものが混在しています。この内容は参考情報および一般的な情報を提供するためものであり、情報の正確さと完全性を保証するものではありません。インテルは不正確な翻訳があった場合でもいかなる責任を負いません。このページの英語版と翻訳の間に矛盾がある場合は、英語版に準拠します。 このページの英語版をご覧ください。