在VHDL中添加并分配给信号

时间:2017-07-29 15:41:07

标签: vhdl fpga

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

main

上面的代码只是取输入值并分配给输出;我用modelsim对它进行了测试,它按预期工作。我还可以将各种硬编码值分配给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; ,并且它们也按照预期在输出上显示。

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

adc_sum

当我在模型sim中查看adc_sum <= adc_sum + to_integer(unsigned(ave_buf(0))); 时,值始终为XXXX。我已经看了一些VHDL示例,它看起来像我相信我应该能够执行上述操作。有人可以告诉我一下我在这里缺少什么吗?

由于

安德鲁

1 个答案:

答案 0 :(得分:1)

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