Zedboard OLED Display Controller IP v1

介绍

Author:zhangxianhe

本文档提供了快速添加,连接和使用ZedboardOLED v1.0 IP内核的说明。运行在ARM处理器系统上的测试应用程序用于通过其驱动程序的功能与IP进行通信。 Vivado设计套件被用作开发环境。硬件验证是在Zedboard上完成的,然而,这个IP可以很容易地应用于其他主板或嵌入式系统。

平台

硬件:Zedboard xc7z020clg484-1

软件:Vivado 2016.3(适用于Vivado 2015.4及以上)

过程

A- Creating a project in Vivado to target the Zedboard

1.      双击Vivado2016.3 启动Vivado;

2.      双击Create New Project来新建一个工程,点击Next;

3.      在下一个窗口中输入“test_oled”作为项目名称,项目文件指定存储在 “D:/oled_test”的目录下,勾选Create project subdirectory,点击Next;

4.      接下来,指定项目类型,使用默认选择的RTL Project,并勾选Do not specify sources at this time。RTL代表寄存器传送语言(Register Transfer Language),通过选择这个选项,我们可以在以后灵活地添加/修改源文件,点击Next;

5.      接下来,指定要测试项目的电路板,选择Zedboard Zynq Evaluation and Development Kit,点击Next然后Finish完成;

“新建项目”向导将关闭,刚刚创建的项目将在Vivado中打开。

B- Creating the ARM processor system using the IP Integrator.

1.      单击Vivado左上方的Project Manager中的Create Block Design;

2.      输入模块的名称,然后单击OK,对于这个例子,使用名称:system;

3. 点击OK后,将会在Vivado中显示一个空白框图视图图形用户界面。在图中,我们将添加所需的硬件块系统。

4. 现在,我们将添加包含ARM处理器的ZYNQ7 Processing System块通过启动Add IP向导来完成,或者可以在程序框图空白处右击选择Add IP..,IP目录窗口将会出现,显示在这个设计中添加所有可能的IP;

向下滚动到底部或使用关键字zynq进行搜索,双击ZYNQ7 Processing System。 ZYNQ7处理系统块已被放置在框图视图中。程序框图中显示的端口由目标开发板指定的该块的默认设置定义。在绿色信息栏中单击 Run Block Automation。确认processing_system7_0并确保选中Apply Board Preset,然后单击OK。

这将为处理系统创建外部端口,并对这些端口应用物理约束,如下图所示

C- Adding the ZedboardOLED IP to the IP repository

在进程导航窗格中,单击Project Setting选项,选择IP,然后单击Add Repository 按钮。浏览窗口打开,浏览到IP核的位置(D:\oled_test\tamu.edu_user_ZedboardOLED_1.0),然后单击“Select”。

注意工具如何在目录中检测到新的IP,点击Apply,然后OK。

这样做后,就可以将ZedboardOLED_v1.0添加到当前项目的IP库中,下一步是将其添加到块设计中,并将其从一侧连接到Zynq处理系统,并从另一侧通过使用外部端口连接到OLED板块。

D- Connecting the ZedboardOLED IP core

1.在程序框图空白处右击选择Add IP..然后输入“oled”,ZedboardOLED_V1.0将显示出来,双击IP将其添加到块设计中。

2.看到Designer Assistance现在可以在绿色的信息栏中找到,它将帮助把IP核连接到处理系统的AXI子系统,配置时钟和复位,为IP分配基地址(0x43C00000),并为互连和同步添加必要的硬件;

点击Run Connection Automation并选择/ZedboardOLED_0/S00_AXI。保留Clock Connection设置为Auto,然后单击OK。(默认选择)。

单击(Regenerate Layout)重新生成布局,程序框图应该看起来类似于这个:

注意到Designer Assistance将AXI Interconnect和Processor System Reset自动添加进来了.将鼠标悬停在ZedboardOLED SDIN端口上,直到它变成铅笔形状,然后右击并选择Make External。(SCLK,DC,RES,VBAT,VDD)端口重复相同的过程。

3.右键单击程序框图上的任意位置,然后选择Regenerate Layout(重新生成布局),这将整齐地组织设计中的块。

最终的布局和如下所示的相似:

单击Tools,选择单击Validate Design,检查程序框图是否有误,结果直接点击Ok。

4.在源窗格中,选择系统框图“system.bd”,右击并选择Generate Output Products,默认设置,直接点generate,运行结束后,点击OK。

在源窗格中,选择系统框图“system.bd”,右击并选择Create HDL Wrapper,选择第二项 Let Vivado manage Wrapper and auto-update,点击OK,

现在我们通过AXI接口将IP连接到处理系统,下一步是将IP核的外部端口连接到OLED模块的实际Zynq引脚。

5. 在Flow Navigator窗口中,从Project Manager部分选择Add Sources。Add Sources对话框将打开。选择 Add or Create Constraints。进行管脚约束。

