Vivado+Zedboard之OLED驱动

http://xilinx.eetrend.com/blog/7899

环境:win7 64 vivado 2014.1
开发板:zedboard version d xc7z020clg484-1
串口软件:SecureCRT
目标:使用vivado进行zedboard的OLED测试。目的还是介绍vivado软硬件协同开发流程。
说明:本文参考cuter的博客采用创建IP 的实现方案,并得到了本人的指导,表示十分感谢!

正文:
本文将分为以下步骤:
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创建AXIIP的流程)

8)此时已经建立了一个临时的工程,在完成后会自行删除
9
)修改文件,创建端口和用户逻辑。双击oled_ip_v1_0.v文件,添加
output wire [5:0] 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)添加约束。添加文件oled.xdc

注意:引脚查看硬件手册,注意和驱动中的定义相匹配。

# U11 <-> OLED-VBAT
# U12 <-> OLED-VDD
# U9 <-> OLED-RES
# U10 <-> OLED-DC
# AB12 <-> OLED-SCLK
# AA12 <-> OLED-SDIN

# OLED_DC 0 OLED[0] <-> U10
# OLED_RES 1 OLED[1] <-> U9
# OLED_SCLK 2 OLED[2] <-> AB12
# OLED_SDIN 3 OLED[3] <-> AA12
# OLED_VBAT 4 OLED[4] <-> U11
# OLED_VDD 5 OLED[5] <-> U12

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等文件。

oled.h中,原本“#defineOLED_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 onharddware(GDB)或者直接Run->run.可以看到串口打印的信息和OLED上的信息显示。



4. 总结

本文主要包括IP核的创建、vivado硬件设计、SDK软件设计,实现了对zedboard的OLED的驱动。本文在参考cuter大神的博客的基础上进行了IP核的设计、硬件设计,并在cuter帮助下完成了xdc设计。SDK中的字库设计、OLED驱动程序则是直接调用,最终实现了OLED的驱动。有兴趣者可在main函数中,修改“u8 s[]="HELLO OLED!";”即可显示自己想要的文字。本文仅仅是将vivado+zedboard软硬件设计流程跑通,未分析驱动程序。感兴趣者可以结合SSD1306datasheet阅读程序。

 

你可能感兴趣的:(Vivado+Zedboard之OLED驱动)