Verilog程序12、VGA显示字符
更新时间:2023-07-24 18:20:01 阅读量: 实用文档 文档下载
Verilog程序
本地地址:E:\FPGA\vedio\vga_char\src\vga_char.v
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 17:15:28 11/27/2010
// Design Name:
// Module Name: vga_char
// Project Name:
// Target Devices:
// Tool versions:
// Description:
// 在液晶上显示字符
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module vga_char(clk,rst_n,vsync,hsync,r,g,b);
input clk,rst_n;
output vsync,hsync;
output[2:0] r;
output[2:0] g;
output[1:0] b;
reg vsync,hsync;
reg[10:0] x_cnt;
reg[9:0] y_cnt;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////// 水平扫描参数的设定
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// parameter LinePeriod =12'd1040; //行同步周期
parameter H_SyncPulse=10'd120; //?型叫藕? parameter H_BackPorch=10'd61; //行同步后肩
parameter H_ActivePix=10'd806; //行同步数据有效
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Verilog程序
////////// 垂直扫描参数的设定
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// parameter FramePeriod=10'd666;
parameter V_SyncPulse=10'd6;
parameter V_BackPorch=10'd21;
parameter V_ActivePix=10'd604;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////// 水平扫描计数x_cnt只负责计数从0计数计到1040
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// always @ (posedge clk or negedge rst_n)
if(!rst_n) x_cnt <= 1; else if(x_cnt == LinePeriod) x_cnt <= 1;
else x_cnt <= x_cnt+ 1; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////// 水平扫描信号vsync产生 在0到120时为低电平
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// always @ (posedge clk or negedge rst_n)
if(!rst_n) hsync <= 1'b1;
else if(x_cnt == 1) hsync <= 1'b0; //产生hsync信号
else if(x_cnt == H_SyncPulse+1) hsync <= 1'b1;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////// 垂直扫描计数
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// always @ (posedge clk or negedge rst_n)
if(!rst_n) y_cnt <= 1; else if(y_cnt == FramePeriod) y_cnt <= 1;
else if(x_cnt == LinePeriod) y_cnt <= y_cnt+1;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////// 垂直扫描信号hsync产??
Verilog程序
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// always @ (posedge clk or negedge rst_n)
if(!rst_n) vsync <= 1'b1;
else if(y_cnt == 1) vsync <= 1'b0; //产生vsync信号
else if(y_cnt == V_SyncPulse+1) vsync <= 1'b1;
wire valid; //有效显示区标志
assign valid =
(x_cnt >= (H_SyncPulse+H_BackPorch)) &&
(x_cnt < (H_SyncPulse+H_BackPorch+H_ActivePix)) &&
(y_cnt >= (V_SyncPulse+V_BackPorch)) &&
(y_cnt < (V_SyncPulse+V_BackPorch+V_ActivePix));
wire[9:0] x_pos=x_cnt-H_SyncPulse-H_BackPorch;
wire[9:0] y_pos=y_cnt-V_SyncPulse-V_BackPorch;
//字符的字模
reg[7:0] vga_rgb;
/* 济(0) 大(1)
济
{0x00,0x80}, 00800100
{0x20,0x40}, 20400100
{0x17,0xFE}, 17fe0100
{0x12,0x08}, 12080100
{0x81,0x10}, 81100100
{0x40,0xA0}, 40a0fefe
{0x40,0x40}, 40400100
{0x11,0xB0}, 11b00100
{0x16,0x0E}, 160e0280
{0x21,0x10}, 21100280
{0xE1,0x10}, e1100440
{0x21,0x10}, 21100440
{0x21,0x10}, 21108020
{0x22,0x10}, 22101010
{0x22,0x10}, 22102008
{0x04,0x10}, 4010c006
大
{0x01,0x00},
{0x01,0x00},
Verilog程序
{0x01,0x00},
{0x01,0x00},
{0x01,0x00},
{0xFF,0xFE},
{0x01,0x00},
{0x01,0x00},
{0x02,0x80},
{0x02,0x80},
{0x04,0x40},
{0x04,0x40},
{0x08,0x20},
{0x10,0x10},
{0x20,0x08},
{0xC0,0x06},
*/
//此时的数字取模,如是汉字要第一个汉字的第一行加上第二个汉字的第一行。以此类推
parameter line0 = 32'h00800100,
line1 = 32'h20400100,
line2 = 32'h17fe0100,
line3 = 32'h12080100,
line4 = 32'h81100100,
line5 = 32'h40a0fefe,
line6 = 32'h40400100,
line7 = 32'h11b00100,
line8 = 32'h160e0280,
line9 = 32'h21100280,
linea = 32'he1100440,
lineb = 32'h21100440,
linec = 32'h21108020,
lined = 32'h22101010,
linee = 32'h22102008,
linef = 32'h4010c006;
//显示位数
reg[4:0] char_bit;
always @ (posedge clk or negedge rst_n)
if(!rst_n) char_bit <= 1'h1f;
else if(x_pos == 10'd384) char_bit <= 5'd32; //产生vsync信号
else if(x_pos > 10'd384 && x_pos <= 10'd416) char_bit <= char_bit - 1'b1;
Verilog程序
always @(posedge clk)
if(!valid)
vga_rgb <= 8'h00;
else if(x_pos > 10'd384 && x_pos <= 10'd416) begin
case(y_pos)
10'd292: if(line0[char_bit]) vga_rgb <= 8'b111_000_00;
else vga_rgb <= 8'b000_111_00;
10'd293: if(line1[char_bit]) vga_rgb <= 8'b111_000_00;
else vga_rgb <= 8'b000_111_00;
10'd294: if(line2[char_bit]) vga_rgb <= 8'b111_000_00;
else vga_rgb <= 8'b000_111_00;
10'd295: if(line3[char_bit]) vga_rgb <= 8'b111_000_00;
else vga_rgb <= 8'b000_111_00;
10'd296: if(line4[char_bit]) vga_rgb <= 8'b111_000_00;
else vga_rgb <= 8'b000_111_00;
10'd297: if(line5[char_bit]) vga_rgb <= 8'b111_000_00;
else vga_rgb <= 8'b000_111_00;
10'd298: if(line6[char_bit]) vga_rgb <= 8'b111_000_00;
else vga_rgb <= 8'b000_111_00;
10'd299: if(line7[char_bit]) vga_rgb <= 8'b111_000_00;
else vga_rgb <= 8'b000_111_00;
10'd300: if(line8[char_bit]) vga_rgb <= 8'b111_000_00;
else vga_rgb <= 8'b000_111_00;
10'd301: if(line9[char_bit]) vga_rgb <= 8'b111_000_00;
Verilog程序
else vga_rgb <= 8'b000_111_00;
10'd302: if(linea[char_bit]) vga_rgb <= 8'b111_000_00;
else vga_rgb <= 8'b000_111_00;
10'd303: if(lineb[char_bit]) vga_rgb <= 8'b111_000_00;
else vga_rgb <= 8'b000_111_00;
10'd304: if(linec[char_bit]) vga_rgb <= 8'b111_000_00;
else vga_rgb <= 8'b000_111_00;
10'd305: if(lined[char_bit]) vga_rgb <= 8'b111_000_00;
else vga_rgb <= 8'b000_111_00;
10'd306: if(linee[char_bit]) vga_rgb <= 8'b111_000_00;
else vga_rgb <= 8'b000_111_00;
10'd307: if(linef[char_bit]) vga_rgb <= 8'b111_000_00;
else vga_rgb <= 8'b000_111_00; default: vga_rgb <= 8'hff;
endcase
end
else
vga_rgb <= 8'h000_000_11;
assign r = vga_rgb[7:5];
assign g = vga_rgb[4:2];
assign b = vga_rgb[1:0];
endmodule
本地地址:E:\FPGA\vedio\vga_char\src\i_vga_char.ucf
NET "clk" LOC = P54;
NET "rst_n" LOC = P38;
NET "hsync" LOC = P39;
NET "vsync" LOC = P35;
NET "r<2>" LOC = P70;
Verilog程序
NET "r<1>" LOC = P68; NET "r<0>" LOC = P67; NET "g<2>" LOC = P52; NET "g<1>" LOC = P51; NET "g<0>" LOC = P50; NET "b<1>" LOC = P44; NET "b<0>" LOC = P43; 运行效果图:
放大图:
Verilog程序
正在阅读:
Verilog程序12、VGA显示字符07-24
温柔是做给你看,不是说给你听11-03
钢结构主体工程的施工方案 - 图文10-17
输血流程图(最新)09-03
2020年区委副书记述职述廉述学报告09-06
爱 无法用言语来描述11-03
如果我不曾爱过你11-03
塑料阀门市场现状分析及前景预测报告(目录) - 图文12-23
水利06级《水力学》试卷B06-07
道不尽人间冷暖,解刨现实生活中爱情11-03
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 字符
- Verilog
- 程序
- 显示
- VGA
- 抽样检验的原理和实现
- 初中英语代词专项练习
- 走进大学的我们(10分钟演讲稿)
- 生意新出路——“客流共生营销”
- 高层住宅建筑工程监理特点分析
- 5S教你管理精益化
- 统计学--正态分布和参考值范围
- 中国国际影响力和国际地位的提升
- 合肥十大装修公司的欧美日韩装修风格简介
- 手机内存小的解决办法
- 07-门禁系统的设计施工02
- 关于雨的作文:雨
- 房屋暂时无产权证合同通用范本
- 湖南水利工程概算2008编制规定
- 强迫症的三个自我理论与自我心理疗法(孟刚)
- 浅议高校女大学生的就业现状及对策
- 吉林一中2013--2014学年度上学期高一11月物理考试
- 小学四年级语文上册教学总结(精选多篇)精品
- 锦绣天河市场策略分析初稿
- 云南省鼓励专业技术人员到基层服务暂行办法