点击 Next,然后点击 Create File, 选择 XDC 作为文件类型然后输入oled_constraints作为文件的名字。

点击OK,点击Finish创建文件并关闭对话框。

在Sources窗口中, 展开Constraints 文件夹并通过双击oled_constraints.xdc来打开新创建的XDC文件。

将下列行添加到约束文件中,或者可以从源文件复制它们文件包oled_constraints.xdc。

 set_property PACKAGE_PIN U10 [get_ports DC]
set_property PACKAGE_PIN U9 [get_ports RES]
set_property PACKAGE_PIN AB12 [get_ports SCLK]
set_property PACKAGE_PIN AA12 [get_ports SDIN]
set_property PACKAGE_PIN U11 [get_ports VBAT]
set_property PACKAGE_PIN U12 [get_ports VDD]
set_property IOSTANDARD LVCMOS33 [get_ports DC]
set_property IOSTANDARD LVCMOS33 [get_ports RES]
set_property IOSTANDARD LVCMOS33 [get_ports SCLK]
set_property IOSTANDARD LVCMOS33 [get_ports SDIN]
set_property IOSTANDARD LVCMOS33 [get_ports VBAT]
set_property IOSTANDARD LVCMOS33 [get_ports VDD]

这将ZedboardOLED IP内核的外部端口连接到Zynq器件的特定引脚。特定引脚连接到Zedboard上的OLED模块。按(Ctrl + S)保存约束文件。

E- Generating Bitstream

在 Flow Navigator窗口中的Program and Debug部分,单击Generate Bitstream,将出现一个对话框,要求保存所做的修改,单击Save保存;也可能会出现一个对话框,显示“No Implementation Result Available”,单击Yes运行综合和实现。 生成比特流可能会在综合后执行整个实现过程,单击是以在出现提示时运行实现。 实现可能需要一段时间才能完成,具体取决于计算机的性能。

执行Generate Bitstream这个过程时首先会自动进行分析综合和实现。(这里也可以直接先点击Run Synthesis进行综合,然后点击Run Implementation进行实现,然后再点击Generate Bitstream生成比特流) 。完成后,可直接点Cancel.

F- Exporting hardware design to SDK

1.点击 File > Export > Export Hardware, 确保勾选Include bitstream 选项

2.选择File>Launch SDK,打开SDK,注意所有与设计相关的文件(包括IP)已经在上一步导出到SDK中,导出的资源中包括ZedboardOLED_v1_0 IP核的驱动。

G- Working with SDK

1.在SDK中, 选择File > New > Application Project.

2. 在下一个窗口中, 输入文件名以及默认如下参数:

点击Next,在下一个窗口中,从可用模板中选择Empty Application,然后单击Finish。这将编译BSD和相关的驱动程序。

3. 展开oled_test_bsp>ps7_cortexa9_v2_0>libsrc>zedboardoled_v1_0>src, 然后检查ZedboardOLED.c和ZedboardOLED.h以实现与OLED屏幕一起使用的功能。

4.现在我们将编写一个使用这些函数的简单应用程序,扩展oled_test目录,右击src目录,选择New-> Source File,在下一个窗口中显示出来,在源文件中输入“mian.c”,然后点击Finish。

复制并粘贴下面的C代码到“main.c”中,点击保存或点击(Ctrl + S),这样oled_test应用程序和它的BSP都会被自动编译,生成可执行文件.elf文件。

 int main(void){
clear();
print_message("OLED_Test_zhang",);
print_message("NJUPT__xian_he_",);
print_message("PS_And_ARM_PL_S",);
print_message("Anniversary1229",);
return ();
}

Cick Project-> clean (in case you get any errors with the BSD).

H- Downloading the bitstream and running the application (Hardware verifications)

硬件准备:两条USB线,一条连接 micro-usb cable between the PC and the PROG port of the board;另外一条 micro-usb cable between the PC and the UART port of the board,.打开Zedboard板的电源,打开电源之后POWER灯会亮;

1.选择Xilinx Tools-> Program FPGA来下载Bitstream ( this will take few seconds ).

2.右击oled_test 文件夹选择Run As->Run Configurations, 按如下图示配置,(注意STIDIO connection配置时端口号根据自己的电脑进行配置)。单击Apply,然后点击Run。即在ARM processor上运行oled_test application。

运行结果,在OLED屏幕上看到以下消息:

至此,此实验完成。

尝试不同的排版写文档。

如果有同学想要OLED IP核就评论我吧

