用VHDL实现连续平均
我有一个关于VHDL编程的问题。我想计算连续平均值。我的示例代码是:用VHDL实现连续平均,vhdl,hdl,moving-average,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
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;
过程(时钟、复位)
开始
如果(重置='1'),则
状态
如果req='1',则
状态=out-1;
如果结束;
当out-1=>
如果完成class='1',则
out val保持32个值的运行总数。您可以通过具有总计数的信号来保持一个运行总数。在每个时钟周期,您需要加上最新的值,减去最旧的值。这意味着您需要创建一个大的移位寄存器或FIFO来跟踪之前的32个值,以便按顺序删除它们
然后要得到平均值,只需右移除以32。保持32个值的总和。您可以通过具有总计数的信号来保持一个运行总数。在每个时钟周期,您需要加上最新的值,减去最旧的值。这意味着您需要创建一个大的移位寄存器或FIFO来跟踪之前的32个值,以便按顺序删除它们
然后,为了得到平均值,只需右移除以32。创建系数为1/32[1,1,…1]的32抽头FIR滤波器。创建系数为1/32[1,1,…1]的32抽头FIR滤波器。您应该使用下划线而不是破折号。看起来你在用状态机做数学题。“当出局1”是令人困惑的。实际上,我在我的原始代码中使用了下划线。我不知道我为什么在这里写“-1”。很抱歉造成混淆。您应该使用下划线而不是破折号。看起来你在用状态机做数学题。“当出局1”是令人困惑的。实际上,我在我的原始代码中使用了下划线。我不知道我为什么在这里写“-1”。很抱歉造成混淆。我是否必须为此创建单独的流程?我建议这样做。将状态机逻辑与运行平均值分开。@user3008991什么答案?我是否必须创建一个单独的进程来执行此操作?我建议这样做。将状态机逻辑与运行平均值分开。@user3008991什么答案?是的,我做了。那又怎样?是的。所以