Absolutwert in Verilog-Daten finden, die von System C/Xilinx X bestimmt wurden

Ich habe versucht, den absoluten Wert einer Ganzzahl zu finden, die dem Verilog-Kern zugeordnet ist, indem ich Xilinx C auf Microblaze verwendet habe. Was ich gesehen habe, ist, dass Verilog die negative Zahl als positive Zahl behandelt.

Ich habe alle Datentypen ausprobiert: signed int, int, Xuint32.

Mein C-Code ist:

signed int data,value;
data=-20;value=0;
putfsl(data,0);
getfsl(value,0);
signed int data1,value1;
data=20;value=0;
putfsl(data1,0);
getfsl(value1,0);

Nachdem ich die Werte der Variablen erhalten hatte, druckte ich sie auf Hyperterminal.

Auf meiner Verilog-Seite lautete der Code:

out <=(in<0)?-in:in;

Ich habe diesen Code auch ausprobiert, aber die Ergebnisse waren ähnlich

if(in<0)
   out=-in;
else 
   out=in;

Bitte helfen Sie mir!

Ich habe auch andere Datentypen ausprobiert und Parameter geändert, aber die Ergebnisse haben nicht funktioniert, da ich immer die gleiche Zahl bekomme, die ich eingegeben habe, dh

in<0

Aussage ist nicht wahr, ich habe es auch in<=0 versucht.

Antworten (1)

(Haftungsausschluss: Ich bin kein Verilogger - seine signierten arithmetischen Schwächen sind einer der Gründe, warum nicht :)

Vor Verilog-2001 war die gesamte Vektorarithmetik in Verilog vorzeichenlos.

In Verilog-2001 können Sie explizit vorzeichenbehaftete Arithmetik anfordern, daher müssen Sie meiner Meinung nach Folgendes umwandeln in:

if ($signed(in) < 0)
 out = -$signed(in);
else
 out = in;

Lesestoff, der von Interesse sein könnte:

Signierte Arithmetik in Verilog-2001 - Chancen und Gefahren