由於已知的軟體問題,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
軟體應將未迴響的訊號零延伸[0],以確保將一位值加到位切片中 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 中),請執行下列其中一項:
- 請聯絡 mySupport,要求 Quartus II 軟體版本 6.0 SP1 修補程式 1.20。
- 將括弧放在其中一個變數上,並迫使整個表達方式使用 Verilog-2001 功能評估為未指派:
rounded
- 以手動方式將領先零分墊片如下(亦即明確說明領先位應為 0):
rounded