Buscar valor absoluto en los datos de Verilog designados por el Sistema C / Xilinx X

2

He estado tratando de encontrar el valor Absoluto de un entero designado para Verilog Core utilizando Xilinx C ejecutándose en Microblaze, lo que he visto es que Verilog trata el número negativo como un número positivo.

He intentado todos los tipos de datos: signed int , int , Xuint32 .

Mi código c es:

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);

Después de obtener los valores de las variables, los imprimí en Hyperterminal.

En mi lado de Verilog, el código era:

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

También probé este código pero los resultados fueron similares

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

¡Por favor ayúdame!

También probé otros tipos de datos y modifiqué parámetros, pero los resultados no han funcionado, siempre obtengo el mismo número que ingresé, es decir,

in<0

la declaración no es verdadera, también lo intenté en < = 0.

    
pregunta aibk01

1 respuesta

2

(Descargo de responsabilidad: No soy un Verilogger: sus debilidades aritméticas firmadas son una de las razones por las que no :)

Antes de Verilog-2001, todos los vectores aritméticos en Verilog no estaban firmados.

En Verilog-2001 puedes solicitar explícitamente una aritmética firmada, así que creo que deberás lanzar tu in :

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

Materia de lectura que puede ser de interés:

Aritmética firmada en Verilog-2001 - Oportunidades y riesgos

    
respondido por el Martin Thompson

Lea otras preguntas en las etiquetas