VGA显示器字符显示

news2025/1/23 17:25:43

1.原理

64*64=256

2.1 Vga_pic.v

module Vga_pic(
	input wire			Vga_clk		,
	input wire 			sys_rst_n	,
	input wire [9:0]	pix_x		,
	input wire [9:0]	pix_y		,
	
	output reg [15:0]	pix_data
);

parameter 	CHAR_B_H=10'd192,
			CHAR_B_V=10'd208;

parameter	CHAR_W=10'd256,
			CHAR_H=10'd64;

parameter 	BLACK=16'h0000,
			GOLDEN=16'hFEC0;


wire [9:0]	char_x;
wire [9:0]	char_y;

reg [255:0] char [63:0];//表示有64个存储单元,每个单元存储的数据位宽是256

assign char_x=(((pix_x>=CHAR_B_H)&&(pix_x<CHAR_B_H+CHAR_W))
		&&((pix_y>=CHAR_B_V)&&(pix_y<CHAR_B_V+CHAR_H)))
		?(pix_x-CHAR_B_H):10'h3FF;

assign char_y=(((pix_x>=CHAR_B_H)&&(pix_x<CHAR_B_H+CHAR_W))
		&&((pix_y>=CHAR_B_V)&&(pix_y<CHAR_B_V+CHAR_H)))
		?(pix_y-CHAR_B_V):10'h3FF; 

