0

我需要count_x通过 avalon 内存映射接口向 HPS 获取 32 位数据。第一个和第二个案例工作正常。我将数据发送到 HPS。但在第三种情况下WHEN '2' => avs_s0_readdata <= count_x(31 downto 0);,它显示一个错误,因为''2'' is not declared,这是什么意思?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;`
4

1 回答 1

1

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

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

signal avs_s0_address_int : integer;

在架构主体中,您可以添加这样的行:

avs_s0_address_int <= to_integer(unsigned(avs_s0_address));

具有整数类型的地址值,这在case语句中更容易比较。

于 2017-04-14T13:16:00.120 回答