¿Cómo escalar la salida de la unidad de mariposa radix 2 para etapas posteriores?

0

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

    
pregunta P.Rathee

1 respuesta

0

Obviamente, si multiplicas dos números de 8 bits y luego quieres que el resultado se ajuste en 8 bits perderás cierta precisión.

Debe tomar una decisión sobre cuánto error está dispuesto a acumular en cada etapa. Si no está dispuesto a cometer ningún error, deberá aumentar el número de bits en cada etapa.

Cuando se realiza una aritmética de punto fijo como esta, a menudo es útil interpretar los vectores como enteros escalados. Para números firmados puedes usar la siguiente escala ...

1000_0000 ... = -1.00 ...
0000_0000 ... = 0.00 ...
0111_1111 ... = 0,99 ...

La multiplicación de dos vectores con signo de N bits da como resultado un vector que tiene una longitud de 2 * N - 1 bit. Al usar enteros escalados, simplemente tomaría los N bits superiores del resultado para volver a su escala original.

    
respondido por el user4574

Lea otras preguntas en las etiquetas