always@(posedge Vga_clk)
	begin
		char[0]		<=256'h0000000000000000000000000000000000000000000000000000000000000000;	
		char[1]		<=256'h0000000000000000000000000000000000000000000000000000000000000000;
		char[2]		<=256'h0000000000000000000000000000000000000000000000000000000000000000;
		char[3]		<=256'h0000000000000000000000000000000000000000000000000000000000000000;
		char[4]		<=256'h0000000000000000000000000000000000000000070000000001C00040000000;
		char[5]		<=256'h000000000000000000000000000000000000000003E000000000F00078000000;
		char[6]		<=256'h000000000000000000000380000000000000060003E000000000F8007E000000;
		char[7]		<=256'h0000038000780000000003E0000000000000078001E000000000F0003E000000;
		char[8]		<=256'h00003FE003FE0000000001F00000000000000FC001E000000000F0003C000000;
		char[9]		<=256'h0007FFF07F3F0000000001F00000000000001F8001C000000000F0003C000000;
		char[10]	<=256'h07FF81F7F83E0000000001F00000000000003E0001C000000000E0003C000000;
		char[11]	<=256'h03E1C1E1C0780000000001E0000000000000780001C000000000E0003C000000;
		char[12]	<=256'h03C1C1E000700000000001E0000000000000E00001C000000000E00038000000;
		char[13]	<=256'h01C1C1E000E00000000000E0000000000003C001C1C000000000E00038000000;
		char[14]	<=256'h01C0C1C001C00000000000E00000000000077001F1C000000000E000387C0000;
		char[15]	<=256'h01C0FDC001800000000000E00180000000187800F1C000000000E0003FFC0000;
		char[16]	<=256'h00E7F9C07B000000000000E001E000000000700071C000000000E0007FF00000;
		char[17]	<=256'h00FFC1803E000000000001E001F000000000700011C000000000E007FFC00000;
		char[18]	<=256'h00E0C1801F000000000001E003F800000000700001C000000000FF1FFE000000;
		char[19]	<=256'h00E0C3800F000000000001E003F80000000033C001C00000000FFE0FF8000000;
		char[20]	<=256'h0060C38007038000000401C007C0000000003FE001C0000000FFF00030000000;
		char[21]	<=256'h0060C700013FE000000701C00F0000000001FE0781C0000000FFE00030000000;
		char[22]	<=256'h0071FF0007FFF0000007C1C01C000000001FF003C1C000000000E00030000000;
		char[23]	<=256'h003FC200FF83F8000003E1C03800000003FF7001E1C000000000E00030000000;
		char[24]	<=256'h0030C07FF803F8000001E1C0E00000001FF8F000E1C000000000E00030000000;
		char[25]	<=256'h0000C03F9C03C0000001F1C1800000000FE0F00041C000000000E20033800000;
		char[26]	<=256'h0000C0000E0700000000F1C0000000000301F00001C0F8000000EC003FE00000;
		char[27]	<=256'h0000C4000F040000000061E0000000000003F80001DFFC000000F801FFE00000;
		char[28]	<=256'h0000FF000E000000000001E0000000000003FF0003FFFC000000F07FE3E00000;
		char[29]	<=256'h000FFE000E000000000003F000000000000777807FF800000001E07F03C00000;
		char[30]	<=256'h007FF0000E000000000003D800000000000E73BFFFC000000003E00003C00000;
		char[31]	<=256'h001EC000060000000000039C00000000001C707FE1C000000007E00003800000;
		char[32]	<=256'h0000C000060000000000038C00000000001C700C01C00000001EE03C03800000;
		char[33]	<=256'h0000C0E00600000000000786000000000038700001C00000007CE01E03800000;
		char[34]	<=256'h0000CFC00600000000000707000000000070700001C0000001F8E00707000000;
		char[35]	<=256'h0000FE0006000000000007038000000000E0700001C000000FF0E00387000000;
		char[36]	<=256'h0007F0000700000000000F01C000000001C0700001C000000FC0E001C7000000;
		char[37]	<=256'h007F80000700000000000E01E00000000300700001C000000780E000EE000000;
		char[38]	<=256'h0FFE00000700000000001E00F00000000600700001C000000300E0007E000000;
		char[39]	<=256'h0FF000000700000000001C00780000000800700001C000000000E0003C000000;
		char[40]	<=256'h07C0000007000000000038003C0000001000700001C000000000E0007E000000;
		char[41]	<=256'h0100000007000000000078003F0000000000700001C000000000E000FF800000;
		char[42]	<=256'h00000000070000000000F0001F8000000000700001C000000000E001F7C00000;
		char[43]	<=256'h00000000070000000001E0000FE000000000700001C000000000E007C3F00000;
		char[44]	<=256'h00000000070000000003C00007F800000000F00001C00000001FE01F81FC0000;
		char[45]	<=256'h000000000F000000000F800007FE00000000F00001C000000007E0FC00FF8000;
		char[46]	<=256'h000000070F000000001E000003FFC0000000700001C000000003E3E0007FF000;
		char[47]	<=256'h00000003FF000000007C000001FFF8000000600001C000000001C000003FFC00;
		char[48]	<=256'h00000000FE00000001E00000007FF8000000600001C000000001C00000000000;
		char[49]	<=256'h000000007E00000003000000000000000000200001C000000000800000000000;
		char[50]	<=256'h000000003C000000000000000000000000000000018000000000000000000000;
		char[51]	<=256'h0000000038000000000000000000000000000000008000000000000000000000;
		char[52]	<=256'h0000000010000000000000000000000000000000008000000000000000000000;
		char[53]	<=256'h0000000000000000000000000000000000000000000000000000000000000000;
		char[54]	<=256'h0000000000000000000000000000000000000000000000000000000000000000;
		char[55]	<=256'h0000000000000000000000000000000000000000000000000000000000000000;
		char[56]	<=256'h0000000000000000000000000000000000000000000000000000000000000000;
		char[57]	<=256'h0000000000000000000000000000000000000000000000000000000000000000;
		char[58]	<=256'h0000000000000000000000000000000000000000000000000000000000000000;
		char[59]	<=256'h0000000000000000000000000000000000000000000000000000000000000000;
		char[60]	<=256'h0000000000000000000000000000000000000000000000000000000000000000;
		char[61]	<=256'h0000000000000000000000000000000000000000000000000000000000000000;
		char[62]	<=256'h0000000000000000000000000000000000000000000000000000000000000000;
		char[63]	<=256'h0000000000000000000000000000000000000000000000000000000000000000;
	end
	
