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.