使用vivado进行zedboard的OLED测试(创建IP核)

OLED即有机发光二极管。在Zedboard开发板上实现OLED模块显示功能,通过PL部分的EMIO接口实现OLED所需的SPI接口,在PS中编写驱动程序,实现OLED显示功能。
OLED原理图如下
这里写图片描述

zedboard控制OLED的主要方法是:自己设计一个IP核,把OLED对应的6个控制引脚进行逻辑设计和约束,IP核通过AXI总线,把OLED对应的6个控制引脚和PS联系起来。通过PS编写相应的驱动程序,即可实现对OLED的控制。
OLED系统设计图如下:
这里写图片描述


环境:win7 64 vivado 2014.1
开发板:zedboard version d xc7z020clg484-1
串口软件:SecureCRT
目标:使用vivado进行zedboard的OLED测试。目的还是介绍vivado软硬件协同开发流程。
说明:原文有些地方比较模糊,新手易出错,故汇总了几个文档,整理出的。原文链接:
1. http://xilinx.eetrend.com/blog/7899#comment-2461 Vivado+Zedboard之OLED驱动
2. http://xilinx.eetop.cn/viewnews-2469 综合、实现、管脚分配、时钟设置、烧写
3. http://blog.chinaaet.com/cuter521/p/30962# 一步步艰难搞定OLED
4. http://blog.csdn.net/kobesdu/article/details/46988781 zedboard中OLED源代码
5. http://blog.chinaaet.com/yyiyy/p/39029# GPIO控制OLED

oled的驱动程序http://download.csdn.net/detail/shangguanyunlan/9686950
整个工程:http://download.csdn.net/detail/shangguanyunlan/9686980
本文将分为以下步骤:
1. 使用Vivado IDE创建一个工程,并创建IP核
2. 在Vivado中,创建block,添加约束xdc,validate、generate,最后导入到SDK中
3. 在SDK中新建工程,添加文件,编译。下载到ZedBoard上进行调试
4. 总结

1.使用Vivado IDE创建一个工程,并创建IP核
1)创建vivado工程,命名为oled,设置目录
这里写图片描述
2)选择RTL,勾选复选框,此次不指定文件。
这里写图片描述
3)选择zedboard开发板,完成工程创建。
这里写图片描述
4)Tools->create & package
这里写图片描述
5)选择AXI4方式
这里写图片描述
6)设置名称,以及其他参数。下面继续next,保持默认参数,修改也可以,看需要
这里写图片描述
7)选择edit IP。finish。(以上为vivado创建AXI IP的流程
这里写图片描述
8)此时已经建立了一个临时的工程,在完成后会自行删除
9)修改文件,创建端口和用户逻辑。双击oled_ip_v1_0.v文件,添加
output wire [5:0] OLED,
这里写图片描述
添加 .OLED(OLED),如下:
这里写图片描述

10)双击oled_ip_v1_0_S00_AXI.v文件,添加
output reg [5:0] OLED,
这里写图片描述
always @(*)
begin
OLED <= slv_reg0[5:0];
end
这里写图片描述

