xilinx fpga(virtex-5)的io接口问题

xilinx fpga(virtex-5)的io接口问题,第1张

是的,首先注意PN是有配对关系的,同一对的P和N接反了没关系()内部还可以调整,但不同对的p 和n接到一起就不行了,pcie不仅有专门的引脚对应,还必须要fpga内部有专门的核支持,带PCIE核的V5系列的FPGA,在型号中都带个T字母。外围FPGA电路是否一样取决于你的应用,不能一概而论,

1、创建硬件工程

启动XPS,创建Lab3工程。因为PS系统和FPGA连接是采用AXI接口,因而选择内部互联类型(Interconnect Type) 为AXI。

选择设计平台为Zynq ZC702

外设配置界面,系统会默认有GPIO_SW 和 LEDs_4bits 这两个外设,我们不需要,remove之

2、添加AXI GPIO外设

工程建立后,在IP Catalog中,找到General Purpose IO,找到 AXI GPIO,双击添加到系统中。

修改元件实例化名称为axi_LDs,这个名称就是将要实例化连接到PS的元件。将长度改为8,其他默认。

点开Bus Interfaces标签,可以看到系统汇总现在有PS(这里是processing_systems7_0) 、添加的外设axi_LDs 和AXI内部互联总线axi_interconnet_1。可以看到对于 axi_interconnet_1来说,PS是AXI主设备,外设是AXI从设备。

在Port标签,将IO_IF中的GPIO_IO_O(output)设置为External Ports,将Port名称改为LD。LD就是顶层对外的引脚名称

3、设定引脚约束

在project标签中,找到system.ucf约束文件

将其内容改为

4、点击Generate BitStream,生成bitstream

如果没有错题,控制台会提示信息如下,表明成功生成了FPGA的配置bitstream文件

5、将硬件配置导入到SDK,启动SDK。这里需要将bitstream和BMM文件同时包括到SDK中。

在Zynq-7000上编程PL大致有3种方法:

1. 用FSBL,将bitstream集成到boot.bin中

2. 用U-BOOT命令

3. 在Linux下用xdevcfg驱动。

步骤:

1. 去掉bitstream的文件头

用FSBL烧写PL Images没有什么好说的,用Xilinx SDK的Create Boot Image工具即可完成,不再赘述。用后两种方法需要把bitstream文件的文件头用bootgen工具去掉。

一个典型的bif文件如下所示:

the_ROM_image:

{

[bootloader]<fsbl_name>.elf

<pl_bitstream_name>.bit

<u-boot_name>.elf

}

bif文件可以用文本编辑器写,也可以用Xilinx SDK的Create Boot Image工具生成。然后在命令行下用以下命令即可去掉bitstream文件的文件头。

bootgen -image <bootimage>.bif -split bin -o i BOOT.BIN

"-split”参数可以生成以下文件:

<pl_bitstream_name>.bit.bin

2. 在U-BOOT下烧写PL Image

命令”fpga load”和”fpga loadb”都可以。区别是前一个命令接受去掉了文件头的bitstream文件,后一个命令接受含有文件头的bitstream文件。

在OSL 2014.2上,缺省编译就可以完整支持写入PL Image的功能。但是在Petalinux 2013.10下,尽管可以在U-BOOT下看到命令”fpga”,还需要在文件

<PROJ>/subsystems/linux/configs/u-boot/platform-top.h 中增加以下内容后重新编译才可以支持具体的功能。

/* Enable the PL to be downloaded */

#define CONFIG_FPGA

#define CONFIG_FPGA_XILINX

#define CONFIG_FPGA_ZYNQPL

#define CONFIG_CMD_FPGA

#define CONFIG_FPGA_LOADFS

在OSL 2014.2 U-BOOT中,具体的功能是在zynqpl.c的zynq_load()中实现的。

3. 在Linux下烧写PL Image

OSL Linux 2014.2.01中已经含有xdevcfg驱动了(之前就有,不过本文是在这个版本上验证的),直接用以下命令就可以完成PL Image写入。

cat <path_to_storage_media>/<pl_bitstream_name>.bit.bin >/dev/xdevcfg

Linux驱动的源代码在xilinx_devcfg.c中。因为驱动的编号是通过alloc_chrdev_region()动态分配的,所以不需要手工用mknod命令手动建立设备节点。

在Linux驱动中,每次往DevCfg中写入4096字节,直到全部写完。

4. 在用户程序中烧写PL Image

目前没有现成的源码来完成这个功能,不过可以用mmap()把DevCfg的寄存器映射到用户程序的虚地址中,然后参考一些现成的软件代码来完成这个功能:

* FSBL中的pcap.c

* U-BOOT中的zynqpl.c

* Linux中的xilinx_devcfg.c

* Xilinx SDK中的例子。例子位于以下位置,随SDK的版本会有变化。

C:\Xilinx\SDK\2014.1\data\embeddedsw\XilinxProcessorIPLib\drivers\devcfg_v3_0\examples\index.html

小结:

DevCfg外设内部有自己的DMA,只需要简单的配置PL Image的基地址和长度到DevCfg寄存器,就可以完成Zynq-7000 PL Image的加载。Xilinx已经提供了灵活的解决方案,如果开发者要把这个功能集成在自己的应用程序中,也有很多的代码可以参考,并不是很困难的任务。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/7976894.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存