Zybo全栈开发入门教程(基于Linux嵌入式系统):10个步骤自定义IP模块

zybo是digilent公司推出的一款基于xilinx zynq-7000系列中最小型号z7010 soc的嵌入式开发平台,zybo上集成了丰富的多媒体外设接口,强大的z7010芯片支持完成的系统设计,同时五个pmod接口提供了丰富的扩展空间,想必很多人都听说过zedboard的大名,其实可以说zybo是mini-zedboard。zybo全栈开发教程共分为三部分:自定义ip、移植linux操作系统、编写驱动模块和应用。通过这三部分你将能够全面熟悉zynq ap soc架构的开发流程,包括fpga逻辑电路设计、软件编程、linux操作系统及软件开发,以及如何在zybo开发板中应用这些技能。
在这个教程中,我们将以digilent官网提供的zybo base system design作为基础。它的架构如图。可以看到,uart1连接到usb-uart, sd0连接到sd card slot, usb0连接到usb-otg port, enet0连接到giga-bit ethernet port,gpio连接到btn4/5,以及quad spi连接到on-board qspi flash。这些处理系统(processing system, 简称ps)内的硬件ip通过复用i/o接口连接到板上的外设。在可编程逻辑(programmable logic, 简称pl)的部分,我们有hdmi tx controller, vdma, i2c以及gpio等等ip核。更多的资料可以看下载这个zybo基本系统时包含的文件。
教程开始之前我们要先明确所需要的资料如下:
zybo board硬件板卡
vivado 2014.1 webpack软件开发环境
zybo base system:板卡底层基础配置
u-boot:与zybo板卡硬件设计相关
linux内核源码
根文件系统
注:相关资料可以在digilent的github账户上找到(即 https://github.com/digilentinc )
自定义ip就是让用户在zynq soc的fpga部分实现自己的功能模块逻辑设计:
步骤一:下载zybo base system文件
根据自己的设计下载zybo base system压缩包文件并解压到指定目录
步骤二:使用vivado工具打开zybo base system文件
首先我们需要设置vivado的环境变量,共有四个选项分别是settings64.sh、settings32.sh、settings32.csh和settings64.csh,请根据机器系统是32位还是64位以及bash版本来使用。
步骤三:删除已存在的led模块
首先我们要确保所有的ip模块状态保持最新状态,如果有更新就会在顶部显示一条黄色的提示栏,点击更新(upgrade)即可,然后在base system中已经预先设置了一个led模块,这个模块主要采用ps的i/o接口,我们要把这个ip删除(如第二张图所示)。 步骤四:设置ip核vendor
在创建myled ip核之前我们要project settings里面设置vendor选项的名字,否则会引起vivado软件内部异常,名字可以根据自己喜好随意设置。
步骤五:创建myled ip模块
点击菜单栏tools—>create and package ip,弹出的对话框选择create a new axi4 peripheral,然后在弹出的对话框输入ip名字、版本、存储位置等相关信息,点击next继续下一步。 步骤六:增加模块接口
myled ip采用axi4外设接口,接口类型为lite,模式为slave,数据宽度32bits,寄存器数量为4,确保name选项为s_axi,实际上我们只需要一个寄存器,但是最小设置为4。 步骤七:编辑ip功能逻辑代码
基本设置完成后点击next,我们需要选择edit ip,然后添加用户定义的逻辑。我们要修改两个文件,分别是myled_v1_0_s_axi和myled_v_0(对应上图顺序),经过上面的修改我们将slv_reg0[3:0]与输入端口led[3:0]连接起来。
步骤八:封装ip模块
通过步骤七我们定义了ip逻辑,然后我们需要将它打包为一个黑盒,在project manager下拉菜单选择package ip,根据提示进行设置,保证弹出的对话框右侧选项全部打上绿勾。 步骤九:将自定义ip myled_v1.0增加到系统中
在block design的空白处右键选择add ip,搜索myled找到刚才封装的ip。增加myled_v1.0模块后,对话框顶部会出现绿色的提示框,我们点击run connection automation,这个操作会将myled ip的axi4-lite总线与ps连接起来。 步骤十:连接外部led端口
在空白处点击右键选择create port,设置为output,位宽led[3:0],然后用鼠标拖拽将这个输出端口与myled_0的输出接口led[3:0]建立连接。 步骤十一:修改约束文件,生成比特流文件
打开constraints下拉菜单下的base.xdc管脚约束文件,将led[3:0]与fpga硬件管脚绑定,即与zybo板上的四个led灯连接,最后在program and debug下拉菜单中选择generate bitstream,至此自定义用户ip并生成比特流文件完成。 下篇文章中将向大家介绍在本篇内容基础上移植linux操作系统,进一步深入了解zynq soc的开发模式。

基于Toshiba XPN7R104NC Buck-Boost DC-DC用于USB PD车载方案
油气行业中分布式光纤传感器的应用实例
VR怎么应用到线下场景?它最好的场景到底是哪里?
数字通信电缆之对称通信电缆的设计
[图文]简单、特殊的稳压电路
Zybo全栈开发入门教程(基于Linux嵌入式系统):10个步骤自定义IP模块
自豪!华为开发自有系统
半导体行业产生深远影响的定律:摩尔定律!
物联网装置会如何驱动未来的公共智能设施
一加6到底值不值得买
2022机器人企业创新50强公布:九号机器人登榜前十
全球基本面的逻辑、梳理和展望
HC89F0431A HC89F0421A 带ADC的20引脚8位FLASH微控制器外设功能端口总映射
PCB短路的原因及改善方法
斯坦德移动复合消毒机器人获双年度创新产品奖
智能箱变远程监测系统
基于A5358和A5366光放大器的工作原理
怎么分辨AVX钽电容真假
美高森美发布用于宽带网关的低成本miSLIC用户线电路
网桥带机量如何确定?网桥是否可以一对多?自动桥接失败如何处理?