2013-11-19 7 views
1

У меня есть вопрос, связанный с программированием VHDL. Я хочу рассчитать непрерывное среднее. Мой примерный код:непрерывное усреднение с использованием VHDL

process (clk, reset) 
begin 
    if (reset = '1') then 
     state<=idle; 
     out-val=0; 
    elsif(rising_edge(clk)) then 
     case state is 

      when idle => 
       if req='1' then 
        state= out-1; 
       end if; 

      when out-1 => 
       if done='1' then 
        out-val<=data-in (11 downto 0); 
        state <= done-st; 
       endif; 

      when done-st => 
       ack <='1'; 
       state <= idle; 

      when others => 
       state <= idle; 
     end case; 
    end if; 
end process; 

На каждом положительном фронте часов изменяется значение «out-val». Я хочу постоянно принимать среднее значение «out-val». Я хочу постоянно принимать 32 значения. Есть ли способ, когда я могу принимать в среднем 32 значения непрерывно до тех пор, пока часы не будут работать. Пожалуйста, дайте мне знать, как я могу это сделать. Вы также можете изменить приведенный выше код.

Большое спасибо,

+0

Вместо тире следует использовать символы подчеркивания. Похоже, вы делаете математику в своей государственной машине. «когда аут-1» запутан. – Russell

+0

О да. На самом деле я использовал подчеркивание в своем исходном коде. Я не знаю, почему я написал «-1» здесь. Извините за путаницу. – user3008991

ответ

1

пополняемый общей сложности 32 значений. Вы можете сохранить общее количество, получив сигнал, который имеет общий счет. В каждом такте вы должны добавить новое значение и вычесть самое старое значение. Это означает, что вам нужно создать большой регистр сдвига или FIFO, чтобы отслеживать предыдущие 32 значения, чтобы вы могли их удалить по порядку.

Тогда, чтобы получить среднее значение просто сделать сдвиг-вправо, чтобы разделить на 32.

+0

Должен ли я создать отдельный процесс для этого? – user3008991

+0

Я бы порекомендовал его. Сохраняйте логику своего автомата отдельно от среднего. – Russell

+0

можете прокомментировать мой ответ ниже. спасибо – user3008991

0

Создать 32 КИХ фильтр которого являются 1/32 случае коэффициент [1, 1, ..... 1]

+0

Да, да. Так? – ytukel