2

我在 Xilinx Platform Studio 工作,我真正想做的是让 VHDL 模块输出一些值,然后我希望能够从另一个用 C 编写的程序中读取该值。

我想我想要做的是将我的 VHDL 模块中的特定端口映射到内存中的某个位置,然后在我的 C 程序中从内存中的那个位置读取。

有人可以指出我将如何做到这一点的正确方向吗?

4

3 回答 3

2

这是 microblaze 还是 power pc 处理器?最简单的方法可能是一个 gpio 外围设备。

http://www.xilinx.com/support/documentation/ip_documentation/plb_gpio.pdf

如果您需要更快的速度,您可以使用 FSL Link。

http://www.xilinx.com/support/documentation/ip_documentation/plb2fsl_bridge.pdf

其他想法和方法:

块内存接口。 http://www.xilinx.com/support/documentation/ip_documentation/plb_bram_if_cntlr.pdf

编写自定义 plb 外设。查找“创建和导入外围设备向导”。

于 2011-11-19T04:47:37.103 回答
1

我从您的要求中了解到,您想要创建一个自定义 ip 内核(VHDL),然后将其添加为 XPS MicroBlaze/PowerPC 系统的一部分,处理器应该可以访问您的内核(C 编程)。

在这里,您必须使用 Xilinx XPS EDK 工具执行以下主要步骤:

  1. 首先从Base System Builder开始创建基于处理器的系统。为您的系统选择必要的处理器、外围设备和其他组件。

  2. 调用创建导入向导来创建自定义 IPCore。此工具将引导您完成自定义核心的功能选择过程。选择处理器可访问的2-4软件可访问寄存器功能(C 编程)。最后,向导将生成一组 ipcore 文件,包括 HDL 源代码。可以在 *xps_prj/pcores/yourcore_v1_00_a* 中找到模板源。

  3. 这是一大步。生成的 HDL 模板(*yourcore_v1_00_a/hdl/vhdl*)主要包含一个总线接口单元(PLB/FSL)和一个示例逻辑。在这里,您必须编辑 HDL 模板源以删除示例逻辑并实例化您的自定义核心逻辑。您可以将核心实例的 IO 端口分为两组。第一个包含处理器可访问的 IO 端口(通过 C 编程)应连接到HDL 模板中的软件可访问寄存器。您要从 FPGA 中引出的第二组核心 IO 端口,应进行必要的端口映射到顶部模块的外部端口连接。

    编辑 PAO 文件 (*yourcore_v1_00_a/data/yourcore_v1_00_a.pao*) 并按您想要合成的顺序添加您的自定义核心源。

    在模板文件中进行所有必要的更改后,调用创建和导入向导工具并将所有核心更改导入 XPS 环境。

  4. 您的自定义 ipcore 现在将显示在IP 目录中。将其添加为系统的一部分,并为系统中的自定义 IPCore 进行必要的端口连接、总线接口和地址生成。

  5. 使用PlatGen生成系统的网表和比特流。

  6. 创建一个 C 应用程序项目。使用LibGen生成库并编译 C 应用程序以生成 ELF文件。

  7. 使用Data2Mem工具合并硬件比特流和软件 ELF 以下载.bit文件。使用Impact工具将比特流下载到平台。

参考:http ://ecasp.ece.iit.edu/mbtutorial.pdf

于 2011-11-25T10:16:20.393 回答
0

仅供参考,这对于电气工程堆栈交换来说可能也是一个好问题。

我对这个话题的记忆有点模糊,如果没有更多关于你的设计的细节,很难提出建议,因此这个解释将是非常高级的。

我会将您的新 VHDL 模块实现为外围设备。

您可能已经知道这一点,但执行此操作的两个广泛主题/技术是内存映射 IO 和端口映射 IO。端口映射 IO 需要引入一些新指令,并需要一条来自 CPU 的芯片选择线来指示该读/写操作将去往何处。地址空间可以由内存和外设共享。(CPU 是您的 VHDL 设计的一部分吗?)

可能更简单的方法是通过内存映射 IO。这需要硬件保留地址空间,您的新设备将位于地址和数据总线上,监听其地址范围。您的新模块需要遵守所有时序和协议要求才能在总线上通话。在您的 C 代码中,将变量声明为volatile并将其指向您的设备用于读取和写入的地址。

于 2011-11-19T03:55:52.067 回答