Oprogramowanie Quartus® II w wersji 6.0 i 6.0 SP1 nieprawidłowo przetwarza bit, wybierając z podpisanych zmiennych ze względu na znany problem z oprogramowaniem. Kod veriloga obejmujący bity wybrane z podpisanych zmiennych powinien zwracać niewyrównane wartości zgodnie z określeniem w Verilog LRM (wersja C std 1364-2001, sek. 4.5.1).
Ten problem nie istnieje w wersji 5.1 lub wcześniejszej. Problem został naprawiony począwszy od oprogramowania Quartus® II w wersji 6.1.
Jako przykład tego problemu oprogramowanie Quartus® II w wersji 6.0 nieprawidłowo przetwarza następujący przykład kodu:
reg [7:0] unrounded; reg [6:0] rounded; always @ (posedge clk) begin rounded <= unrounded[7:1] unrounded[0];
Oprogramowanie powinno wyzerować sygnał bez opłat[0], aby upewnić się, że wartość jednego bitu zostanie dodana do fragmentu bitu unrounded[7:1]
.
Oprogramowanie Quartus® II wersji 6.0 i 6.0 SP1 sign-extend sygnału unrounded[0]
zamiast zero-extending sygnału. W przykładzie, jeśli unrounded[0]
sygnał jest wartością 1, oprogramowanie interpretuje 1 jako znak numeru i w związku z tym konwertuje go do 7-bitowej reprezentacji podpisanej -1 zamiast wartości niepodpisanej. Dlatego oprogramowanie dodaje -1 do unrounded[7:1]
, zamiast dodawać 1.
Aby uniknąć tego problemu (w wersjach 6.0 lub 6.0 SP1), wykonaj jedną z następujących czynności:
- Skontaktuj się z mySupport , aby poprosić o poprawkę 1.20 dla oprogramowania Quartus II w wersji 6.0 SP1.
- Obsługuj jedną ze zmiennych i wymusij całość wyrażenia na ocenę jako niepodpisaną przy użyciu funkcji Verilog-2001:
rounded <= (unrounded[7:1]) unrounded[0]
- Ręcznie podkładaj wiodące zer w następujący sposób (tj. wyraźnie wykaż, że wiodące bity powinny wynosić 0):
rounded <= unrounded[7:1] {{6{1'b 0}}, unrounded[0]};