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

VGA显示器字符显示

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个存储单元,每个单元存储的数据位宽是256assign 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)beginchar[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;endalways@(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;elsepix_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 beginsys_clk=1'b1;sys_rst_n<=1'b0;#20sys_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 beginsys_clk=1'b1;sys_rst_n<=1'b0;#20sys_rst_n=1'b1;endalways #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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • GitHub教程:最新如何从GitHub上下载文件(下载单个文件或者下载整个项目文件)之详细步骤讲解(图文教程)
  • stable-diffusion-webui怎么样增加自己训练的LoRA模型?
  • HTTP/1.0、HTTP/1.1、HTTP/2.0、HTTP3.0的区别
  • 前端开发之el-table(vue2中)固定列fixed滚动条被固定列盖住
  • UniApp 应用发布到苹果商店指南
  • 使用卷积神经网络(CNN)识别验证码
  • 【网站项目】在线办公小程序
  • VSCode配置AI自动补全插件Tabnine
  • Cherno CPP学习笔记-01-背景知识
  • 云原生周刊:2024 年 K8s 基准报告 | 2024.4.8
  • css实现各级标题自动编号
  • 区块链技术与数字身份:解析Web3的身份验证系统
  • LeetCode笔记——1042.不邻接植花
  • AWS 给IAM用户分配——允许使用 MFA,自行管理自己的密码、访问密钥和 SSH 公有密钥的权限
  • 不使用 Docker 构建 Triton 服务器并在 Google Colab 平台上部署 HuggingFace 模型
  • 【Leetcode】101. 对称二叉树
  • 收藏网友的 源程序下载网
  • [LeetCode] Wiggle Sort
  • 08.Android之View事件问题
  • 10个最佳ES6特性 ES7与ES8的特性
  • Angular数据绑定机制
  • centos安装java运行环境jdk+tomcat
  • HashMap ConcurrentHashMap
  • Idea+maven+scala构建包并在spark on yarn 运行
  • java中具有继承关系的类及其对象初始化顺序
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • MySQL用户中的%到底包不包括localhost?
  • Node 版本管理
  • Sass 快速入门教程
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 闭包,sync使用细节
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 翻译:Hystrix - How To Use
  • 分享一份非常强势的Android面试题
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 智能合约Solidity教程-事件和日志(一)
  • 你对linux中grep命令知道多少?
  • 函数计算新功能-----支持C#函数
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • # wps必须要登录激活才能使用吗?
  • ## 1.3.Git命令
  • ###项目技术发展史
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #vue3 实现前端下载excel文件模板功能
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (5)STL算法之复制
  • (BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)
  • (Git) gitignore基础使用
  • (Java入门)抽象类,接口,内部类
  • (js)循环条件满足时终止循环
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (二)原生js案例之数码时钟计时
  • (分享)自己整理的一些简单awk实用语句