稀土掘金 稀土掘金

ZYNQ裸机开发-led

对于ZYNQ的工程设计,大体分为两部分,分别是硬件逻辑系统的设计和CPU软件程序的设计。

硬件逻辑系统设计: 搭建一个满足用户需求的硬件环境,该环境通过vivado实现。

CPU软件程序设计:用户通过用户程序控制CPU工作,使整个系统达到预定的效果,该部分通过SDK实现。

image.png

设计硬件逻辑系统环节我们需要进行的操作很多,例如添加 IP 核、 导出引脚、端口连接等。对于需要使用到第三方 IP 核的设计,还需要先在设置中将第三方 IP 核添加进 IP 存储库,然后才能添加并配置该核。

hdf 文件为硬件资源描述文件,可以通过生成比特流或生成模块设计产生。对于涉及到 PL 端的设计,导出 hdf 文件时需要包含比特流(PL 配置文件),因此通常使用生成比特流的方式产生 hdf 文件;对于纯 PS 端的设计,导出时不需要比特流,因此两种方式皆可。

GPIO general purpose I/O, 通用输入输出。是ZYNQ的外设之一。

mio 多功能IO接口,属于Zynq的PS部分. emio 扩展MIO,依然属于Zynq的PS部分,只是连接到了PL上,再从PL的引脚连到芯片外面实现数据输入输出。

GPIO包括MIO和EMIO,

MIO 在芯片外部有 54 个引脚,这些引脚可以用于 GPIO、SPI、UART、USB 等功能上,每个引脚都同时具有多种功能。因为 MIO是 PS 部分的引脚且其操作对于 PL 端不可见,所以对 MIO 的操作可以视为纯 PS端的操作。EMIO 与 MIO 的不同在于,EMIO 连接到了 PL,再从 PL 输出信号,而 MIO 直接从 PS 端输出。

MIO 直连到PS,EMIO 则是 PS 扩展到 PL,从 PL 接出的 I/O。EMIO 依然属于 PS,只是连接到了 PL,再从 PL 输出信号。所以 MIO 不需要管脚约束,而 EMIO 需要管脚约束。

当 GPIO 用作输出时,一般用于控制一些简单的外设,如 LED 和蜂鸣器。也可以用于观测一些简单外设的状态,如按键,此时 GPIO 用作输入。GPIO 可以通过 MIO 连接到 PS 端的引脚,也可以通过 EMIO 连接到 PL。

其中 Bank0和 Bank1 是通过 MIO 直接与 Zynq 管脚相连的部分,而 Bank2 和 Bank3 则通过EMIO 连接到了 ZYNQ 器件的 PL 端。

image.png

LED

按下PS端的按键S2,PL端的小灯亮起,松开按键,小灯熄灭。 按下PL端的按键S1,PS端小灯亮起,松开PL端的按键的小灯熄灭。

ZNYQ7010:

XC7Z010 对应为“xc7z010clg400-1”, 在 Search 中输入 “xc7z010clg400-1”搜索即可。

image.png

image.png

I/O pin count: I/O数目400个。

LUT:17600

Flip Flop: 35200

block ram: 60

本次设计我们通过 PS 与 PL 侧的按键控制另一侧的 led 灯,每个按键和 led灯都需要一个 GPIO信号。在前面的原理部分我们有讲过,GPIO连接到 PS部分使用的是 MIO 接口,连接到 PL 部分使用的则是 EMIO 接口,所以本次设计我们需要使能这两个外设接口。PS 端的引脚是固定的,我们不需要分配,

PL 端的按键和 led 灯都需要一个 EMIO 信号,因此我们将 EMIO 的位宽设置为 2。设置完成后检查电平状态,将 Bank1 的电平设置为 1.8V。

1 create block design

2 GPIO配置

3 DDR配置

DDR 全名为双速率同步动态随机存储器,也就是我们常说的内存。基于 PS 端的应用,大部分都需要基于片外存储外设 DDR 上运行。 因此在使用时,我们需要配置 DDR 型号。 image.png

4 导出引脚

接下来我们需要将 IP 核的引脚导出,点击上方的蓝色小字“Run Block Automation”,让系统自动帮我们导出引脚。

image.png

手动导出GPIO-0引脚

image.png

右键点击,Make External

端口连接

验证设计 validate design

生成封装

点击 sources 资源栏下我们创建的 system 模块设计,单击右键,在展开的功能中选择“Generate Output Products...”生成输出。

在合成选项栏直接选择“Out Of context per IP”即可,下方的“Number of jobs”选项选择最大值。该值会影响生成输出时的速度,该值越大,生成输出的速度就越快,最大值与电脑配置有关,设置完成后点击“Generate”开始生成。

image.png 点击 sources 资源栏下我们创建的 system 模块设计,单击右键,

在展开的功能中选择“Create HDL Wrapper...”创建 HDL 封装

生成输出后,生成HDL封装。

image.png 表明封装已经完成。

管脚约束

对于使用过 PL 端的设计,在完成封装后,我们需要对涉及到的管脚进行分配和约束。点击左侧导航栏的“Open Elaborated Design”进行约束和分配。 Open Elaborated Design:生成和约束解析的管脚。

在管脚约束界面中,我们需要做的是对使用到的 PL 端的管脚进行分配并对管脚电平进行约束,本次设计所涉及到的为 PL 端的按键和 PL 端的 LED 灯。

image.png

本次设计所涉及到的为 PL 端的按键和 PL 端的 LED 灯。Pin Name 代表 ACZ701 开发板中的引脚名,Signial Name为本次设计的信号名,Pin NO为对应引脚号。按照管脚分配表完成管脚分配后我们还需对管脚电平约束,将管脚电平设置为 3.3V 即可,即设置为 LVCMO33*。

image.png

image.png

