ZYNQ入门(二)-PS(programmable system)端的开发流程

24 篇文章 14 订阅

ZYNQ_PS(programmable system)端的开发流程

新建工程

同PL端,选好芯片型号就ok

添加system的ip-core

所庆幸的是,xilinx的PS端的所有外围都用block的形式来封装起来,然后再打包成一个大的ip核–zynq7 Processing System,大大减少开发时间,添加外设会使用自动布线的方式,外设可以是自己定义的IP.也就是联合了PL端做整个系统的布置

添加zynq7 Processing System ip

ip_core

ip2

ip3

双击IP核,得到配置窗口

配置窗口介绍

zynq_ipcore_com

peripheral I/O Pins

看见这个图就好像当初学stm32,学完之后发现有st官方出的io口自动配置那个软件一样…完美介绍了端口复用和解决复用冲突问题,左边的box可以直接使能一些外设,点一下便变成绿色.
ioconfig
不过要注意板子的端口要对应好.

然后就可以在

PS-PL configuration

看见所选中的外设,比如串口就在General目录下面

这里主要处理的是PS和PL端的连接问题,之前说过,也就是AXI总线问题,所以可以看到看到有ACP,HP,GP,DMA(主要是DMA是共用的),还有触发接口(trigger interface),GP使能(enablement)的设置,可以看出主要是PS-PL端的联动,AXI总线的设置

不用PL端逻辑最好把使能给去掉

Clock configuration

和一些嵌入式处理器(stm32等)一样,也是有时钟树的,不一样的是,他这里的时钟是可以实时改的(这可能就是做fpga公司的牛逼之处吧)
clock

可以看到,他这里的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
up
点击ok即可

现在可以发现,已经在Block automation 了,或许你会问,PS端的开发不是用C语言吗?为什么会纠缠在这里这么久

因为选择外设,初始化时钟~~~~~到建立起系统是一个从下往上的系统设计过程,那么下一步做的就应该是封装抽象

  1. 类似TCP/IP协议的话,第一个封装应该是网络接口层
    product
    点generate就行
    这一步做的大概是把选通的各个模块的ip核的端口定义封装出来,就像是这样:
    verilog
    这可能需要一点点verilog语法基础,蓝色标起来的是ip核的名称

  2. 第二个就应该系统打包,相当于物理层和应用层的隔绝
    wrapper,点让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

可以看见SDK里面有很多硬件设置,约束(*.c *.h .tcl)和配置查询(.hdf),然后ps7_init.html是详尽地介绍了所有的配置

HDF(英语:Hierarchical Data Format)
TCL (Tool Command Language,脚本语言),在quartus里面作管脚约束文件

New Application Project

File -> New -> Application Project
66_c
->Next->
Hello
这里选择的是工程模板,就好像开发stm32会选择找原子哥的template那样…

直接用hello world就可以了,后面会看到,是一个模块对应一段程序,

可以发现现在多了两个东西,一个是Helloworld文件夹,存的是我们的工程文件

另外一个是 helloworld_bsp (Board Support Package )
里面提供了一系列犹如stm32的库函数版本的函数供使用

在工程模板下的/src里面有一个lscript.ld,里面可以设置各个程序或者数据是存储在内部的RAM还是外部的ROM中

xiu

这里就和mdk/keil的开发流程差不多了,只要工程下右键Bulid Project 一下就完事了

Run

工程右键 /Run As -> 1 Launch on Hardware 就可以烧程序啦

Get Result

附上赛灵思的sdk和debugger的文档
SDK_DEBUG_DOCS
再附上一个标记好的ZYNQ Block Design 图
666
完结撒花

如果你想请我吃个南五的话

  • 15
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小何的芯像石头

谢谢你嘞,建议用用我的链接

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值