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.