Die Quartus® II Softwareversion 6.0 und 6.0 SP1 verarbeitet Bit-Auswahlen aufgrund eines bekannten Softwareproblems fälschlicherweise aus unterzeichneten Variablen. Verilog-Code mit Bit-Selects aus vorsignierten Variablen sollte unsignierte Werte zurückgeben, wie in der Verilog LRM angegeben (Std 1364-2001 Version C, Sec 4.5.1).
Dieses Problem ist in Versionen 5.1 oder früher nicht vorhanden. Das Problem ist ab Version 6.1 der Quartus II Software behoben.
Als Beispiel für dieses Problem verarbeitet die Quartus II Software Version 6.0 fälschlicherweise das folgende Codebeispiel:
reg [7:0] unrounded; reg [6:0] rounded; always @ (posedge clk) begin rounded <= unrounded[7:1] unrounded[0];
Die Software sollte das Signal unrounded[0] null erweitern, um sicherzustellen, dass der One-Bit-Wert zum Bit-Slice von unrounded[7:1]
hinzugefügt wird.
Die Quartus II Softwareversionen 6.0 und 6.0 SP1 erweitern das Signal, anstatt das Signal unrounded[0]
null zu erweitern. Wenn das unrounded[0]
Signal im Beispiel ein 1-Wert ist, interpretiert die Software die 1 als das Zeichen der Zahl und konvertiert sie daher in eine 7-Bit-vorzeichensignierte Darstellung von -1 anstelle eines nicht vorzeichengebundenen Werts. Daher fügt die Software -1 hinzu unrounded[7:1]
, anstatt 1 hinzuzufügen.
Führen Sie zur Vermeidung dieses Problems (in Versionen 6.0 oder 6.0 SP1) einen der folgenden Schritte durch:
- Wenden Sie sich an mySupport, um Patch 1.20 für die Quartus II Software Version 6.0 SP1 anzufordern.
- Setzen Sie Klammer um eine der Variablen und erzwingen Sie den gesamten Ausdruck, mit der Verilog-2001-Funktion als unsigniert zu bewerten:
rounded <= (unrounded[7:1]) unrounded[0]
- Paden Sie die führenden Nullen wie folgt manuell ein (d. h. die führenden Bits sollten explizit 0 sein):
rounded <= unrounded[7:1] {{6{1'b 0}}, unrounded[0]};