在 VHDL 中添加和分配信号

Add and assign to a signal in VHDL

我正在为一项作业开发一个 10 点移动平均滤波器。我正在采取一些小步骤,以确保我的代码的每个阶段都能正常工作。我的第一步是采用标准逻辑向量(5 位)作为输入并将其转换为整数类型的信号以进行处理,然后再转换回标准逻辑向量以进行输出。我的第一段代码是:

library IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;

entity AveFilter is
    port(   CLK     : in STD_LOGIC;
        RST     : in STD_LOGIC;
        ADC_In  : in STD_LOGIC_VECTOR ( 4 downto 0);
        AveOut  : out STD_LOGIC_VECTOR ( 4 downto 0)
        );
end AveFilter;


architecture Behavioral of AveFilter is
        signal adc_sum : integer := 0;
        type Circ_Buf is array (0 to 9) of STD_LOGIC_VECTOR (4 downto 0);       
        signal ave_buf : Circ_Buf;

begin
    process (CLK, RST, ADC_In)

        variable idx : integer := 5;

    begin       

         ave_buf(0) <= ADC_In; 

         adc_sum <= to_integer(unsigned(ave_buf(0)));

         AveOut <= std_LOGIC_VECTOR(to_unsigned(adc_sum, AveOut'length)); 

    end process;        
end architecture;

上面的代码只是获取输入值并分配给输出;我已经用 modelsim 对此进行了测试,它按预期工作。我还可以将各种硬编码值分配给 adc_sum,它们也会按预期出现在输出中。

我遇到的问题是当我修改代码以便将当前 adc 输入添加到 adc_sum 的先前值然后存储在 adc_sum 中,即通过这样做:

adc_sum <= adc_sum + to_integer(unsigned(ave_buf(0)));

当我在模拟模型中查看 AveOut 时,值始终为 XXXX。我看过一些 VHDL 示例,看起来像而且我相信我应该能够执行上述操作。有人可以告诉我我在这里遗漏了什么吗?

谢谢

安德鲁

ave_buf 开头可能是未定义的。尝试初始化它。如果这有效,您还应该对其实施重置。此外,您应该在时钟的上升沿采取行动。 ADC_In 在敏感列表中是不必要的。