1、创建Zynq的Vivado工程
打开vivado 2018.3后,点击Create Project开始创建工程:
第一步为介绍说明,直接点击Next进入下一步:
设置工程名称和工程保存位置,名称只能是英文字母、下划线和数字,且以字母开头,保存的位置路径中不能含有中文及其他标点符号,设置完后点击Next:
保持默认设置,点击Next:
在Search的文本框中输入具体芯片型号(根据原理图及硬件画图人员确定,有时原理图标注的并不准确),选择使用的芯片,点击Next:
进入新工程概览,确认无误后点击Finish,完成新建工程:
2、创建Block Design
2.1 创建Block Design
点击工程管理(PROJECT MANAGER)栏下IP INTEGRATOR的Block Design,弹出的对话框中保持默认,点击OK,进入Block Design的设计:
在Diagram框中添加工程所需的IP核资源,进行IP和的配置以及端口引出等:
添加ZYNQ的IP核,点击Diagram框中间的“+”号,在弹出的菜单中的Search处输入zynq,双击搜索出来的ZYNQ Processing System,完成Zynq芯片的IP和添加,同时Diagram右侧出现Address Editor选页:
2.2 配置PS资源
双击Zynq的IP核,进入Zynq资源的设置,默认进入第一项Zynq资源总览,图示了Zynq的可用资源(绿色部分代表可配置,双击可进入相应界面):
选择Peripheral I/O Pins,进入外围I/O管脚配置(PS提供的外围接口):
2.2.1 外围接口配置
选择Bank 0和Bank 1的电压值,一般设计中Bank 0为LVCMOS 3.3V,Bank 1为LVCMOS 1.8V,Peripheral区域设置PS的外围,直接勾选,并核对接口与原理图的管脚连线是否相符(Peripheral右侧的数字0~53表示的是PS的I/O管脚编号,EMIO表示使用PL的I/O管脚):
一般PS的设置比较通用,勾选后需要与原理图核对,若有出入请找硬件画图同事核实。
1. Quad SPI Flash:一般需要勾选,为Zynq配置的QSPI芯片的数据接口,用于存放Zynq的启动文件,选择Single SS 4bit IO(需要根据具体的QSPI手册确定),所占用的PS管脚一般使用默认;
2. Ethernet有两个可选,根据具体的需求选择,一般板卡前面板网口选择Ethernet 0(并非绝对),在根据原理图确定管脚是PS的还是PL的决定选择Enet0还是EMIO,展开后MDIO也同样根据原理图确定管脚是PS的还是PL的决定选择MDIO还是EMIO;
3. USB有两项可选,设计中基本会选择USB0作为USB口(USB1会与SD0的管脚冲突),用作接入U盘或读卡器:
4. SD有两个可选,一般设计中SD0为SD卡槽,SD1为EMMC,若为板卡存在EMMC芯片则SD0和SD1都需要勾选,无论是否有EMMC,SD0都是必须选择的。SD的常用配置如下(需要核对原理图):
5. SPI有两项,根据设计需要选用,同样需要注意管脚的位置是PS还PL;
6. UART有两项,目前几乎所有的设计都是将UART 1作为前面板的串口调试接口,因此必须勾选UART 1,管脚固定使用PS的48和49:
7. I2C有两项可选,根据设计需要选用,同样需要注意管脚的位置是PS还PL;
8. CAN、TTC、SWDT、PJTAG、TPIU在当前设计中几乎没有使用过,待以后使用再做补充;
9. 最后勾选GPIO MIO和GPIO EMIO,表示剩余的PS和PL的I/O管脚可以作为普通GPIO使用。
以上完成Peripheral I/O Pins的设置完,可选择MIO Configuration进行管脚核对,电压、速率等的校对;
2.2.2 PS-PL Configuration
选择PS-PL Configuration,可以配置PS和PL之间交互接口的参数,根据需要进行配置,一般保持默认即可,有时需要配置串口波特率或配置HP接口:
2.2.3 时钟配置
选择Clock Configuration,进入时钟配置:
多数时钟保持默认设置即可,注意DDR的时钟可能需要根据后期系统启动情况调整,若系统启动不了或者报错,可能需要尝试降速。其他可能需要配置的是PL Fabric Clocks,根据之后添加PL的IP核所需的时钟确定,比如本工程的PL的IP核中有的需要100M时钟,有的需要200M时钟,有的需要125M时钟,还有的需要10M时钟,则可按下图设置,对于精度要求不高的IP核,还可以通过添加时钟的IP来进行时钟的倍频实现需要的时钟。
2.2.4 DDR参数配置
选择DDR Configuration,设置DDR,主要设置DDR的型号,根据原理图及与硬件同事确认,选择正确的DDR型号,其他选项一般保持默认即可:
2.2.5 中断配置
选择Interrupts,设置中断,一般按下图勾选即可,用于PL网口、PL IIC等的中断:
3.3 添加PL的IP核
设置完成后,点击OK即可,回到Diagram,此时ZYNQ的IP核会出现一些新的管脚:
2.3.1 系统复位IP核
根据工程需要添加其他的IP核,一般Processor System Reset是一定要添加的IP核,点击“+”号搜索“reset”即可找到:
添加完后,可点击Run Block Automation进行自动引出端口:
点击Run Connection Automation进行自动连线:
2.3.2 GE网口IP核
继续添加其他IP核,如PL的GE网口(此处添加了2个PL的GE网口)。
此处仅举例说明,其他类型网口可参考“GE 网口”相关文档。
再次运行Run Block Automation和Run Connection Automation(全部勾选):
自动添加AXI DMA的IP核,双击AXI 1G/2.5G Ethernet Subsystem的IP核,设置参数:
选择1Gbps,PHY接口一般为RGMII、SGMII或1000BaseX,根据具体需求选择(不同PHY的连线可能不一样,需要根据原理图确认),MAC Features可保持默认,也可调整TX Memory Size和RX Memory Size:
Network Timing和Shared Logic一般保持默认即可,若两个网口都是RGMII,另一个网口的Shared Logic可以设置成“主从模式”:
时钟保持默认的100K即可(选200K貌似也没问题)
添加concat,用于连接中断:
双击设置concat的端口数量(根据使用的中断数设置),此处设为13(除了网口还有AXI I2C等其他IP核需要中断):
手动完成中断的连线,dout连到ZYNQ的IRQ_F2P,In端连接网口及DMA的中断:
手动修正其他时钟的连线:
自动整理布局:
其他网口具体设置和连线,可参考高速接口应用和调试-GE.docx
2.3.3 AXI IIC IP核
添加AXI IIC核:
运行Run Connection Automation进行自动连线并手动连接中断:
需要注意的是,AXI IIC的IP核需要设置延时,若不设置,有的板卡在软件操作时会出现“Input/Output error”的错误,导致IIC接口无法正常通信,添加方法,双击AIX IIC,按下图设置,延时经验值为50。
2.3.4 其他IP核
其他IP核的添加和连线步骤与上同,AXI Chip2Chip Bridge需要与FPGA确认是否使用Aurora,两边必须对称,AXI Chip2Chip Bridge的 IP核通常配置,wUser Width项自动生成,需要告知FPGA,FPGA端的Chip2Chip的这一必须与Zynq一致。
关于C2C的具体设置可参考“通用接口”中的“C2C应用”相关文档。
2.4 连线验证
工程搭建好之后可以验证连线。
没有问题会弹出如下窗口,有问题会弹出错误窗口,根据错误信息修改工程,直至没有问题为止。
2.5 IP核地址设置
在Address Editor中设置IP核地址,大部分可以使用自动分配的方式生成,其中Chip2Chip的地址需要FPGA提供(同时需要注意“Range”),selectmap的地址基本约定不变,固定为0x43C00000。
3、工程编译
生成HDL Wrapper:
使用默认设置,点击OK,等待即可:
完成时Updating消失,生成 Output Products…,
使用默认设置,点击OK,等待完成:
综合实现:
点击OK,右上角有绿色“转圈”:
完成实现,打开设计:
选择菜单的Layout->I/O Planning,进行管脚约束,主要是管脚号(与原理图一致)和电压值(通常选LVCOMS1.8或LVCOMS3.3,取决于管脚所在的bank电压):
管脚约束需要对应原理图中的管脚,约束完成后,点击保存,创建XDC约束文件,输入XDC文件名,点击OK:
部分工程可能需要在.xdc中添加以下约束,否则编译网口会报错:
create_clock -period 8.000 -name ETH0_RGMI_rxc [get_ports ETH0_RGMI_rxc]
保存后生成bit文件:
使用默认配置,点击OK,等待生成bit文件,生成的bit文件在工程目录下的.run目录下的impl_1下。
希望大家点赞、收藏、关注哦!!!ヾ(o◕∀◕)ノ