使用VHDL进行连续平均

时间:2013-11-19 13:57:17

标签: vhdl hdl moving-average

我有一个与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个值,直到时钟运行。请让我知道我该怎么做。您也可以修改上面的代码。

非常感谢,

2 个答案:

答案 0 :(得分:1)

保持32个值的总计。您可以通过具有总计数的信号来保持运行总计。在每个时钟周期,您需要添加最新值并减去最旧的值。这意味着您需要创建一个大型移位寄存器或FIFO来跟踪之前的32个值,以便您可以按顺序删除它们。

然后得到平均值只需要一个右移除以32。

答案 1 :(得分:0)

创建32抽头FIR滤波器,其系数为1/32 [1,1,..... 1]