在VHDL中添加和分配信号
我正在为作业开发一个10点移动平均过滤器。我正在采取一些小步骤,以确保代码的每个阶段都正常工作。我的第一步是获取一个标准逻辑向量(5位)的输入,并将其转换为整数类型的信号进行处理,然后再转换回标准逻辑向量进行输出。我的第一段代码是:在VHDL中添加和分配信号,vhdl,fpga,Vhdl,Fpga,我正在为作业开发一个10点移动平均过滤器。我正在采取一些小步骤,以确保代码的每个阶段都正常工作。我的第一步是获取一个标准逻辑向量(5位)的输入,并将其转换为整数类型的信号进行处理,然后再转换回标准逻辑向量进行输出。我的第一段代码是: library IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.NUMERIC_STD.ALL; entity AveFilter is port( CLK : in STD_LOGIC;
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;
当我在模型sim中查看AveOut
时,值始终为XXXX。我已经看过一些VHDL示例,它看起来像并且我相信我应该能够完成上述操作。有人能给我一个线索,我在这里遗漏了什么吗
谢谢
Andrew
ave_buf
一开始可能没有定义。尝试初始化它。如果这样做有效,您还应该对其执行重置。同时,你们应该对时钟的上升沿采取行动。灵敏度列表中不需要ADC_In
。您好,非常感谢您的回答。我在进程中添加了一个上升沿检查,现在我得到了我所期望的结果。您描述的是一个没有正确语法的时钟进程。谷歌的VHDL时钟进程。最好是同步复位。然后:signal ave_buf:Circ_buf:=(其他=>(其他=>“0”)代码>以初始化。为什么不把ave_buf
做成一组未签名的
。
adc_sum <= adc_sum + to_integer(unsigned(ave_buf(0)));