Eficiencia del filtro FIR en lenguaje verilog

0

Implementando un coeficiente de unidad de 4 toques FIR, ¿es este código eficiente en potencia y área?

always@(posedge Clk)
begin
  //unit delays using flip flops
  xn0<=Xin; //x[n]
  xn1<=xn0; //x[n-1]
  xn2<=xn1; //x[n-2]
  xn3<=xn2; //x[n-3]
  add0<=xn0+xn1;
  add1<=xn2+xn3;
  add_all<=add01+add23
  Yout<=add_all;
end//aways
    
pregunta Adigh

2 respuestas

0

Hazlo en el siguiente

   assign add01   = xn0+xn1;
   assign add23   = xn2+xn3;
   assign add_all = add01+add23;
   assign Yout    = add_all;

   always @ (posedge Clk or negedge reset_n)
   begin
     if(~reset_n)
     begin
       xn0  <= 'd0  
       xn1  <= 'd0
      xn2  <= 'd0
   xn3  <= 'd0
   Yout <= 'd0
 end
 else
 begin
 //unit delays using flip flops
   xn0    <=Xin; //x[n]
   xn1    <=xn0; //x[n-1]
   xn2    <=xn1; //x[n-2]
   xn3    <=xn2; //x[n-3]
 end
end //always
    
respondido por el Prakash Darji
0

Está creando pasos de canalización adicionales para los intermedios. Esto introduce un retraso adicional, como lo sugirió The Photon en los comentarios, y la salida es \ $ x [n-7] + x [n-6] + x [n-5] + x [n-4] \ $.

Los pasos adicionales de la canalización pueden darle un mayor \ $ f_ {max} \ $, pero probablemente no sea lo que quiere.

La variante de retardo mínimo \ $ x [n-3] + x [n-2] + x [n-1] + x [n] \ $ es más compleja, ya que terminaría en una etapa combinatoria, y agregar más salidas combinatorias reduciría \ $ f_ {max} \ $. Esa etapa tendría

assign Yout = Xin + xn1 + xn2 + xn3;

para calcular la salida, y

always @ (posedge Clk)
begin
    xn1 <= Xin;
    xn2 <= xn1;
    xn3 <= xn2;
end

Verá que aquí no hay una etapa de registro para xn0 , porque eso es parte del componente que alimenta Xin , que se espera que también sea sincrónico con Clk .

Un compromiso de retraso de un reloj sería

assign Yout = xn0 + xn1 + xn2 + xn3;

always @ (posedge Clk)
begin
    xn0 <= Xin;
    xn1 <= xn0;
    xn2 <= xn1;
    xn3 <= xn2;
end

Esto reduce la complejidad del enrutamiento a costa de un retraso de ciclo. Si esa es una buena compensación es una decisión de ingeniería.

    
respondido por el Simon Richter

Lea otras preguntas en las etiquetas