Estoy tratando de escribir un módulo de media móvil VHDL (ponderada uniformemente) que usa FSMD (ata). Por lo que entiendo, los estados necesarios serían algo así como buscar, dividir, producir. A continuación se muestra el proceso que escribí, pero siento que mi lógica está un poco apagada. Tenga en cuenta que los datos que estoy promediando son solo una matriz constante de números de 8 bits, por lo que pensé que debería estar bien usar un diseño no causal.
Los datos tienen 64 entradas, y en este momento la ventana para el promedio es 4.
process (clk,rst) is
variable temp : integer range 0 to 1020;
begin
if rst = '1' then
count <= 0;
n_state <= s0;
elsif (clk'event and clk = '1') then
c_state <= n_state;
case c_state is
when s0 =>
for i in 0 to (len) loop
temp := temp + pattern(count+i);
end loop;
n_state <= s1;
when s1 =>
temp := temp/4;
n_state <= s2;
when s2 =>
data <= std_logic_vector(to_unsigned(pattern(count),8));
data_avg <= std_logic_vector(to_unsigned(temp,8));
n_state <= s0;
count <= count+1;
end case;
end if;
end process;
¿Qué tan mal se ve esto?