Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Xilinx Platform Studio中映射端口并在C中读取_C_Vhdl_Xps_Fpga_Xilinx - Fatal编程技术网

在Xilinx Platform Studio中映射端口并在C中读取

在Xilinx Platform Studio中映射端口并在C中读取,c,vhdl,xps,fpga,xilinx,C,Vhdl,Xps,Fpga,Xilinx,我在Xilinx平台工作室工作,我主要想做的是让一个VHDL模块输出一些值,然后我希望能够从另一个用C编写的程序中读取这些值 我想我要做的是将VHDL模块中的一个特定端口映射到内存中的一个点,然后在我的C程序中从内存中的那个点读取 有人能为我指出正确的方向吗?仅供参考,这对于电气工程堆栈交换也是一个好问题 我对这个话题的记忆有点模糊,如果没有更多关于你设计的细节,很难提出建议,因此这个解释将是非常高的层次 我将把你的新VHDL模块作为外设来实现 您可能已经知道这一点,但实现这一点的两大主题/技术

我在Xilinx平台工作室工作,我主要想做的是让一个VHDL模块输出一些值,然后我希望能够从另一个用C编写的程序中读取这些值

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


有人能为我指出正确的方向吗?

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

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

我将把你的新VHDL模块作为外设来实现

您可能已经知道这一点,但实现这一点的两大主题/技术是内存映射IO和端口映射IO。端口映射IO需要引入一些新指令,并从CPU发出一条芯片选择线,以指示读/写操作的方向。地址空间可以由内存和外围设备共享。(CPU是VHDL设计的一部分吗?)


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

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

如果您需要更高的速度,可以使用FSL链接

其他想法和方法:

块ram接口。


写一个定制的plb外设。查找“创建和导入外围设备向导”。

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

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

  • 首先从基本系统生成器开始创建基于处理器的系统。为您的系统选择必要的处理器、外围设备和其他组件

  • 调用创建导入向导来创建自定义IPCore。此工具将引导您完成自定义core的功能选择过程。选择2-4个可由处理器访问的软件可访问寄存器功能(C编程)。最后,向导将生成ipcore的一组文件,包括HDL源。模板源可在*xps\u prj/pcores/yourcore\u v1\u 00\u 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*)并按您希望的顺序添加自定义核心源

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

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

  • 使用PlatGen生成系统的网表和比特流

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

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


  • Ref:

    这段VHDL代码是否要安装到FPGA上?C程序在哪里执行?在同一平台上?或者这些都在模拟器中?这些都要放到FPGA上。C代码和VHDL。我正在使用Virtext II Pro@JonI,但我不知道如何让我的VHDL代码写入该内存地址。@Zacatack,你是什么意思?让CPU读写该内存地址?您的VHDL设备或“模块”,正如您所说的,它只会读写总线(这里假设内存映射IO)。恐怕我做不到比这更好的了,除非你用更多的信息编辑你的问题,说明你已经在做什么。电气工程堆栈交换上也有一些VHDL专家,如果这是一个问题,特别是试图找出如何在VHDL中执行某些操作: