1、vivado入门教程峰哥版Xilinx zynq 7010clg400-1 sopc 基于 zybo 开发板之 gpio 使用Vivado 2015.4SDK 2015.4如峰2016 年 6 月 7 日 20:10:33版本说明版本作者说明Vivado 搭建底层硬件系统 4二、 sdk 使用 2.6 三、总结 3.8 附录程序 3.8 Vivado 搭建底层硬件系统首先使用 vivado 搭建一个底层硬件系统,具体操作过程如下,用图的方式来说明,直观方 便打开 vivado 2015.4 如下单击 create new project ,如下图,单击 next继续单击 next ,如下如,解
2、释一下1:工程的名字2:工程在电脑中的位置,不要中文,不要空格3:打上勾表示在 2 的位置基础上创建一个子目录,不勾就表示不创建,我一般都是按大类来分,比如米尔的文件夹,下图zingsk 的文件夹, zybo 的文件夹,所以我都勾上,我的位置如设置好了之后继续单击 next ,这里是说创建一个什么养的工程一般都是 rtl 的工程, 其他的我还没研究过,直接看官方文档学的,做 fpga 或者 soc,sopc , 都是 rtl 工程。 这里也有个可以勾选的地方,勾上的意思是现在不指定源文件,如果不够上,就进入具体设置, 有硬件语言的类型, ip 的选择, and so on ,可以自己去看看,
3、建议勾选, 这些可以在工程中设置的,没有必要提前设置单击 next这里面可选的就很多了,从上到下,从左到右简单的说下Part 和 board 分别指的是单个芯片和官方或者安富利的板子下面的这些是指 fpga 的类和速度和温度,左后的 search ,是你之前用过的芯片的记录或者 直接收你想要的芯片名字,第一次选好,以后直接到 search 中选就行这个是 zybo 的板子的芯片型号, 或者在 board 中直接选 zybo ,继续单击 next ,一个 summary继续单击 next, vivado 给咱们创建工程创建好了就是这个样子,一个空的工程接下来我们要建立一个空的图片,用来搭建 zy
4、nq 的底层,单击箭头指的地方会出现下图这样这个表示设计的名字和存储的路径,般都是系统,我习惯于功能加系统的方式命名,比如这次是对 gpio 进行操作,我会做 gpio_sys ,然后单击 ok接下来我们来添加 zynq 的 ps,单击 ,或者单击出现这个图,再或者 crtl + I我们在 search 这输入 zynq ,选择第一个,单击左键或者回车,都行,面的那个好像是可以忽略不记)完了是这个样子的双击 zynq如图,配置 zynq ,这里是重点,详细说起来很多,可以参考 ug585 ,我现在也没有全搞明 白,也是觉得哪里不对去文档里找,那个文档 1800 多页,细读完了一定会忘,不如用哪
5、看 哪(个人观点) 配置完是这样单击 run block automtian完了是这样的,把 ddr 和 fix io 引出来了接下来就是本文重点,开始添加 gpio 的 ip双击配置 gpio 的 ip ,简单改一下 ip 的位宽,单击 ok然后直接单击如图然后在导航栏,点 source右键 gpio sys单击 create hdl wapper单击 ok上面的那个是手动,后面让 eda 自动 updata ,选下面的就好,单击 ok在左侧的导航栏中,单击箭头指的位置WddlvAX!P9ll,tnil-oi3 ,pl-4AhP:)0 OfH K?事”硕. :i : Vl UValSJli
6、wd 9gtJVjla* MZ1J 1VdH*IU -w bBui xiiJUG1; UGSA3CJj -El; 5 G JJ JjelJ IAl ZQl -S AL,L1 户jEdu udig-.udi.s 自ikh丄P樽-T jj J :暫玄】B41 Mhri 4 #lWl3WljWUlr jf JFW IfI I WjIi-HH JM .MLJJj LH ap IIkLT TlI * ifHMiflh Il4Bun p-6H a) *TOJisira 1ra2 . 1E+*5 K J.14Ig Cl lrG PJt roj P SJWS UStH FMGS Lt-FaJCcS3r*- +
7、 zjtsJffW UtIll刑耳戸口n p;Jl !-Cl JiIllNJ iJWIil-Opffl ?*1W IWSQJQe E41 tlin;3J597J*JOU- 5Jpp?jjm-s 35atJe X3pj,oaj i-3-iBpdriTaLlCJ91 蜩SJi HmP01Ii rrdl-o Iueme ,Q - KlJeBii: r; LrllEU* IlnQil!t3 护JIn IKVLTUDJ d Sy ILLit*!qpCLd - *3*PTUM) Ilu*aUM4E叫 4 g4ur* uwHP4j6-td3p d J* Q *门曲e电1 Tlft j p jMKR4lJ |
8、hjL”| 旳 Ifr T1; JMJHIpJt-j-; 1 仲卯冲*Ed It 1 IbiDiK-Id1Vi Fc4T9ag PaiTlRVLLI,E-k IBda _.AfeU-IIV F*u轉 Id 曙 *1IW* Illi PIifrTifCr1S WrU uh; U4tns 呼InH3ffi F*訂咖 4Ig i*44 IJf l5s 中枣IH ss U JPU Q HiX社Jt FBia JJ P lt(dt MlIfllHi AIB5J*S FI曙評 eBut,ss 4f l4 警JnlViT 2” WlJI r单击 ok ,然后编译,等着分配管教,指定电平水平LMOS33如果之
9、前忘了保存,这时候会弹出保存的,选段漫长的等待之后,save然后这样,先不要综合,没有分配管教在这点这个然后在这选 layout然后选 ioplane单击之后如下图分配完了, ctrl + s 点 ok设置一个名字可以叫 pin_location 然后综合然后生成 bit 文件这个 bit 文件可以生成,也可以不生成,取决于有没有 pl ,有的话就要生成 bit 文件这两个过程很长时间! !最后好了单击 okVivado 的工作要完成了,就剩最后两步 File export export hardware如下图单击 ok 最后 file lanch sdk , vivado 的工作就完成了sd
10、k 使用Filenewbaord suport package默认选项就行单击 finish如下图,再单击 finish左边多了一个 bsp 的文件夹在这里有我们想要用的函数和一些参数信息今天这个是 gpio 的,主要这个两个函数头文件短则刚才建立 bsp 生成的 bspNext ,选 helloword 工程单击 finish 多了一个工程接下来就可以写程序了 展开这个 gpio 的工程打开如图接下来我们先写程序,要讲三个函数1.gpio 初始化函数2.gpio 数据方向设置函数3.gpio 写数据函数有关 gpio 大概有十二三个函数,在 bsp include xgpio.h 下,在 c
11、rtl+ 左键,进入 xgpio.c 讲的很详细,不过是英语的,如图这是讲初始化函数的我先说这几个参数什么意思,再说怎么用首先 int Xgpio_Initialize(Gpio*inr,u16 DeviceID); 这个函数是有返回值的,返回一个 int 型, 0 和 1其中 0: XST_SUCCESS,1:XTS_DEVICE_NOT_FOUND 写程序的 时候可以直接判 断一个变 量 比 如 if(a = XST_SUCCESS or XTS_DEVICE_NOT_FOUND )或者 if(a=0 or 1)前面的指针变量是指向某个 gpio 的,该 gpio 在 xilinx 中被定
12、义为 Xgpio 类型的变量,后面 的 device id 表示你要初始化的具体的 gpio ,这个 id 在 bsp include xparameters.h 下, 比如在这里可以对这些代码进行更改,如果觉得名字太长的话。具体怎么用这个函数呢,我来仔细说首先要包含两个头文件 xparameters.h 和 xgpio.h 然后声明一个 Xgpio 类型的变量 最后调用 Xgpio_Initialize 函数Ex: #include “xparameters.h ”#include “xgpio.h ”XGpio gpio_led;Xgpio_Initialize(&gpio_led, 0)
13、;成功了,我们一步一步往下来接下来我们来设置数据流方向, 用到的就是 void Xgpio_SetDataDirection(XGpio *inr, channel, direction ) ,无反回参数的函数简单的解释一下,指针跟前面的一样, channel ,就是通道,在做 gpio ip 配置的时候,不知 道有没有注意到 gpio 有两个通道,所以这个值就是 1 or 2 ,分别代表通道 1 和通道 2,最 后就是方向,数据是输入(读) ,还是输出(写) ,这里也是两个值 0:代表输出, 1:代表 输入Ex: #include “xparameters.h ”#include “xgpi
14、o.h ”XGpio gpio_led;void Xgpio_SetDataDirection(&gpio_led,1,0);/ 通道 1,输出接下来我们就来点亮一个灯, 用的是 void XGpio_DiscreteWrite(XGpio * InstancePtr, unsigned Channel, u32 Data) 函数前两个参数和上面的基本相同, u32 data 就是要写的数据,我们给个 000f,全亮#include “xparameters.h ”#include “xgpio.h ”XGpio gpio_led;void Xgpio_SetDataDirection(&gp
15、io_led,1,0x0a);现象为三、总结这样看来, arm 比 51 单片机要简单,我们只需要明白有什么函数,每个函数是干什么的, 就可以进行编程了,这只是个开始,先从 gpio 开始,慢慢深入学习!附录程序#include #include platform.h#include xparameters.h#include xgpio.h/void print(char *str);/ 不注释掉会有一个定义冲突的错误,不知怎么解决? int main()XGpio gpio_led;int status;init_platform();status = XGpio_Initialize(&
16、gpio_led, 0);if(status = 0) printf(success rn);设置通道 1 为输出XGpio_SetDataDirection(&gpio_led,1,0);/XGpio_DiscreteWrite(&gpio_led, 1, 0x0a);print(Hello Worldnr);cleanup_platform();return 0;随便一改就是流水效果#include #include platform.h #include xparameters.h#include xgpio.h/void print(char *str);int main ()XGpi
17、o gpio_led;int status;int i,x,y;init_platform();status = XGpio_Initialize(&gpio_led, 0);if (status = 0)printf (success rn );XGpio_SetDataDirection(&gpio_led,1,0); / 设置通道 1 为输出 while (1)for (i = 0; i=3; i+) XGpio_DiscreteWrite(&gpio_led, 1, 0x01 0; x- )for (y = 100000; y 0; y-) ;print( Hello Worldnr );cleanup_platform();return 0;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1