Floating Point de la Division System Verilog
Je voulais utiliser des nombres à virgule flottante dans System Verilog à l'aide de la real
type de données. J'ai essayé le code suivant, mais il ne semble pas fonctionner. Je suis 2.000000
où j'attends 2.500000
.
Module:
module real_check(input [31:0]a, [31:0]b,
output real c);
assign c = a/b;
endmodule
Banc d'essai:
module tb_real_check();
real c;
reg[31:0] a, b;
real_check dut(a, b, c);
initial
begin
a <= 5;
b <= 2;
#50;
$display("Answer : %f ", c);
end
endmodule
Vous devez vous connecter pour publier un commentaire.
Vous faites division entière. Lors du calcul de
int/int
(reg[31:0]/reg[31:0]
), le résultat est un entier. Donc, lorsque vous calculez5/2
, vous obtenez2.5
tronquée à2
qui est ensuite converti en virgule flottante (real
) numéro de2.000...
. Si vous voulez floating point de la division (qui n'est pas jeter la virgule), vous devez avoir votre opérandes (dividende & diviseur) être en virgule flottante.Donc, pour corriger votre code, votre module doit prendre deux nombres à virgule flottante en entrée:
Et dans votre cas de test, vous devez déclarer
a
etb
comme des nombres à virgule flottante: