当前位置: 首页 > article >正文

ZYNQ初识13(zynq_7020)hdmi和串口板载功能的验证

(1)另:首先需要确认供电模块,电压转换模块没有问题,测量后上电防止出现短路。通过vivado下载bit流文件检测JTAG下载口是否正常,如可正常检测,才可进行下一步验证。

(2)以下,验证焊接好后的板子hdmi和usb转串口的功能中,hdmi是纯PL端调用(由核心板晶振50Mhz提供时钟)而串口打印功能由于不需要时序,只需要检测板子的串口和PC端是否可以正常收发,所以只需要调用PS端即可,不需要在PL端编写任何程序。

(3)下面是对应hdmi和usb转串口的功能实现的程序和对应的运行结果:

hdmi顶层TOP模块:

module top(input sys_clk,output hdmi_oen,output TMDS_clk_n,output TMDS_clk_p,output [2:0]TMDS_data_n,output [2:0]TMDS_data_p
);
wire video_clk;
wire video_clk_5x;
wire video_hs;
wire video_vs;
wire video_de;
wire[7:0] video_r;
wire[7:0] video_g;
wire[7:0] video_b;color_bar hdmi_color_bar(.clk(video_clk),.rst(1'b0),.hs(video_hs),.vs(video_vs),.de(video_de),.rgb_r(video_r),.rgb_g(video_g),.rgb_b(video_b)
);video_clock video_clock_m0
(// Clock in ports.clk_in1(sys_clk),// Clock out ports.clk_out1(video_clk),.clk_out2(video_clk_5x),// Status and control signals.reset(1'b0),.locked());rgb2dvi_0 rgb2dvi_m0 (// DVI 1.0 TMDS video interface.TMDS_Clk_p(TMDS_clk_p),.TMDS_Clk_n(TMDS_clk_n),.TMDS_Data_p(TMDS_data_p),.TMDS_Data_n(TMDS_data_n),.oen(hdmi_oen),//Auxiliary signals .aRst_n(1'b1), //-asynchronous reset; must be reset when RefClk is not within spec// Video in.vid_pData({video_r,video_g,video_b}),.vid_pVDE(video_de),.vid_pHSync(video_hs),.vid_pVSync(video_vs),.PixelClk(video_clk),.SerialClk(video_clk_5x)// 5x PixelClk
); endmodule

hdmi顶层colorbar,彩条发生模块: 

//*************************************************************************\
//==========================================================================
//   Description:
//  彩条发生模块
//==========================================================================
//   Revision History:
//	Date		  By			Revision	Change Description
//--------------------------------------------------------------------------
//2013/5/7                     1.2         remove some warning
//2013/4/18                    1.1         vs timing
//2013/4/16	        		   1.0			Original
//*************************************************************************/
module color_bar(input clk,            //像素时钟输入,1280x720@60P的像素时钟为74.25input rst,            //复位,高有效output hs,            //行同步、高有效output vs,            //场同步、高有效output de,            //数据有效output[7:0] rgb_r,    //像素数据、红色分量output[7:0] rgb_g,    //像素数据、绿色分量output[7:0] rgb_b     //像素数据、蓝色分量
);
/*********视频时序参数定义******************************************/
parameter H_ACTIVE = 16'd1280;  //行有效长度(像素时钟周期个数)
parameter H_FP = 16'd110;       //行同步前肩长度
parameter H_SYNC = 16'd40;      //行同步长度
parameter H_BP = 16'd220;       //行同步后肩长度
parameter V_ACTIVE = 16'd720;   //场有效长度(行的个数)
parameter V_FP 	= 16'd5;        //场同步前肩长度
parameter V_SYNC  = 16'd5;      //场同步长度
parameter V_BP	= 16'd20;       //场同步后肩长度//parameter H_ACTIVE = 16'd1920;
//parameter H_FP = 16'd88;
//parameter H_SYNC = 16'd44;
//parameter H_BP = 16'd148; 
//parameter V_ACTIVE = 16'd1080;
//parameter V_FP 	= 16'd4;
//parameter V_SYNC  = 16'd5;
//parameter V_BP	= 16'd36;
parameter H_TOTAL = H_ACTIVE + H_FP + H_SYNC + H_BP;//行总长度
parameter V_TOTAL = V_ACTIVE + V_FP + V_SYNC + V_BP;//场总长度
/*********彩条RGB color bar颜色参数定义*****************************/
parameter WHITE_R 		= 8'hff;
parameter WHITE_G 		= 8'hff;
parameter WHITE_B 		= 8'hff;
parameter YELLOW_R 		= 8'hff;
parameter YELLOW_G 		= 8'hff;
parameter YELLOW_B 		= 8'h00;                              	
parameter CYAN_R 		= 8'h00;
parameter CYAN_G 		= 8'hff;
parameter CYAN_B 		= 8'hff;                             	
parameter GREEN_R 		= 8'h00;
parameter GREEN_G 		= 8'hff;
parameter GREEN_B 		= 8'h00;
parameter MAGENTA_R 	= 8'hff;
parameter MAGENTA_G 	= 8'h00;
parameter MAGENTA_B 	= 8'hff;
parameter RED_R 		= 8'hff;
parameter RED_G 		= 8'h00;
parameter RED_B 		= 8'h00;
parameter BLUE_R 		= 8'h00;
parameter BLUE_G 		= 8'h00;
parameter BLUE_B 		= 8'hff;
parameter BLACK_R 		= 8'h00;
parameter BLACK_G 		= 8'h00;
parameter BLACK_B 		= 8'h00;
reg hs_reg;//定义一个寄存器,用于行同步
reg vs_reg;//定义一个寄存器,用户场同步
reg hs_reg_d0;//hs_reg一个时钟的延迟//所有以_d0、d1、d2等为后缀的均为某个寄存器的延迟
reg vs_reg_d0;//vs_reg一个时钟的延迟
reg[11:0] h_cnt;//用于行的计数器
reg[11:0] v_cnt;//用于场(帧)的计数器
reg[11:0] active_x;//有效图像的的坐标x
reg[11:0] active_y;//有效图像的坐标y
reg[7:0] rgb_r_reg;//像素数据r分量
reg[7:0] rgb_g_reg;//像素数据g分量
reg[7:0] rgb_b_reg;//像素数据b分量
reg h_active;//行图像有效
reg v_active;//场图像有效
wire video_active;//一帧内图像的有效区域h_active & v_active
reg video_active_d0;
assign hs = hs_reg_d0;
assign vs = vs_reg_d0;
assign video_active = h_active & v_active;
assign de = video_active_d0;
assign rgb_r = rgb_r_reg;
assign rgb_g = rgb_g_reg;
assign rgb_b = rgb_b_reg;
always@(posedge clk or posedge rst)
beginif(rst)beginhs_reg_d0 <= 1'b0;vs_reg_d0 <= 1'b0;video_active_d0 <= 1'b0;endelsebeginhs_reg_d0 <= hs_reg;vs_reg_d0 <= vs_reg;video_active_d0 <= video_active;end
endalways@(posedge clk or posedge rst)
beginif(rst)h_cnt <= 12'd0;else if(h_cnt == H_TOTAL - 1)//行计数器到最大值清零h_cnt <= 12'd0;elseh_cnt <= h_cnt + 12'd1;
endalways@(posedge clk or posedge rst)
beginif(rst)active_x <= 12'd0;else if(h_cnt >= H_FP + H_SYNC + H_BP - 1)//计算图像的x坐标active_x <= h_cnt - (H_FP[11:0] + H_SYNC[11:0] + H_BP[11:0] - 12'd1);elseactive_x <= active_x;
endalways@(posedge clk or posedge rst)
beginif(rst)v_cnt <= 12'd0;else if(h_cnt == H_FP  - 1)//在行数计算器为H_FP - 1的时候场计数器+1或清零if(v_cnt == V_TOTAL - 1)//场计数器到最大值了,清零v_cnt <= 12'd0;elsev_cnt <= v_cnt + 12'd1;//没到最大值,+1elsev_cnt <= v_cnt;
endalways@(posedge clk or posedge rst)
beginif(rst)hs_reg <= 1'b0;else if(h_cnt == H_FP - 1)//行同步开始了...hs_reg <= 1'b1;else if(h_cnt == H_FP + H_SYNC - 1)//行同步这时候要结束了hs_reg <= 1'b0;elsehs_reg <= hs_reg;
endalways@(posedge clk or posedge rst)
beginif(rst)h_active <= 1'b0;else if(h_cnt == H_FP + H_SYNC + H_BP - 1)h_active <= 1'b1;else if(h_cnt == H_TOTAL - 1)h_active <= 1'b0;elseh_active <= h_active;
endalways@(posedge clk or posedge rst)
beginif(rst)vs_reg <= 1'd0;else if((v_cnt == V_FP - 1) && (h_cnt == H_FP - 1))vs_reg <= 1'b1;else if((v_cnt == V_FP + V_SYNC - 1) && (h_cnt == H_FP - 1))vs_reg <= 1'b0;	elsevs_reg <= vs_reg;
endalways@(posedge clk or posedge rst)
beginif(rst)v_active <= 1'd0;else if((v_cnt == V_FP + V_SYNC + V_BP - 1) && (h_cnt == H_FP - 1))v_active <= 1'b1;else if((v_cnt == V_TOTAL - 1) && (h_cnt == H_FP - 1))v_active <= 1'b0;	elsev_active <= v_active;
endalways@(posedge clk or posedge rst)
beginif(rst)beginrgb_r_reg <= 8'h00;rgb_g_reg <= 8'h00;rgb_b_reg <= 8'h00;endelse if(video_active)if(active_x == 12'd0)beginrgb_r_reg <= WHITE_R;rgb_g_reg <= WHITE_G;rgb_b_reg <= WHITE_B;endelse if(active_x == (H_ACTIVE/8) * 1)beginrgb_r_reg <= YELLOW_R;rgb_g_reg <= YELLOW_G;rgb_b_reg <= YELLOW_B;end			else if(active_x == (H_ACTIVE/8) * 2)beginrgb_r_reg <= CYAN_R;rgb_g_reg <= CYAN_G;rgb_b_reg <= CYAN_B;endelse if(active_x == (H_ACTIVE/8) * 3)beginrgb_r_reg <= GREEN_R;rgb_g_reg <= GREEN_G;rgb_b_reg <= GREEN_B;endelse if(active_x == (H_ACTIVE/8) * 4)beginrgb_r_reg <= MAGENTA_R;rgb_g_reg <= MAGENTA_G;rgb_b_reg <= MAGENTA_B;endelse if(active_x == (H_ACTIVE/8) * 5)beginrgb_r_reg <= RED_R;rgb_g_reg <= RED_G;rgb_b_reg <= RED_B;endelse if(active_x == (H_ACTIVE/8) * 6)beginrgb_r_reg <= BLUE_R;rgb_g_reg <= BLUE_G;rgb_b_reg <= BLUE_B;end	else if(active_x == (H_ACTIVE/8) * 7)beginrgb_r_reg <= BLACK_R;rgb_g_reg <= BLACK_G;rgb_b_reg <= BLACK_B;endelsebeginrgb_r_reg <= rgb_r_reg;rgb_g_reg <= rgb_g_reg;rgb_b_reg <= rgb_b_reg;end			elsebeginrgb_r_reg <= 8'h00;rgb_g_reg <= 8'h00;rgb_b_reg <= 8'h00;end
endendmodule 

