#ZYNQ_PS(programmable system)端的开发流程
[TOC]
新建工程
同PL端,选好芯片型号就ok
添加system的ip-core
所庆幸的是,xilinx的PS端的所有外围都用block的形式来封装起来,然后再打包成一个大的ip核–zynq7 Processing System,大大减少开发时间,添加外设会使用自动布线的方式,外设可以是自己定义的IP.也就是联合了PL端做整个系统的布置
添加zynq7 Processing System ip
双击IP核,得到配置窗口
配置窗口介绍
peripheral I/O Pins
看见这个图就好像当初学stm32,学完之后发现有st官方出的io口自动配置那个软件一样..完美介绍了端口复用和解决复用冲突问题,左边的box可以直接使能一些外设,点一下便变成绿色.
不过要注意板子的端口要对应好.
然后就可以在
PS-PL configuration
看见所选中的外设,比如串口就在General目录下面
这里主要处理的是PS和PL端的连接问题,之前说过,也就是AXI总线问题,所以可以看到看到有ACP,HP,GP,DMA(主要是DMA是共用的),还有触发接口(trigger interface),GP使能(enablement)的设置,可以看出主要是PS-PL端的联动,AXI总线的设置
不用PL端逻辑最好把使能给去掉
Clock configuration
和一些嵌入式处理器(stm32等)一样,也是有时钟树的,不一样的是,他这里的时钟是可以实时改的(这可能就是做fpga公司的牛逼之处吧)
可以看到,他这里的CPU/DDR(Double Data Rate SDRAM)/IO外设/PL端的时钟/Debug时钟/计时器的时钟都是可以设置的……..
PL端没有用到的时候要把PL端的去掉,因为即使PL端没有用到,但是如果PL端是有编程的,如果有时钟信号的话,可能会有不可预期的后果!
DDR configuration
DDR(Double Data Rate SDRAM)
这里要设置DDR的型号和规格
AX7010 黑金版:MT41J128M16 HA-125
生成MCU
点击ok即可
现在可以发现,已经在Block automation 了,或许你会问,PS端的开发不是用C语言吗?为什么会纠缠在这里这么久
因为选择外设,初始化时钟~到建立起系统是一个从下往上的系统设计过程,那么下一步做的就应该是封装和抽象
类似TCP/IP协议的话,第一个封装应该是网络接口层
点generate就行
这一步做的大概是把选通的各个模块的ip核的端口定义封装出来,就像是这样:
这可能需要一点点verilog语法基础,蓝色标起来的是ip核的名称第二个就应该系统打包,相当于物理层和应用层的隔绝
,点让vivado自动布线
从wrapper就可以看到这封装的意思了吧…
所以就生成了一个system_wrapper的顶层模块
可以看到这个顶层模块(wrapper.v)和接口层(system.v)的内容是大致相同的,但是他们在结构上的意义是不一样的,system.v描述的是这个系统的信息,而wrapper.v是这个工程的顶层模块,在verilog语法中,只会综合顶层模块,也就是说在wrapper.v产生之后,这个系统就可以落地变成芯片了(在fpga上是自动布线)
也就是说,这一步就标记着,自己的 MCU(Micro controller unit)就这样诞生了
##怎么写C语言呢?
###进入SDK
MCU已经生成,那怎么写程序呢?
这时候就要把MCU带入到SDK(软件开发工具包 Software Development Kit, SDK)里面去了.就好像是stm32的MDK一样.
File->Export->Export Hardware
File->Launch SDK
可以看见SDK里面有很多硬件设置,约束(.c *.h *.tcl)和配置查询(.hdf),然后ps7_init.html是详尽地介绍了所有的配置
HDF(英语:Hierarchical Data Format)
TCL (Tool Command Language,脚本语言),在quartus里面作管脚约束文件
###New Application Project
File -> New -> Application Project
->Next->
这里选择的是工程模板,就好像开发stm32会选择找原子哥的template那样…
直接用hello world就可以了,后面会看到,是一个模块对应一段程序,
可以发现现在多了两个东西,一个是Helloworld文件夹,存的是我们的工程文件
另外一个是 helloworld_bsp (Board Support Package )
里面提供了一系列犹如stm32的库函数版本的函数供使用
这里不得不赞叹xilinx的文件做得是真的齐全,可以通过system.mss快速看到设计的外设并且都有相应的doc说明!
在工程模板下的/src里面有一个lscript.ld,里面可以设置各个程序或者数据是存储在内部的RAM还是外部的ROM中
这里就和mdk/keil的开发流程差不多了,只要工程下右键Bulid Project 一下就完事了
###Run
工程右键 /Run As -> 1 Launch on Hardware 就可以烧程序啦
附上赛灵思的sdk和debugger的文档
SDK_DEBUG_DOCS
再附上一个标记好的ZYNQ Block Design 图
完结撒花
PL端协同简介
同前面的思想,只要在画图的时候加入一个已经设计好的IP核,然后用block的形式添加,编写管教约束文件之后整体编译成bit再导入sdk就行了,这里重点是在sdk中烧录fpga的bit文件
再添加刚刚编译的fpga的bit文件路径,收工!