在HPS FPGA Avalon存储器映射接口中写入第3个案例时出错

时间:2017-04-13 09:59:04

标签: arm vhdl fpga intel-fpga soc

我需要通过avalon内存映射接口向HPS获取count_x 32位数据。第一和第二个案件工作得很好。我得到了HPS的数据。但在第3个案例中WHEN '2' => avs_s0_readdata <= count_x(31 downto 0);显示错误,因为''2'未声明,这是什么意思? Vhdl在Altera quartus 16.1中完成,HPS系统在Qsys中完成。

architecture behavior of encorder is
signal count : STD_LOGIC_VECTOR(31 DOWNTO 0);
signal count_x : STD_LOGIC_VECTOR(31 DOWNTO 0);
signal count_y : STD_LOGIC_VECTOR(31 DOWNTO 0):= x"00000000";


begin   

    PROCESS(avs_s0_read)
    BEGIN
    IF avs_s0_read = '1' THEN
    CASE(avs_s0_address) IS


WHEN '2' => avs_s0_readdata <= count_x(31 downto 0);

WHEN others => avs_s0_readdata <= x"00000000";
END CASE;
ELSE
avs_s0_readdata <= x"00000000";

END IF;
END PROCESS;`

1 个答案:

答案 0 :(得分:1)

avs_s0_address的类型为STD_LOGIC。这种类型不包括'2'作为可能的值,这就是为什么它说它没有被声明。 STD_LOGIC通常用于仅描述一位的两个逻辑值,其中“0”和“1”您可以找到所有选项,例如here

由于我不使用Avalon(我使用Xilinx FPGA),我不确切知道它是如何工作的,但你的地址总线似乎有点长。此输入的类型应该是std_logic_vector,因此您有多个地址总线位。然后,您可以添加整数类型的信号:

signal avs_s0_address_int : integer;

在架构体中,您可以添加如下行:

avs_s0_address_int <= to_integer(unsigned(avs_s0_address));

要在整数类型中使用地址值,这在case语句中更容易比较。