运行结果:

 USB转串口模块:

虽然只需要调用PS端的程序,但还是需要在PL端创建Block Design,根据block design中选择的功能进行例化,创建好bd文件后导出,随后launch SDK,跳转到PS端即可。

以下是PS端串口打印的程序和运行结果:

#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"
#include "sleep.h"int main()
{init_platform();while(1){for(int i = 0;i<=1000000;i++){printf("Hello World + %d",i);printf("\n\r");sleep(1);//cleanup_platform();}}

需要注意一个小问题:

两个串口打印函数的区别,print和printf:

#include "xil_printf.h"
//对应打印串口函数:printf,可以打印较为复杂的字符串结构。
#include <stdio.h>
//对应串口打印print 可以理解位printf的简化版,只能打印某些简单的字符串,如“hello world”等。

 

相关文章:

ZYNQ初识13(zynq_7020)hdmi和串口板载功能的验证

&#xff08;1&#xff09;另&#xff1a;首先需要确认供电模块&#xff0c;电压转换模块没有问题&#xff0c;测量后上电防止出现短路。通过vivado下载bit流文件检测JTAG下载口是否正常&#xff0c;如可正常检测&#xff0c;才可进行下一步验证。 &#xff08;2&#xff09;以…...

ollama下载的DeepSeek的模型(Model)文件在哪里?(C盘下)

目录 一、下载大模型&#xff08;DeepSeek&#xff09; 2. 安装 Ollama 3. 检查安装是否成功 二、拉取大模型&#xff08;DeepSeek&#xff09; 1. 打开命令行 2. 下载模型 3. 测试下载 4. 等待下载完成 三.模型存放路径 这个位置&#xff01;&#xff01; 在人工智能…...

docker的anythingllm和open-webui压缩包分享(国内镜像拉取,百度云压缩包分享)

文章目录 前言第一部分&#xff1a;镜像获取&#x1f680; 方式一&#xff1a;切换国内下载镜像✅1. 下载anythingllm✅ 2. 下载open-webui &#x1f680;方式二&#xff1a;下载我分享的百度云✅ anythingllm压缩包百度云链接❎ open-webui压缩包 第二部分&#xff1a;下载之后…...

树莓科技(成都)集团:如何铸就第五代产业园标杆

树莓科技&#xff08;成都&#xff09;集团铸就第五代产业园标杆&#xff0c;主要体现在以下几个方面&#xff1a; 精准定位与前瞻布局 树莓科技并非盲目扩张&#xff0c;而是精准锚定数字经济发展方向。以成都为起点&#xff0c;迅速构建起全国性的园区版图&#xff0c;体现…...

父组件中循环生成多个子组件时,有且只有最后一个子组件的watch对象生效问题及解决办法

提示&#xff1a;父组件中循环生成多个子组件时&#xff0c;有且只有最后一个子组件的watch对象生效问题及解决办法 文章目录 [TOC](文章目录) 前言一、问题二、解决方法——使用function函数代替箭头函数()>{}总结 前言 ‌‌‌‌‌问题&#xff1a;子组件用that解决watch无…...

《解锁Flutter:跨平台开发的未来之光》

《解锁Flutter&#xff1a;跨平台开发的未来之光》 Flutter&#xff1a;崭新时代的跨平台框架 在当今数字化浪潮中&#xff0c;移动应用已成为人们生活中不可或缺的一部分。无论是购物、社交、娱乐还是办公&#xff0c;我们都离不开各种手机应用。而在移动应用开发领域&#…...

求递增子序列LIS的两种方法

文章目录 前言一、普通动态规划&#xff08;DP&#xff09;求解LIS1.DP思路2.DP的状态定义与转移方程3.DP的时间与空间复杂度4.DP代码实现5.DP的图文示例 二、贪心 二分查找求解LIS1.思路分析2.贪心 二分的时间与空间复杂度 三. 模板题讲解1.洛谷B3637 最长上升子序列1.dp写法…...

【Linux篇】进程状态(僵尸进程,孤儿进程),优先级与调度机制

&#x1f4cc; 个人主页&#xff1a; 孙同学_ &#x1f527; 文章专栏&#xff1a;Liunx &#x1f4a1; 关注我&#xff0c;分享经验&#xff0c;助你少走弯路&#xff01; 文章目录 1. 前文铺垫理解内核链表 2. 进程状态2.1 进程状态查看2.2 僵尸进程2.3 僵尸进程危害2.4 孤儿…...

SAP-ABAP:CONV(显示类型转换符)关键字详解

SAP ABAP CONV 关键字详解 CONV 是 ABAP 7.40 版本引入的显式类型转换操作符&#xff0c;用于将表达式的结果强制转换为指定的数据类型。它提供了一种清晰且类型安全的方式处理数据转换&#xff0c;避免隐式转换的潜在风险。以下是其核心特性和应用场景的全面解析&#xff1a;…...

AI应用加速落地丨MaxKB正在被政府、公共事业、教育和医疗行业用户广泛采纳

2025年2月至3月上旬&#xff0c;伴随着各个行业接入并使用DeepSeek&#xff0c;MaxKB开源知识库问答系统正在被越来越多的行业用户所采纳&#xff0c;是人工智能行业落地的强应用。目前&#xff0c;MaxKB在政府、公共事业、教育和医疗四大行业已经拥有了众多典型案例&#xff0…...

⚡️Jolt -- 通过JSON配置来处理复杂数据转换的工具

简介&#xff1a;一个能够通过JSON配置&#xff08;特定的语法&#xff09;来处理复杂数据转换的工具。 比如将API响应转换为内部系统所需的格式&#xff0c;或者处理来自不同来源的数据结构差异。例如&#xff0c;将嵌套的JSON结构扁平化&#xff0c;或者重命名字段&#xff0…...

Django系列教程(7)——路由配置URLConf

目录 URLconf是如何工作的? path和re_path方法 更多URL配置示例 URL的命名及reverse()方法 使用命名URL 硬编码URL - 不建议 URL指向基于类的视图(View) 通过URL传递额外的参数 小结 Django的项目文件夹和每个应用(app)目录下都有urls.py文件&#xff0c;它们构成了D…...

TDengine SQL 函数

单行函数 数学函数 ABSACOSASINATANCEILCOSDEGREESEXPFLOORGREATESTLEASTLNLOGMODPIPOWRADIANSRANDROUNDSIGNSINSQRTTANTRUNCATE 字符串函数 ASCIICHARCHAR_LENGTHCONCATCONCAT_WSLENGTHLOWERLTRIMPOSITIONREPEATREPLACERTRIMSUBSTRING/SUBSTRSUBSTRING_INDEXTRIMUPPER 转换函数…...

二维数组基础

在 C 语言中,二维数组是一种数据结构,它可以存储表格形式的数据,或是矩阵形式的数据。二维数组可以被看作是一个包含多个一维数组的数组,因此它有两个维度:行和列。 1. 二维数组的定义与声明 在 C 语言中,二维数组的定义形式如下: data_type array_name[rows][column…...

2024年第十五届蓝桥杯软件C/C++大学A组——五子棋对弈

蓝桥杯原题&#xff1a; 题目描述&#xff1a; “在五子棋的对弈中&#xff0c;友谊的小船说翻就翻&#xff1f; ” 不&#xff01;对小蓝和小桥来说&#xff0c;五子棋不仅是棋盘上的较量&#xff0c;更是心与心之间的沟通。这两位挚友秉承着 “ 友谊第一&#xff0c;比赛第二…...

复试难度解析,西电先进材料与纳米科技学院学院考研录取情况

01、先进材料与纳米科技学院各个方向 02、24先进材料与纳米科技学院近三年复试分数线对比 PS&#xff1a;材料院24年院线学硕方向降低10分&#xff0c;专硕上涨15分&#xff1b;材料院在分数线相对于其他211、985院校对比来看&#xff0c;依然分数偏低&#xff0c;推荐大家关注…...

Deepseek Chatgpt Kimi 推荐的深度学习书单

朋友让推荐一些深度学习的书&#xff0c;让 Deepseek、Chatgpt、Kimi 分别生成了一份书单并做了对比&#xff0c;记录一下以备以后用到。 Chatgpt 推荐的深度学习书 1. chatgpt 推荐的书目截图 1.2 Chatgpt 推荐的深度学习书目文字版 如果你想学习 Deep Learning&#xff0…...

高频面试题(含笔试高频算法整理)基本总结回顾25

干货分享&#xff0c;感谢您的阅读&#xff01; &#xff08;暂存篇---后续会删除&#xff0c;完整版高频面试题基本总结回顾&#xff08;含笔试高频算法整理&#xff09;&#xff09; 备注&#xff1a;引用请标注出处&#xff0c;同时存在的问题请在相关博客留言&#xff0c…...

ClickHouse SQL优化:解锁高性能数据分析的关键

一、引言 1.1 ClickHouse的背景与优势 ClickHouse是一款高性能的列式数据库,专为在线分析处理(OLAP)场景设计。它以其卓越的读写性能、强大的数据压缩能力和灵活的SQL支持而闻名。ClickHouse能够轻松处理PB级数据,并在亚秒级内返回查询结果,这使其成为大数据分析领域的理…...

我与DeepSeek读《大型网站技术架构》(14)- 架构师领导艺术

文章目录 架构师领导艺术以人为本&#xff1a;激发团队潜能开放式协作&#xff1a;打破架构“所有权”壁垒妥协的艺术&#xff1a;聚焦核心目标成就他人&#xff1a;构建持续进化团队高效沟通&#xff1a;建立技术与人性的平衡 架构师领导艺术 本章聚焦架构师如何通过团队协作…...

mac安装mysql之后报错zsh: command not found: mysql !

在Mac上安装MySQL后&#xff0c;如果终端中找不到mysql命令&#xff0c;通常是 因为MySQL的命令行工具&#xff08;如mysql客户端&#xff09;没有被正确地添加到你的环境变量中。 检查 MySQL 是否已安装 ps -ef|grep mysql查看到路径在 /usr/local/mysql/bin 查看 .bash_pro…...

蓝桥杯备考:set容器用法(lower_bound)---营业额统计

如图所示&#xff0c;这道题的暴力解法就是枚举每天的营业额&#xff0c;让该营业额和前面的天的营业额依次相减取最小值这样的话我们的时间复杂度就是N平方&#xff0c;我们是很有可能超时的 所以我们选择用set容器的二分查找功能 我们每次遍历到一个数的时候&#xff0c;前…...

VSCode集成C语言开发环境

下载MinGW https://sourceforge.net/projects/mingw/ 点击download按钮下载exe文件到本地 点击exe文件安装 选择基础包和c编译版 vscode安装部分跳过 安装code runner和c/c插件 **(1) 创建 C 文件** 新建一个测试文件&#xff08;例如 hello.c&#xff09;&#xf…...

Python----数据可视化(pyecharts二:绘图一:条形图,直方图,折线图,散点图,箱图,饼图,热力图)

1、条形图 from pyecharts.charts import Bar from pyecharts.faker import Faker from pyecharts import options as opts # 绘制柱状图 bar (Bar() # 创建柱状图.add_yaxis("商家A", Faker.values(),colorFaker.rand_color()) # 添加数据.add_yaxis("商家B&…...

Training-free Neural Architecture Search for RNNs and Transformers(预览版本)

摘要 神经架构搜索 (NAS) 允许自动创建新的有效神经网络架构&#xff0c;为手动设计复杂架构的繁琐过程提供了替代方案。然而&#xff0c;传统的 NAS 算法速度慢&#xff0c;需要大量的计算能力。最近的研究调查了图像分类架构的无训练 NAS 指标&#xff0c;大大加快了搜索算…...

Linux机器之间排查网络连通问题

网络连通性排查步骤&#xff08;基于五层模型&#xff09; 以下按照网络五层架构&#xff0c;从底层到高层逐层排查&#xff0c;并分别列出Ubuntu和CentOS对应的命令。 1. 物理层 排查点&#xff1a;网线、网卡状态、物理连接。 命令&#xff08;通用&#xff09;&#xff1a…...

计算机考研C语言

C语言程序设计从入门到精通【2025完整版】考研复试 嵌入式 计算机二级 软考 专升本也适用_哔哩哔哩_bilibili 1、第一个C程序 helloC #include <stdio.h>int main(){printf("hehe");return 0;}每个C语言程序不管有多少行代码&#xff0c;都是从main函数开始执…...

【MySQL】(4) 表的操作

一、创建表 语法&#xff1a; 示例&#xff1a; 生成的数据目录下的文件&#xff1a; 二、查看表结构 三、修改表 语法&#xff1a; 另一种改表名语法&#xff1a;rename table old_name1 to new_name1, old_name2 to new_name2; 示例&#xff1a; 四、删除表 语法&#xf…...

Qt 中实现自定义控件子类化

一、子类化关键步骤 ‌1、选择基类‌ 根据需求选择合适的 Qt 原生控件作为基类&#xff08;如 QWidget、QPushButton、QSpinBox 等&#xff09;&#xff0c;通过继承实现功能扩展‌。 ‌2、重写关键方法‌ ‌绘制逻辑‌&#xff1a;重写 paintEvent() 方法&#xff0c;使用 Q…...

[洛谷]P1123 取数游戏

最近准备蓝桥杯 一直在练搜索和图论hhh 题意 给定 n m n \times m nm的数字矩阵 可以取出若干数字 但是有限制 取出的两个数字不能在八联通方向上相邻 数据范围 1 ≤ N , M ≤ 6 &#xff0c; 1 ≤ T ≤ 20 1≤N,M≤6&#xff0c;1≤T≤20 1≤N,M≤6&#xff0c;1≤T≤20 思…...