ZedBoard教程PS篇(6):搭建VDMA显示通路,通过VGA输出显示图片
开发板环境:vivado2017.4
开发板:Zedboard 芯片型号:xc7z020clg484-1
VGA显示硬件
新建工程vivado工程(如果不会可以参考前面的hello_world这章)
新建Block工作区
调用zynq核
双击ZYNQ核,选择Presets-->Apply Configuration导入tcl配置文件
选择vdma_vga.tcl并点击OK,导入配置文件
配置完成后如下图所示
需调用的所有IP核
VDMA设置
设置VGA时钟和VTC,分辨率设置为1920*1080,频率为148.5M
设置时钟
设置V_TC分辨率
设置Video out
顶层文件
//Copyright 1986-2017 Xilinx, Inc. All Rights Reserved.
//--------------------------------------------------------------------------------
//Tool Version: Vivado v.2017.4 (win64) Build 2086221 Fri Dec 15 20:55:39 MST 2017
//Date : Sun Sep 18 22:55:19 2022
//Host : PS2022UUIQUORW running 64-bit major release (build 9200)
//Command : generate_target design_1_wrapper.bd
//Design : design_1_wrapper
//Purpose : IP block netlist
//--------------------------------------------------------------------------------
`timescale 1 ps / 1 psmodule design_1_wrapper(DDR_addr,DDR_ba,DDR_cas_n,DDR_ck_n,DDR_ck_p,DDR_cke,DDR_cs_n,DDR_dm,DDR_dq,DDR_dqs_n,DDR_dqs_p,DDR_odt,DDR_ras_n,DDR_reset_n,DDR_we_n,FIXED_IO_ddr_vrn,FIXED_IO_ddr_vrp,FIXED_IO_mio,FIXED_IO_ps_clk,FIXED_IO_ps_porb,FIXED_IO_ps_srstb,vga_r,vga_g,vga_b,vga_hs,vga_vs);inout [14:0]DDR_addr;inout [2:0]DDR_ba;inout DDR_cas_n;inout DDR_ck_n;inout DDR_ck_p;inout DDR_cke;inout DDR_cs_n;inout [3:0]DDR_dm;inout [31:0]DDR_dq;inout [3:0]DDR_dqs_n;inout [3:0]DDR_dqs_p;inout DDR_odt;inout DDR_ras_n;inout DDR_reset_n;inout DDR_we_n;inout FIXED_IO_ddr_vrn;inout FIXED_IO_ddr_vrp;inout [53:0]FIXED_IO_mio;inout FIXED_IO_ps_clk;inout FIXED_IO_ps_porb;inout FIXED_IO_ps_srstb;output vga_hs;output vga_vs;output [3:0] vga_r;output [3:0] vga_g;output [3:0] vga_b;wire [14:0]DDR_addr;wire [2:0]DDR_ba;wire DDR_cas_n;wire DDR_ck_n;wire DDR_ck_p;wire DDR_cke;wire DDR_cs_n;wire [3:0]DDR_dm;wire [31:0]DDR_dq;wire [3:0]DDR_dqs_n;wire [3:0]DDR_dqs_p;wire DDR_odt;wire DDR_ras_n;wire DDR_reset_n;wire DDR_we_n;wire FIXED_IO_ddr_vrn;wire FIXED_IO_ddr_vrp;wire [53:0]FIXED_IO_mio;wire FIXED_IO_ps_clk;wire FIXED_IO_ps_porb;wire FIXED_IO_ps_srstb;wire vid_active_video;wire vid_clk;wire [23:0]vid_data;wire vid_hsync;wire vid_vsync;assign vga_hs = ~vid_hsync;assign vga_vs = ~vid_vsync;assign vga_r = (vid_active_video)? vid_data[23:20]: 4'd0;assign vga_g = (vid_active_video)? vid_data[15:12]: 4'd0;assign vga_b = (vid_active_video)? vid_data[7:4] : 4'd0;design_1 design_1_i(.DDR_addr(DDR_addr),.DDR_ba(DDR_ba),.DDR_cas_n(DDR_cas_n),.DDR_ck_n(DDR_ck_n),.DDR_ck_p(DDR_ck_p),.DDR_cke(DDR_cke),.DDR_cs_n(DDR_cs_n),.DDR_dm(DDR_dm),.DDR_dq(DDR_dq),.DDR_dqs_n(DDR_dqs_n),.DDR_dqs_p(DDR_dqs_p),.DDR_odt(DDR_odt),.DDR_ras_n(DDR_ras_n),.DDR_reset_n(DDR_reset_n),.DDR_we_n(DDR_we_n),.FIXED_IO_ddr_vrn(FIXED_IO_ddr_vrn),.FIXED_IO_ddr_vrp(FIXED_IO_ddr_vrp),.FIXED_IO_mio(FIXED_IO_mio),.FIXED_IO_ps_clk(FIXED_IO_ps_clk),.FIXED_IO_ps_porb(FIXED_IO_ps_porb),.FIXED_IO_ps_srstb(FIXED_IO_ps_srstb),.vid_active_video(vid_active_video),.vid_clk(vid_clk),.vid_data(vid_data),.vid_hsync(vid_hsync),.vid_vsync(vid_vsync));
endmodule
设置管脚约束
set_property PACKAGE_PIN V20 [get_ports {vga_r[0]}]
set_property PACKAGE_PIN U20 [get_ports {vga_r[1]}]
set_property PACKAGE_PIN V19 [get_ports {vga_r[2]}]
set_property PACKAGE_PIN V18 [get_ports {vga_r[3]}]
set_property PACKAGE_PIN AB22 [get_ports {vga_g[0]}]
set_property PACKAGE_PIN AA22 [get_ports {vga_g[1]}]
set_property PACKAGE_PIN AB21 [get_ports {vga_g[2]}]
set_property PACKAGE_PIN AA21 [get_ports {vga_g[3]}]
set_property PACKAGE_PIN Y21 [get_ports {vga_b[0]}]
set_property PACKAGE_PIN Y20 [get_ports {vga_b[1]}]
set_property PACKAGE_PIN AB20 [get_ports {vga_b[2]}]
set_property PACKAGE_PIN AB19 [get_ports {vga_b[3]}]set_property IOSTANDARD LVCMOS33 [get_ports {vga_r[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_r[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_r[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_r[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_g[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_g[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_g[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_g[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_b[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_b[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_b[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {vga_b[0]}]set_property PACKAGE_PIN AA19 [get_ports vga_hs]
set_property PACKAGE_PIN Y19 [get_ports vga_vs]
set_property IOSTANDARD LVCMOS33 [get_ports vga_hs]
set_property IOSTANDARD LVCMOS33 [get_ports vga_vs]
因v_tc产生的时序和vga时序有所不同,所以在顶层需要对hs和vs进行处理,并且输出数据需要使用vid_active_video信号进行使能
生成bit文件
导出硬件配置
打开SDK
新建fsbl
新建完成的fsbl
新建vdma_vga工程,选择刚刚新建的fsbl_bsp
现在hello_world 模板,点击Finish
新建的vdma_vga工程
在src下重新加入1080p.c图片数据文件和新的hello_world.c文件,hello_world文件为vdma的配置
hello_world文件代码,这里代码参考虚无缥缈vs威武的博客
/** Copyright (c) 2009-2012 Xilinx, Inc. All rights reserved.** Xilinx, Inc.* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" AS A* COURTESY TO YOU. BY PROVIDING THIS DESIGN, CODE, OR INFORMATION AS* ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION OR* STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION* IS FREE FROM ANY CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE* FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION.* XILINX EXPRESSLY DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO* THE ADEQUACY OF THE IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO* ANY WARRANTIES OR REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE* FROM CLAIMS OF INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY* AND FITNESS FOR A PARTICULAR PURPOSE.**//** helloworld.c: simple test application** This application configures UART 16550 to baud rate 9600.* PS7 UART (Zynq) is not initialized by this application, since* bootrom/bsp configures it to baud rate 115200** ------------------------------------------------* | UART TYPE BAUD RATE |* ------------------------------------------------* uartns550 9600* uartlite Configurable only in HW design* ps7_uart 115200 (configured by bootrom/bsp)*/#include <stdio.h>
#include "xparameters.h"
#include "xil_io.h"
#include "sleep.h"#define DDR_BASEADDR 0x00000000#define VDMA_BASEADDR XPAR_AXI_VDMA_0_BASEADDR
#define H_STRIDE 1920
#define H_ACTIVE 1920
#define V_ACTIVE 1080#define VIDEO_LENGTH (H_STRIDE*V_ACTIVE)
#define VIDEO_BASEADDR0 DDR_BASEADDR + 0x2000000
#define VIDEO_BASEADDR1 DDR_BASEADDR + 0x3000000
#define VIDEO_BASEADDR2 DDR_BASEADDR + 0x4000000//函数声明
void Xil_DCacheFlush(void);extern const unsigned char gImage_beijing[8294400];void show_img(u32 x, u32 y, u32 disp_base_addr, const unsigned char * addr, u32 size_x, u32 size_y)
{//计算图片 左上角坐标u32 i=0;u32 j=0;u32 r,g,b;u32 start_addr=disp_base_addr;start_addr = disp_base_addr + 4*x + y*4*H_STRIDE;for(j=0;j<size_y;j++){for(i=0;i<size_x;i++){b = *(addr+(i+j*size_x)*4+1);g = *(addr+(i+j*size_x)*4+2);r = *(addr+(i+j*size_x)*4+3);Xil_Out32((start_addr+(i+j*H_STRIDE)*4),((r<<24)|(g<<16)|(b<<8)|0x0));}}Xil_DCacheFlush();
}int main()
{//各种显示 相关的参数Xil_Out32((VDMA_BASEADDR + 0x000), 0x00000003); // enable circular modeXil_Out32((VDMA_BASEADDR + 0x05c), VIDEO_BASEADDR0); // start addressXil_Out32((VDMA_BASEADDR + 0x060), VIDEO_BASEADDR0); // start addressXil_Out32((VDMA_BASEADDR + 0x064), VIDEO_BASEADDR0); // start addressXil_Out32((VDMA_BASEADDR + 0x058), (H_STRIDE*4)); // h offset (1920 * 4) bytesXil_Out32((VDMA_BASEADDR + 0x054), (H_ACTIVE*4)); // h size (1920 * 4) bytesXil_Out32((VDMA_BASEADDR + 0x050), V_ACTIVE); // v size (1080)while(1){show_img(0,0,VIDEO_BASEADDR0,&gImage_beijing[0],1920,1080);}}
生成BOOT.bin文件
生成的BOOT.bin文件,将生成的BOOT.bin文件拷贝到SD卡里运行
开发板插上SD卡,上电后连接VGA接口
感觉颜色有点异常,但大致是显示了图片数据,需要对vga的数据打拍才能使颜色正常,先写到这里有时间再改下顶层时序
ZedBoard教程PS篇(6):搭建VDMA显示通路,通过VGA输出显示图片相关推荐
- ZedBoard教程PL篇(2):按键检测
开发板环境:vivado2017.4 开发板:Zedboard 芯片型号:xc7z020clg484-1 本章主要使用用verilog编写一个按键检测程序,按一次按键LED亮一次,依次点亮八个LED灯 ...
- 怎么把python结果全部显示-python – 如何展开输出显示以查看更多列?
更新:Pandas 0.23.4起 这不是必需的,如果设置pd.options.display.width = 0,pandas会自动检测终端窗口的大小.(对于旧版本,请参阅底部.) pandas.s ...
- 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二十七:TFT模块 - 显示
实验二十七:TFT模块 - 显示 所谓TFT(Thin Film Transistor)就是众多LCD当中,其中一种支持颜色的LCD,相较古老的点阵LCD(12864笑),它可谓高级了.黑金的TFT ...
- Mac 配置教程-开发篇
将 Mac 日常使用的软件和开发软件区分开,将之前写的 Mac 配置的文章分成了两篇: Mac 配置教程-日常篇 Mac 配置教程-开发篇 图床 iPic 设置快捷键 Command+Shift+u ...
- Win2003 服务器安装及设置教程 系统设置篇
Windows2003服务器安装及设置教程 系统设置篇,提高性能与安全系数. 本安装及设置教程适用于使用Windows2003为操作系统的服务器,目的是让服务器支持常见网络编程语言包括ASP.PHP. ...
- 教程 | 用安卓手机搭建 web 服务器(二)—— Nginx 安装配置
上一步完成了必要的软件安装,接下来需要在 Linux 系统上安装 nginx. Nginx("engine x")是一款是由俄罗斯的程序设计师 Igor Sysoev 所开发高性能 ...
- 电子报纸教程--部署篇
本篇内容是电子报纸从排版到上线的终篇:部署篇 前两期内容指路: 第一篇:四分钟入门报纸排版[方正飞腾] 第二篇:零基础学习电子报纸 本项目的所有代码已开源在码云上:https://gitee.com/ ...
- 博客系统项目:编码篇-基础篇-架构搭建
博客系统项目:编码篇-基础篇 1 背景 2 环境 2.1 环境说明 2.2 模式说明 2.2.1 MTV模式 2.2.2 MVC 3 前置工作 3.1 环境搭建 4 编码实现 4.1 项目调整 4.1 ...
- 教程 | 用安卓手机搭建 web 服务器(一)—— 应用安装配置
[2019.2.23 更新]:更新 BusyBox,Linux Deploy 软件 之前无意间看到了一篇<在安卓上部署服务器>的文章,正好最近换了新手机,正好最近在学 Python 和 H ...
最新文章
- 分享Kali Linux 2016.2第45周VMware虚拟机
- J2SE的30个基本概念
- 京瓷 打印 打印机 账户_UV打印机市场竞争的关键是什么?
- Kafka如何在千万级别时优化JVM GC问题?
- 这波操作,会把你的中间件架构带到另一个Level
- tmux与python虚拟环境问题
- 设计模式学习---单件模式
- Ionic Cordova实现软键盘的监听 以及操作大全
- matlab里的svmtrain的输出model里,各参数的含义
- MySQL必知必会(二)
- idea快捷键,可摆脱鼠标
- Linux开发板-串口连接成功后界面空白问题
- Metric study
- 分享多张图片到微信朋友圈
- 来自北京大学NOIP金牌选手yxc的常用代码模板1——基础算法
- 计算机设备更新理由,电脑硬件明明升级了,为什么速度还这么慢?四种原因在背后作怪!...
- 周鸿袆: 教您打造十页完美商业计划书(转载)
- C# DirectInput游戏手柄和键盘开发心得2(SharpDX版)
- 《赢在中国》精彩评语 2006年度
- 计算机二级后续操作基于此文件,2017年9月全国计算机等级考试二级MS-office高级应用考试预测题-2.pdf...