11)保存文件
12)在project manager面板中,选择Package IP,可以看到如下选项:
IP Identification:基本信息
IP Compatibility:.支持芯片
IP file Groups:文件管理;可选择“merge changes……”以更新文件
IP customization Parameters:
IP ports and interfaces:端口,可以更新、添加等
IP addressing and memory:地址分配
IP GUI Customization:GUI
Review and package:生成IP
这里写图片描述
13)无误后,选择Package IP生产IP。此时软件自动关闭。可在IP catalog的下属文件夹中找到了定义的IP。(以上为创建AXI IP的基本步骤
这里写图片描述
这里写图片描述
2.在Vivado中,创建block,添加约束xdc,validate、generate,最后导入到SDK中
14)创建一个block design,名称默认
这里写图片描述
15)添加IP:zynq,并run block automation,弹出框中选择ok
这里写图片描述
16)双击zynq,customize zynq:由于IP实际是使用GPIO进行传输的模块,很多功能并不需要
MIO:Memory Interfaces:勾掉Quad SPI
IO peripheral:保留uart用于串口通信;保留GPIO默认
application Processor Unit:勾掉Timer 0;
这里写图片描述
17)添加IP:oled_ip_0,run connection automation,弹出框中选择ok
18)鼠标移动到oled_ip_0->OLED[5:0],右击->make external。重新布局,得到最后的设计图。
这里写图片描述
19)查看地址,未分配则分配。地址很重要,后面软件设计要用到。
这里写图片描述
20)validate design
这里写图片描述
21)create wrapper。在design_1.bd上右击,选择create HDL wrapper。
22)添加约束。
注意:引脚查看硬件手册,注意和驱动中的定义相匹配:
这里写图片描述
添加约束文件,即:IO口配置(I/O Planning)/编辑约束文件(Edit Constraints Sets)
做好的模块,在烧写进板子之前,需要设置输入输出信号与板子上IO口的对应关系。
IO口设置有两种方法,第一种是直接创建并编辑约束文件,第二种是在图形界面进行设置。具体可参考:http://xilinx.eetop.cn/viewnews-2469(本文采取的后者)
添加的约束文件如下:
这里写图片描述
23)选择generate bitstream。提示保存则保存,弹出对话框选择ok。完成后选择open implement design。
24)打开design,file->export->export for SDK.勾选启动SDK。(以上为vivado硬件设计流程,下面转入SDK进行软件设计)
3. 在SDK中新建工程,添加文件,编译。下载到ZedBoard上进行调试
25) 新建工程,选择空模板。
这里写图片描述
26)oled->src,右击选择import,选择general->file system,选择font.h、oled.h、oled.c、helloworld.c等文件。【开头附有这几个文件的连接,自己下载的前三个,helloworld.c文件是笔者自己写的,见文末,不知道原文作者哪里导入的】
oled.h中,原本“#define OLED_BASE_ADDR 0X7a800000”改为“#define OLED_BASE_ADDR XPAR_OLED_IP_0_S00_AXI_BASEADDR”。
这样就不用每次修改地址了,vivado中分配的地址会自动保存在xparameter.h中。
这里写图片描述
27)自动编译,出现下图,说明编译成功。如果有错误则修改之。(一般肯能使头文件的问题,按照提示修改即可)
这里写图片描述
28)连接开发板,J14用于串口通信,J17用于烧写程序。安装驱动的方法这里就不介绍了,参考之前的文章。
29)上电,连接SecureCRT,选择Xilinx Tools->Program FPGA。program,开发板上的蓝灯亮说明烧写成功。
这里写图片描述
30)运行程序。oled(project)右击选择run as->launch on harddware(GDB)或者直接Run->run.可以看到串口打印的信息和OLED上的信息显示
这里写图片描述

4. 总结

本文主要包括IP核的创建、vivado硬件设计、SDK软件设计,实现了对zedboard的OLED的驱动。SDK中的字库设计、OLED驱动程序则是直接调用,最终实现了OLED的驱动。本文仅仅是将vivado+zedboard软硬件设计流程跑通,未分析驱动程序。感兴趣者可以结合SSD1306 datasheet阅读程序。

主函数:

helloworld.c:

#include <stdio.h>
//#include "platform.h"
#include "xil_types.h"
#include "xparameters.h"
//#include "xgpiops.h"
//#include "xil_io.h"
#include "oled.h"

int main(void)
{
     //init_platform();
     print("##### Application Starts #####\n\r");
     OLED_Init();

     //press btn8 to start Demo
     OLED_ShowString(0,0, "BTN8 to start");
     OLED_Refresh_Gram();


     //OLED_Clear();

     //cleanup_platform();

     return 0;
}
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值