Xilinx Vivado的使用详细介绍(5):调用用户自定义封装的IP核的更多相关文章

  1. Xilinx Vivado的使用详细介绍(3):使用IP核

    ilinx Vivado的使用详细介绍(3):使用IP核 Author:zhangxianhe IP核(IP Core) Vivado中有很多IP核可以直接使用,例如数学运算(乘法器.除法器.浮点运算 ...

  2. Xilinx Vivado的使用详细介绍(1):创建工程、编写代码、行为仿真

    Xilinx Vivado的使用详细介绍(1):创建工程.编写代码.行为仿真 Author:zhangxianhe 新建工程 打开Vivado软件,直接在欢迎界面点击Create New Projec ...

  3. xilinx Vivado的使用详细介绍(2):创建工程、添加文件、综合、实现、管脚约束、产生比特流文件、烧写程序、硬件验证

    xilinx Vivado的使用详细介绍(2):创建工程.添加文件.综合.实现.管脚约束.产生比特流文件.烧写程序.硬件验证 Author:zhangxianhe 新建工程 打开Vivado软件,直接 ...

  4. Xilinx Vivado的使用详细介绍(4):Zedboard+vivado之流水灯(加SDK)

    Vivado+zedboard之初学流水灯 Author:zhangxianhe 环境:vivado 2016.3(已验证适用于2015.4) 开发板:Zedboard version xc7z020 ...

  5. Xilinx Vivado的使用详细介绍(2):综合、实现、管脚分配、时钟设置、烧写

    前面一篇介绍了从新建工程一直到编写代码进行行为仿真,这篇继续进行介绍. 修改器件型号 新建工程时选择过器件型号,如果新建好工程后需要修改型号,可以选择菜单Tools - Project Setting ...

  6. Vivado 调用自定义IP核

    关于Vivado如何创建自定义IP核有大量的参考文章,这里就不多加阐述了,本文目的主要是解决如何在新建工程中引用其它工程已经自定义封装好的IP核,从而实现自定义IP核的灵活复用. 举个例子,我们的目标 ...

  7. 从Xilinx FFT IP核到OFDM

    笔者在校的科研任务,需要用FPGA搭建OFDM通信系统,而OFDM的核心即是IFFT和FFT运算,因此本文通过Xilinx FFT IP核的使用总结给大家开个头,详细内容可查看官方文档PG109.关于 ...

  8. Vivado使用技巧(二):封装自己设计的IP核

    由 judyzhong 于 星期五, 09/08/2017 - 14:58 发表 概述   Vivado在设计时可以感觉到一种趋势,它鼓励用IP核的方式进行设计.“IP Integrator”提供了原 ...

  9. Vivado使用技巧:封装自己设计的IP核

    概述   Vivado在设计时可以感觉到一种趋势,它鼓励用IP核的方式进行设计.“IP Integrator”提供了原理图设计的方式,只需要在其中调用设计好的IP核连线.IP核一部分来自于Xilinx ...

随机推荐

  1. JMeter-正则表达式(Json中取value的部分值)

    2019-04-26问题:返回的json中提取短信验证码614930 { : "total":2, : "totalPage":1, : "rows& ...

  2. window系统下搭建本地的NuGet Server

    1. NuGet.Config文件所在的目录: C:\Users\xxx\AppData\Roaming\NuGet 2.将nupkg为结尾的文件放在 项目的Packages目录下.(注意是和web. ...

  3. kafka笔记9(监控)

    Kafka提供的所有度量指标都是通过JMX(Java Management Extensions)接口访问 JMX端口查询:  zookeeper上获取端口信息  /brokers/ids/<I ...

  4. memcached----------linux下安装memcached,以及php的memcached扩展。

    1.通过wget http://www.memcached.org/files/memcached-1.4.24.tar.gz下载最新源码2.解压tar -xf memcached-1.4.24.ta ...

  5. Object:所有类的超类

    Java中每个类都是由Object类扩展而来 1.equals方法 在Object类中,这个方法用于判断两个对象是否具有相同的引用,然而对于大多数类来说,经常需要检测两个对象状态的相等性. publi ...

  6. JDK8 HashMap--removeNode()移除节点方法

    /*删除节点*/ final Node<K,V> removeNode(int hash, Object key, Object value, boolean matchValue, bo ...

  7. jquery的输入框自动补全功能+ajax

    jquery的输入框自动补全功能+ajax 2017年05月10日 18:51:39 辣姐什么鬼 阅读数:1461 标签: web前端 更多 个人分类: web前端   内容参考网友文章写成,原博的链 ...

  8. Java -- 基于JDK1.8的ArrayList源码分析

    1,前言 很久没有写博客了,很想念大家,18年都快过完了,才开始写第一篇,争取后面每周写点,权当是记录,因为最近在看JDK的Collection,而且ArrayList源码这一块也经常被面试官问道,所 ...

  9. [python 练习] 计算个税

    题目:利用python计算个税 说明:python有序字典的使用 代码: # -*- coding: utf-8 -*- from collections import OrderedDict # 税 ...

  10. 【编程基础】C语言常见宏定义

    我们在使用C语言编写程序的时候,常常会使用到宏定义以及宏编译指令,有的可能比较常用,有的可能并不是很常用,是不是所有的C语言宏定义以及宏指令你都清楚呢? 指令 用途详细介绍 # 空指令,无任何效果 # ...