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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在HPS FPGA Avalon存储器映射接口中写入第3个案例时出错相关的知识,希望对你有一定的参考价值。

我需要通过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;`
答案

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语句中更容易比较。

以上是关于在HPS FPGA Avalon存储器映射接口中写入第3个案例时出错的主要内容,如果未能解决你的问题,请参考以下文章

实现FPGA Verilog HDL与NIOS II的通信数据交换——利用AVALON总线

SoC FPGA开发板的FPGA配置数据下载和固化

为Quartus工程生成rbf文件的方法

DE1-GHRD

avalon单个列表调接口例子

avalon列表循环调接口以及更多例子