Les logiciels Quartus® II version 6.0 et 6.0 SP1 traitent incorrectement les sélections de bits à partir de variables signées en raison d’un problème logiciel connu. Le code Verilog comportant des sélections de bits à partir de variables signés doit renvoyer des valeurs non signées comme spécifié dans le LRM Verilog (Std 1364-2001 Version C, Sec 4.5.1).
Ce problème n’existe pas dans les versions 5.1 ou antérieures. Le problème est résolu à partir du logiciel Quartus II version 6.1.
À titre d’exemple de ce problème, la version 6.0 du logiciel Quartus II traite incorrectement l’exemple de code suivant :
reg [7:0] unrounded; reg [6:0] rounded; always @ (posedge clk) begin rounded <= unrounded[7:1] unrounded[0];
Le logiciel doit étendre à zéro le signal sans déverminer[0] pour s’assurer que la valeur d’un bit est ajoutée à la tranche de bits unrounded[7:1]
de .
Les versions 6.0 et 6.0 SP1 du logiciel Quartus II étendent le signal unrounded[0]
au lieu de l’étendre à zéro. Dans l’exemple, si le unrounded[0]
signal est une valeur 1, le logiciel interprète le 1 comme le signe du numéro et le convertit donc en une représentation 7 bits signée de -1 au lieu d’une valeur non signée. Par conséquent, le logiciel ajoute -1 à unrounded[7:1]
, au lieu d’ajouter 1.
Pour éviter ce problème (dans les versions 6.0 ou 6.0 SP1), procédez comme suit :
- Contactez mySupport pour demander le correctif 1.20 pour le logiciel Quartus II version 6.0 SP1.
- Placez les parenthèses autour d’une des variables et forcez toute l’expression à évaluer comme non signée à l’aide de la fonction Verilog-2001 :
rounded <= (unrounded[7:1]) unrounded[0]
- Pad manuellement les zéros de pointe comme suit (c.-à-d. indiquer explicitement que les bits de pointe doivent être 0) :
rounded <= unrounded[7:1] {{6{1'b 0}}, unrounded[0]};