我有一个与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)
保持32个值的总计。您可以通过具有总计数的信号来保持运行总计。在每个时钟周期,您需要添加最新值并减去最旧的值。这意味着您需要创建一个大型移位寄存器或FIFO来跟踪之前的32个值,以便您可以按顺序删除它们。
然后得到平均值只需要一个右移除以32。
答案 1 :(得分:0)
创建32抽头FIR滤波器,其系数为1/32 [1,1,..... 1]