always@(posedge Vga_clk or negedge sys_rst_n)
	if(sys_rst_n==1'b0)
		pix_data<=BLACK;
	else if(((pix_x>=CHAR_B_H-1'b1)&&(pix_x<CHAR_B_H+CHAR_W-1'b1))
		&&((pix_y>=CHAR_B_V)&&(pix_y<CHAR_B_V+CHAR_H))
		&&(char[char_y][10'd255-char_x]==1'b1))  //这里不能用坐标寄存器赋值,因为是时序逻辑,用坐标当条件会延迟一周期,数据和坐标不同步
		pix_data<=GOLDEN;
	else
		pix_data<=BLACK;
		
endmodule 
		

2.1.1 tb_Vga_ctrl.v

module tb_Vga_ctrl();

reg sys_clk;
reg sys_rst_n	;
wire [15:0] Pix_data	;

wire [9:0] Pix_x	  ;
wire [9:0] Pix_y    ;
wire [15:0]rgb	  ;
wire hsync    ;
wire vsync    ;
wire CLK_out	;	  
wire locked	   ;
wire rst_n;

initial 
	begin
		sys_clk=1'b1;
		sys_rst_n<=1'b0;
		#20
		sys_rst_n=1'b1;
	end	
	
assign rst_n=(sys_rst_n&&locked);

always#10 sys_clk=~sys_clk;

// always@(posedge CLK_out or negedge rst_n)
	// if(rst_n==1'b0)
		// Pix_data<=16'h0000;
	// else if (Pix_x>=10'd0&&Pix_x<=10'd639
				// &&Pix_y>=10'd0&&Pix_y<=10'd479)
		// Pix_data<=16'hffff;
	// else
		// Pix_data<=16'h0000;

defparam CLK_gen_inst.STATE=1'b1;	
		
Vga_ctrl Vga_ctrl_inst(
	.Vga_clk	(CLK_out)	,
	.sys_rst_n	(rst_n),
	.Pix_data	(Pix_data),
	             
	.Pix_x		(Pix_x		),
	.Pix_y		(Pix_y		),	
	.rgb		(rgb		)	,
	.hsync		(hsync		),
	.vsync      (vsync    )
);


CLK_gen CLK_gen_inst(
	.sys_clk	(sys_clk	)	,
	.sys_rst_n	(sys_rst_n	),
	             
	.CLK_out	(CLK_out	)	,
	.locked		(locked		)
);


Vga_pic Vga_pic_inst(
	.Vga_clk	(CLK_out)	,
	.sys_rst_n	(rst_n),
	.pix_x		(Pix_x),
	.pix_y		(Pix_y),
				
	.pix_data	(Pix_data)
);


endmodule

2.2  vga_char.v

module vga_char(
	input wire				sys_clk		,
	input wire 				sys_rst_n	,
	
	output wire [15:0]		rgb			,
	output wire 			hsync		,
	output wire 			vsync		
);

wire CLK_out;
wire locked;
wire rst;
wire [15:0]Pix_data   ;
wire [9:0]Pix_x	   ;
wire [9:0]Pix_y	   ;

assign rst=(locked&&sys_rst_n);

CLK_gen CLK_gen_inst(
	.sys_clk	(sys_clk)	,
	.sys_rst_n	(sys_rst_n),
			
	.CLK_out	(CLK_out)	,
	.locked		(locked)
);


Vga_pic Vga_pic_inst(
	.Vga_clk	(CLK_out)	,
	.sys_rst_n	(rst),
	.pix_x		(Pix_x),
	.pix_y		(Pix_y),
	
	.pix_data   (Pix_data)
);

Vga_ctrl Vga_ctrl_inst(
	.Vga_clk	(CLK_out)	,
	.sys_rst_n	(rst),
	.Pix_data	(Pix_data),
	
	.Pix_x		(Pix_x	),
	.Pix_y		(Pix_y	),	
	.rgb		(rgb	)	,
	.hsync		(hsync	),
	.vsync      (vsync )
);

endmodule

2.2.1 tb_vga_char.v

`timescale 1ns/1ns
module tb_vga_char();

reg sys_clk;
reg sys_rst_n;

wire [15:0] rgb	;
wire hsync  ;
wire vsync  ;

initial 
	begin
		sys_clk=1'b1;
		sys_rst_n<=1'b0;
		#20
		sys_rst_n=1'b1;
	end
	
always #10 sys_clk=~sys_clk;
defparam vga_char_inst.CLK_gen_inst.STATE=1'b1;

vga_char vga_char_inst(
	.sys_clk	(sys_clk)	,
	.sys_rst_n	(sys_rst_n),
	
	.rgb		(rgb)	,
	.hsync		(hsync),
	.vsync		(vsync)
);

endmodule

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1576108.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux从入门到精通 --- 4(上).快捷键、软件安装、systemctl、软链接、日期和时区、IP地址

文章目录 第四章(上)&#xff1a;4.1 快捷键4.1.1 ctrl c 强制停止4.1.2 ctrl d 退出4.1.3 history4.1.4 历史命令搜索4.1.5 光速移动快捷键4.1.6 清屏 4.2 软件安装4.2.1 yum4.2.2 apt 4.3 systemctl4.4 软链接4.4.1 ln 4.5 日期和时区4.5.1 date命令4.5.2 date进行日期加减…

阿里云服务器可以干嘛?阿里云服务器八大用途介绍

阿里云服务器可以干嘛&#xff1f;能干啥你还不知道么&#xff01;简单来讲可用来搭建网站、个人博客、企业官网、论坛、电子商务、AI、LLM大语言模型、测试环境等&#xff0c;阿里云百科aliyunbaike.com整理阿里云服务器的用途&#xff1a; 阿里云服务器活动 aliyunbaike.com…

怎么把学浪的视频保存到手机

越来越多的人在学浪app里面购买了课程并且想要下载下来&#xff0c;但是苦于没有方法或者工具&#xff0c;所以本文将教大家如何把学浪的视频保存到手机随时随地的观看&#xff0c;再也不用担心课程过期的问题。 本文将介绍工具来下载&#xff0c;因为下载方法太复杂&#xff…

Django检测到会话cookie中缺少HttpOnly属性手工复现

一、漏洞复现 会话cookie中缺少HttpOnly属性会导致攻击者可以通过程序(JS脚本等)获取到用户的cookie信息&#xff0c;造成用户cookie信息泄露&#xff0c;增加攻击者的跨站脚本攻击威胁。 第一步&#xff1a;复制URL&#xff1a;http://192.168.43.219在浏览器打开&#xff0c;…

Switch摇杆模块超好手感超小体积-适用于Arduino创客

Mini摇杆模块 1.模块照片 2.接线 摇杆模块的 G、V、X、Y 、SW分别连接 UNO 的G、V、A0、A1、D2引脚。 3.程序 /*rocker test- 摇杆测试This example code is in the public domain.Author : YFROBOT ZLWebsite : www.yfrobot.com.cnCreate Time: 2024 */#define XP…

自定义gitlog格式

git log命令非常强大而好用&#xff0c;在复杂系统的版本管理中扮演着重要的角色&#xff0c;但默认的git log命令显示出的东西实在太丑&#xff0c;不好好打扮一下根本没法见人&#xff0c;打扮好了用alias命令拍个照片&#xff0c;就正式出道了&#xff01; 在使用git查看lo…

CentOS7.9.2009安装elasticsearch7.11.1(单节点)

本文章使用CentOS7.9.2009服务器安装elasticsearch7.11.1软件 1.服务器信息 [root@elasticsearch ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [root@elasticsearch ~]# [root@elasticsearch ~]# cat /etc/hosts | grep elasticsearch 192.168.10.24…

消息队列MQ(面试题:为什么使用MQ)

一、什么是mq? MQ全称 Message Queue&#xff08;消息队列&#xff09;&#xff0c;是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信&#xff0c;解耦。 二、常见的mq产品 RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMq RabbitMQ: One broker …

34470A是德科技34470A数字万用表

181/2461/8938产品概述&#xff1a; Truevolt数字万用表&#xff08;34460A、34461A、34465A、34470A&#xff09;利用是德科技的新专利技术&#xff0c;使您能够快速获得见解、测量低功耗设备并保持校准的测量结果。Truevolt提供全方位的测量能力&#xff0c;具有更高的精度、…

Centos7源码方式安装Elasticsearch 7.10.2单机版

下载 任选一种方式下载 官网7.10.2版本下载地址&#xff1a; https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.2-linux-x86_64.tar.gz 网盘下载链接 链接&#xff1a;https://pan.baidu.com/s/1EJvUPGVOkosRO2PUaKibaA?pwdbnqi 提取码&#x…

mysqldump: Got error: 1049: Unknown database ‘root‘ when selecting the datab

1.问题描述 MySQL版本号&#xff1a;MySQL Server 8.3MySQL持久化到处数据库结构及数据 mysqldump: Got error: 1049: Unknown database root when selecting the datab2.问题解决 cmd 切换本地路径 cd /d D:\Program Files\MySQL\MySQL Server 8.3\bin执行数据库备份命令 …

【Linux系列】“dev-node1“ 运行的操作系统分析

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

avro c++编译与使用

一、arvo介绍 Avro 是 Hadoop 中的一个子项目&#xff0c;也是一个数据序列化系统&#xff0c;其数据最终以二进制格式&#xff0c;采用行式存储的方式进行存储。 Avro提供了&#xff1a; 1)、丰富的数据结构。 2)、可压缩、快速的二进制数据格式。 3)、一个用来存储持久化数据…

飞书文档如何在不同账号间迁移

今天由于个人需要新建了一个飞书账号&#xff0c;遇到个需求就是需要把老帐号里面的文档迁移到新的账号里面。在网上搜了一通&#xff0c;发现关于此的内容似乎不多&#xff0c;只好自己动手解决&#xff0c;记录一下过程以便分享&#xff0c;主要有以下几个步骤。 1. 添加新账…

如何使用Chainguard保护您的容器部署

你不需要说服我&#xff0c;容器绝对是虚拟化革命中最棒的东西。我几乎每天都会使用各种类型的容器。 但是&#xff0c;只需一次模板化并到处部署的美妙之处伴随着一个成本&#xff1a;如果模板中的一个单独层包含安全漏洞怎么办&#xff1f;如果那里藏着一个漏洞&#xff0c;…

golang web 开发 —— gin 框架 (gorm 链接 mysql)

目录 1. 介绍 2. 环境 3. gin 3.1 gin提供的常见路由 3.2 gin的分组 main.go router.go 代码结构 3.3 gin 提供的Json方法 main.go route.go common.go user.go order.go 3.4 gin框架下如何获取传递来的参数 第一种是GET请求后面直接 /拼上传递的参数 第二种是…

pandas去重、删除重复数据之duplicated()

pandas去重、删除重复数据之duplicated 1.pandas中重复索引问题2.pandas删除重复数据行3.drop_duplicates()函数的语法4.案例&#xff1a;pandas数据处理——取出重复数据 1.pandas中重复索引问题 df df[~df.index.duplicated()]2.pandas删除重复数据行 # 首先导入常用的两个…

AURORA64B66B IP核使用

文章目录 前言一、IP核配置二、设计框图三、上板效果总结 前言 前面我们基于GT 64B66B设计了自定义PHY层&#xff0c;并且也介绍过了基于AURORA8B18B IP核的使用&#xff0c;AURORA8B18B IP核的使用可以说是与AURORA8B18B IP核完全一致&#xff0c;可参考前文&#xff1a;http…

绝地求生:29.1版本爆料杜卡迪联名、新通行证、成长型AUG和异色、战队皮

这回的更新爆料是真的多&#xff0c;虽然不会同时上线&#xff0c;本期杜卡迪因为没有轮毂和轮胎&#xff0c;所以车漆的颜色可能会贵一点&#xff0c;但是似乎会有进阶优惠礼包可以购买 合作者战队 本期合作者战队皮肤感觉比较一般&#xff0c;武器不是热门武器&#xff0c;而…

项目:自主实现Boost搜索引擎

文章目录 写在前面开源仓库和项目上线其他文档说明 项目背景项目的宏观原理技术栈与环境搜索引擎原理正排索引倒排索引 去标签和数据清洗模块html文件名路径保存函数html数据解析函数文件写入函数 建立索引模块检索和读取信息建立索引建立正排索引建立倒排索引jieba工具的使用倒…