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

问题描述 投票:0回答:1

我需要通过avalon内存映射接口将count_x 32位数据发送到HPS。第一和第二个案件工作得很好。我得到了HPS的数据。但在第三种情况下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;`
arm vhdl fpga intel-fpga soc
1个回答
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语句中更容易比较。

© www.soinside.com 2019 - 2024. All rights reserved.