保存

image.png

生成bit流

完成了管脚约束后即可开始比特流的生成,比特流中包含着对 PL 端的配置信息,其中就包括对引脚的分配以及电平的约束,因此生成比特流需要在进行管脚分配和约束之后。当然如果设计并未使用到 PL 部分资源,可以直接跳过该环节。

点击“Generate Bitstream”开始生成比特流。

image.png

导出硬件

image.png

到了 PL 端的资源使用,因此需要勾选比特流:

image.png

ACZ701开发板启动时,PS 总是优先启动,随后 PS 开始配置 PL。前面生成比特流时我们说过,比特流中包含有 PL 端的配置信息,因此对于涉及到了PL 端资源的设计,导出硬件描述文件时我们需要包含比特流,否则开发板在启动时不会正确对 PL端进行配置。

对于纯 PS 端的设计,由于并未使用到 PL端资源,所以导出时无论是否包含比特流都不会造成影响。

image.png

启动SDK

硬件导出完成后 vivado 部分的设计已经完成,接下来打开 SDK 开始 CPU软件程序设计。点击 File,在展开的功能栏中选择“Launch SDK”。

创建SDK工程

image.png

image.png

image.png

导入库文件

SDK 中库文件的导入较为简单,将需要导入的库文件夹复制后直接拷贝粘贴到新建 SDK 工程下即可。

此时,软件有两个报错,其中一个提示我们 key_ctrl_led.elf文件生成失败,该文件为连接文件,参与程序的连接与执行,由软件编译后生成;另一个则是报错工程没有main 函数。这是正常现象,因为此时我们还未添加头文件路径和用户代码。

添加头文件

导入了库到工程中,每个库包含着对应的头文件。对于SDK,这些头文件是无效的。需要将头文件路径添加到工程中。 image.png

image.png

image.png

添加用户代码

image.png

image.png

主程序:

#include "xparameters.h"	//设备信息相关的头文件
#include "PS_GPIO.h"

//MIOn对应的GPIO编号为n
#define PS_LED		7		//MIO_LED为MIO7,对应的GPIO编号为7
#define PS_KEY		47		//MIO_KEY为MIO47,对应的GPIO编号为47
//EMIOn对应的GPIO编号为54+n,因为MIO总数为54,EMIO是从54开始算的
#define PL_LED	(54 + 0)	//EMIO_LED为EMIO0,对应的GPIO编号为54+0=54
#define PL_KEY	(54 + 1)	//EMIO_KEY为EMIO1,对应的GPIO编号为54+1=55

/*
 * 使用PS_GPIO实现了按键控制LED功能:
 * PS端按键按下→PL端的灯亮起,松开熄灭
 * PL端按键按下→PS端的灯亮起,松开熄灭
*/
int main(void)
{
	u8 State;	//存放按键(MIO47)的电平状态,0为低电平,1为高电平

	PS_GPIO_Init();	//初始化PS端MIO和EMIO
	GPIO_SetMode(PS_LED, OUTPUT, 0);//设置PS_LED(MIO7)为输出并且初始为低电平
	GPIO_SetMode(PL_LED, OUTPUT, 0);//设置PL_LED(EMIO0)为输出并且初始为低电平
	GPIO_SetMode(PS_KEY, INPUT, 0);	//设置PS_KEY(MIO47)方向为输入
	GPIO_SetMode(PL_KEY, INPUT, 0);	//设置PL_KEY(EMIO1)方向为输入

	while(1)
	{
		State = GPIO_GetPort(PS_KEY);	//读取PS_KEY的电平值并存储到State变量里
		GPIO_SetPort(PL_LED,!State);	//将State变量的值取非赋予PL_LED来输出
		State = GPIO_GetPort(PL_KEY);	//读取PL_KEY的电平值并存储到State变量里
		GPIO_SetPort(PS_LED,!State);	//将State变量的值取非赋予PS_LED来输出
	}

	return 0;
}

可以 Ctrl+s 对代码进行保存,软件会自动编译,随即报错便会消失。

确认工程编译成功后即完成了 CPU 软件设计环节,接下来便可以开始进行板级验证了。

板机验证

本次设计对开发板的供电要求不高,因此可以仅使用调试接口供电。

下载验证

image.png

接下来我们要新建一个任务,将烧录文件下载到开发板中

image.png

image.png

image.png

image.png

下载完成后 ACZ702 开发板上 PL侧的下载指示灯便会亮起,该灯仅代表 PL 部分配置完成,在纯 PS 的设计中该指示灯是不会 亮起的。

板级调试

image.png

玻璃钢生产厂家郑州玻璃钢艺术雕塑定制定做湖南省玻璃钢雕塑加工玻璃钢卡通雕塑找哪家无锡玻璃钢人物雕塑优惠华阴玻璃钢价值观雕塑镇江玻璃钢雕塑不锈钢水景玻璃钢雕塑铸铜玻璃钢仿铜雕塑定做价格梅州玻璃钢卡通雕塑报价玻璃钢蜘蛛侠雕塑价格正规玻璃钢雕塑动物玻璃钢雕塑加工厂焦作不锈钢牛玻璃钢景观雕塑河南玻璃钢军人雕塑仿铜西式玻璃钢雕塑多少钱玉树玻璃钢雕塑南充玻璃钢雕塑摆件施工团队平凉户外玻璃钢雕塑定制玻璃钢雕塑月亮甘南抽象人物玻璃钢雕塑价格菏泽泡沫玻璃钢景观雕塑北京商场美陈销售文昌玻璃钢雕塑厂家江宁商场开业美陈清远广场玻璃钢雕塑商场玻璃钢花盆有哪些福建石雕雕塑玻璃钢吉林人物玻璃钢雕塑安装浙江室内商场美陈河南雕塑玻璃钢香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化