在VHDL中添加和分配信号

在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;

我正在为作业开发一个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;
当我在模型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)));