Agregar a una variable de suma produce un error "no se puede sintetizar datos reales" en verilog

0

Primero, un descargo de responsabilidad de que esta es mi primera vez que uso verilog y realmente no sé nada. Mi código es el siguiente:

module trapverilog(
    input CLK,
    input SIGNAL,
     input x,
    output reg OUT
    );

reg[1:0] yreg;
real sum = 0;

always @(posedge CLK)
begin
    yreg = SIGNAL; //should shift automatically
    sum = ((yreg[0] + yreg[1])*x/2) + sum; //treats x as plain h, change if treated as h/2
    OUT = sum;
end

endmodule

Produce un error que indica que los tipos de datos real no se pueden sintetizar con referencia a la línea sum = ((yreg[0]... . ¿Qué significa esto y cómo puedo solucionarlo?

La intención aquí es crear un FPGA que pueda realizar el método de integración trapezoidal que es simplemente $$ A = \ frac {(ba) (y_1 + y_2)} {2} $$ En mi programa estoy tomando $ $ \ frac {ba} {2} $$ como entrada x y también estoy hablando en una señal de reloj CLK y una señal a integrar, SIGNAL .

Creo un registro de dos puntos, yreg , con y cuando CLK es alto, establezco yreg = SIGNAL con la intención de cambiar el valor anterior a la siguiente ranura, es decir, termino con y 1 cambiando a y 2 y el nuevo valor va a y 1 . Luego calculo el área siguiendo la fórmula dada anteriormente, la agrego a sum y configuro la salida, OUT igual a sum . El problema en este caso es que sum no se puede agregar.

Probablemente hay otros errores que no conozco, por lo que pido disculpas por esos de antemano. Cualquier ayuda sería apreciada.

    
pregunta heather

1 respuesta

3

Es un rally tan simple como dice el mensaje. La herramienta no puede asignar datos reales al hardware. No sé si su chip de destino tiene soporte de hardware real. Pero si lo hace, es probable que necesite crear una instancia de ese bloque.

    
respondido por el Brian Carlton

Lea otras preguntas en las etiquetas