首页 文章

在VHDL中添加并分配给信号

提问于
浏览
0

我正在为一项任务开发一个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 的先前值然后存储在_2585702中时,即通过执行以下操作:

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

当我在模型sim中查看 AveOut 时,值始终为XXXX . 我已经看了一些VHDL示例,它看起来像我相信我应该能够执行上述操作 . 有人可以告诉我这里我缺少的是什么吗?

谢谢

安德鲁

1 回答

  • 1

    ave_buf 可能在开头未定义 . 尝试初始化它 . 如果这样可行,您还应该对其执行重置 . 此外,您应该在时钟的上升沿采取行动 . 并且 ADC_In 在灵敏度列表中是不必要的 .

相关问题