我在Xilinx Platform Studio工作,我本来想做的是,有一个VHDL模块输出一些值,然后我希望能够从另一个用C编写的程序中读取该值。
我想要做的是将VHDL模块中的特定端口映射到内存中的某个位置,然后从我的C程序中的内存中读取该位置。
有人能指出我如何做到这一点的正确方向吗?
答案 0 :(得分:2)
这是微型电池还是电源处理器?最简单的方法可能是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
其他想法和方法:
阻止ram接口。 http://www.xilinx.com/support/documentation/ip_documentation/plb_bram_if_cntlr.pdf
编写自定义plb外设。查找“创建和导入外围设备向导”。
答案 1 :(得分:1)
我从您的要求中理解的是,您希望创建自定义IP内核(VHDL),然后将其作为XPS MicroBlaze / PowerPC系统的一部分添加,其中您的内核应该可由处理器访问(C编程)。
在这里,您必须使用Xilinx XPS EDK工具执行以下主要步骤:
首先从 Base System Builder 开始,以创建基于处理器的系统。选择系统所需的处理器,外围设备和其他组件。
调用创建导入向导以创建自定义IPCore。此工具将指导您完成自定义核心的功能选择过程。选择2-4 软件可访问寄存器功能,可由处理器访问(C编程)。最后,向导将生成一组ipcore的文件,包括HDL源。模板源可以在* xps_prj / pcores / yourcore_v1_00_a *中找到。
这是一大步。生成的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 *)并按照要合成它的顺序添加自定义核心源。
在模板文件中进行所有必要的更改后,调用创建和导入向导工具并将所有Core更改导入XPS环境。
您的自定义ipcore现在会在 IP目录中看到。将其添加为系统的一部分,并为系统中的自定义IPCore进行必要的端口连接,总线接口和地址生成。
使用 PlatGen 生成系统的网表和比特流。
创建C应用程序项目。使用 LibGen 生成库并编译C应用程序以生成 ELF 文件。
使用 Data2Mem 工具将硬件比特流和软件ELF合并到 download.bit 文件。使用影响工具将比特流下载到平台。
答案 2 :(得分:0)
仅供参考,这也可能是电气工程堆栈交换的一个很好的问题。
我的记忆在这个主题上有点模糊,如果没有关于你的设计的更多细节,很难提出建议,因此这个解释将是非常高的。
我会将您的新VHDL模块实现为外围设备。
您可能已经知道这一点,但执行此操作的两大主题/技术是内存映射IO和端口映射IO。端口映射IO需要引入一些新指令,并且来自CPU的芯片选择线指向此读/写操作所在的位置。地址空间可以由存储器和外围设备共享。 (CPU是VHDL设计的一部分吗?)
可能更简单的方法是通过内存映射IO。这需要硬件保留的地址空间,您的新设备将位于地址和地址上。数据总线监听其地址范围。您的新模块需要遵守所有时序和协议要求才能在总线上进行通信。在C代码中,将变量声明为volatile
,并将其指向设备用于读写的地址。