Estoy diseñando FFT de 8 puntos por radix 2 usando verilog. Estoy usando la unidad mariposa 2 radix con 8 bits de entrada y salida. Espero ser de 8 bits para poder usar esta estructura una y otra vez para más personal. Estoy aplicando DIT. Si considero que mis factores de Twiddle son de 8 bits almacenados en algún lugar, entonces el resultado se multiplica a uno de las entradas de mariposa es de 16 bits, y cuando se agrega / resta a otra salida de entrada, seguramente será de 16 bits / 17 bits. Pero espero que mi salida sea de 8 bits para que se pueda usar la misma mariposa con entrada de 8 bits. ¿Cómo puedo escalar esto sin pérdida de precisión?
module butter_fly(xr,xi,yr,yi,wr,wi,xxr,xxi,yyr,yyi);
input[7:0] xr,xi,yr,yi,wr,wi;
output[7:0] xxr,xxi,yyr,yyi;
wire[7:0] xxr,xxi,yyr,yyi;
wire [7:0] xr,xi,yr,yi,wr,wi; // wr and wi represents twiddle factor
wire[15:0] w1,w2,w3,w4;
assign w2 = yi*wi;
assign w3 = yr*wi;
assign w4 = wr*yi;
assign w1 = yr*wr;
assign xxr = xr + w1 - w2 ;
assign xxi = xi + w3 + w4;
assign yyr = xr - w1 + w2;
assign yyi = xi - w3 - w4;
endmodule
Estoy superando estos 8 bits en mi salida. ya que estas salidas se convertirán en entrada para mi siguiente etapa. la siguiente etapa también consiste en la raíz 2. Esta salida obtenida no puedo introducirla. Tiene que ser 8 bits. Entonces, ¿cómo puedo escalar esta salida de mariposa para que pueda convertirse en una entrada de tipo de 8 bits a la unidad de mariposa de la siguiente etapa? Espero que mi salida final sea correcta al fin.
hazme saber si no entiendes