首页
论坛
电子技术基础
模拟技术
可编程器件
嵌入式系统与MCU
工程师职场
最新帖子
问答
版主申请
每月抽奖
商城免费换礼
社区有奖活动
博客
下载
评测
视频
文库
芯语
资源
2025泰克杭州测试论坛
2025中国低空经济产业创新发展大会
【直播】芯片设计工艺仿真全解析
西门子数字化工业软件资源中心
嵌入式设计资源库
智能楼宇/家电控制应用全解析
在线研讨会
EE直播间
小测验
白皮书
行业及技术活动
杂志免费订阅
免费在线工具
厂商资源中心
论坛
博文
电子工程专辑
电子技术设计
国际电子商情
资料
白皮书
研讨会
芯语
文库
登录|注册
登录
责任全在软件
修改
文章:
72
阅读:
56600
评论:
0
赞:
499
每天都学习,快乐我自己
好友
私信
个人主页
每天都学习,快乐我自己
文章
72
原创
0
阅读
56600
评论
0
赞
499
原创
【数字IC】高级数字 IC 设计(3)VGA 彩色条显示设计(480P)
2023-3-18 21:29
732
6
6
分类:
FPGA/CPLD
文集:
数字IC
本文分享一下
VGA
显示的代码范例,480P满足一般需求。
通过代码注释可以快速了解到
寄存器
的使用和水平竖直
像素
定位的方式和方法,适合初学者入门学习
module VGA(
input clk, // pixel clock
input rst_n,
output hs,
output vs,
output de,
output [23:0] RGB
);
// 640x480 25.175Mhz
parameter H_ACTIVE = 16'd640;
parameter H_FP = 16'd16 ;
parameter H_SYNC = 16'd96 ;
parameter H_BP = 16'd48 ;
parameter V_ACTIVE = 16'd480;
parameter V_FP = 16'd10 ;
parameter V_SYNC = 16'd2 ;
parameter V_BP = 16'd33 ;
parameter HS_POL = 1'b0 ;
parameter VS_POL = 1'b0 ;
parameter H_TOTAL = H_ACTIVE + H_FP + H_SYNC + H_BP; // horizontal total time (pixels)
parameter V_TOTAL = V_ACTIVE + V_FP + V_SYNC + V_BP; // vertical total time (lines)
reg hs_reg; // horizontal sync register
reg vs_reg; // vertical sync register
reg hs_reg_d0; // delay 1 clock of 'hs_reg'
reg vs_reg_d0; // delay 1 clock of 'vs_reg'
reg [11:0] h_cnt; // horizontal counter
reg [11:0] v_cnt; // vertical counter
reg [11:0] active_x; // video x position
reg [11:0] active_y; // video y position
reg [23:0] rgb_reg; // output color bar
reg h_active; // horizontal video active
reg v_active; // vertical video active
wire video_active; // video active(horizontal active and vertical active)
reg video_active_d0; // delay 1 clock of video_active
assign hs = hs_reg_d0;
assign vs = vs_reg_d0;
assign video_active = h_active & v_active;
assign de = video_active_d0;
assign RGB = rgb_reg;
always@(posedge clk or negedge rst_n) begin
if(!rst_n)
begin
hs_reg_d0 <= 1'b0;
vs_reg_d0 <= 1'b0;
video_active_d0 <= 1'b0;
end
else
begin
hs_reg_d0 <= hs_reg;
vs_reg_d0 <= vs_reg;
video_active_d0 <= video_active;
end
end
always@(posedge clk or negedge rst_n) begin
if(!rst_n)
h_cnt <= 12'd0;
else if(h_cnt == H_TOTAL - 1) // horizontal counter maximum value
h_cnt <= 12'd0;
else
h_cnt <= h_cnt + 12'd1;
end
always@(posedge clk or negedge rst_n) begin
if(!rst_n)
active_x <= 12'd0;
else if(h_cnt >= H_FP + H_SYNC + H_BP - 1) // horizontal video active
active_x <= h_cnt - (H_FP[11:0] + H_SYNC[11:0] + H_BP[11:0] - 12'd1);
else
active_x <= active_x;
end
always@(posedge clk or negedge rst_n) begin
if(!rst_n)
v_cnt <= 12'd0;
else if(h_cnt == H_FP - 1) // horizontal sync time
if(v_cnt == V_TOTAL - 1) // vertical counter maximum value
v_cnt <= 12'd0;
else
v_cnt <= v_cnt + 12'd1;
else
v_cnt <= v_cnt;
end
always@(posedge clk or negedge rst_n) begin
if(!rst_n)
hs_reg <= 1'b0;
else if(h_cnt == H_FP - 1) // horizontal sync begin
hs_reg <= HS_POL;
else if(h_cnt == H_FP + H_SYNC - 1) // horizontal sync end
hs_reg <= ~hs_reg;
else
hs_reg <= hs_reg;
end
always@(posedge clk or negedge rst_n) begin
if(!rst_n)
h_active <= 1'b0;
else if(h_cnt == H_FP + H_SYNC + H_BP - 1) // horizontal active begin
h_active <= 1'b1;
else if(h_cnt == H_TOTAL - 1) // horizontal active end
h_active <= 1'b0;
else
h_active <= h_active;
end
always@(posedge clk or negedge rst_n) begin
if(!rst_n)
vs_reg <= 1'd0;
else if((v_cnt == V_FP - 1) && (h_cnt == H_FP - 1)) // vertical sync begin
vs_reg <= HS_POL;
else if((v_cnt == V_FP + V_SYNC - 1) && (h_cnt == H_FP - 1)) // vertical sync end
vs_reg <= ~vs_reg;
else
vs_reg <= vs_reg;
end
always@(posedge clk or negedge rst_n) begin
if(!rst_n)
v_active <= 1'd0;
else if((v_cnt == V_FP + V_SYNC + V_BP - 1) && (h_cnt == H_FP - 1)) // vertical active begin
v_active <= 1'b1;
else if((v_cnt == V_TOTAL - 1) && (h_cnt == H_FP - 1)) // vertical active end
v_active <= 1'b0;
else
v_active <= v_active;
end
always@(posedge clk or negedge rst_n) begin
if(!rst_n)
rgb_reg <= 24'h000;
else if(video_active) begin
if(active_x == 12'd0)
rgb_reg <= 24'hF00;
else if(active_x == 12'd120)
rgb_reg <= 24'h0F0;
else if(active_x == 12'd240)
rgb_reg <= 24'h00F;
else if(active_x == 12'd360)
rgb_reg <= 24'h0F0;
else if(active_x == 12'd410)
rgb_reg <= 24'hF00;
else
rgb_reg <= rgb_reg;
end
else
rgb_reg <= 24'h000;
end
endmodule
复制代码
写原创有奖励!2025面包板原创奖励正在进行中
最新发表
推荐阅读
明星博主
原创博文
年度排行
博文排行
博文评论
FPGA/CPLD
MCU/ 嵌入式
模拟
电源/新能源
测试测量
通信
智能手机
处理器与DSP
PCB
汽车电子
消费电子
智能硬件
物联网
软件与OS
采购与分销
供应链管理
工程师职场
EDA/ IP/ 设计与制造
无人机
机器人/ AI
医疗电子
工业电子
管理
写博文
点赞(
6
)
收藏
分享到:
上一篇:
【数字IC】技能拓展(2)Xilinx_Vivado_SDK_2019.1 开发指导
下一篇:
【数字IC】高级数字 IC 设计(4)灰度转二值化设计
PARTNER CONTENT
换一换>
更多>
案例分享 | 高效节能,性能卓越!汉高三防漆为电动汽车充电系统披上"隐形铠甲"
汉高
2025-03-21
文章评论
(
0
条评论)
登录
后参与讨论
您需要登录后才可以评论
登录
|
立即注册
发布
责任全在软件
修改
文章:
72
阅读:
56600
评论:
0
赞:
499
每天都学习,快乐我自己
好友
私信
个人主页
每天都学习,快乐我自己
文章
72
原创
0
阅读
56600
评论
0
赞
499
个人文集
数字IC
(19)
单片机基础
(20)
FPGA
(33)
最新评论
更多
写的好,学习了,好产品
开发工匠 ...
评论博文
2025-4-11
芯原发布高效的VC9000D_LCEVC视频解码器, ...
eeNick : 多谢分享 破除迷信欧美日的技术,改为虚心学习并赶上,提高国货品质而努力,才对得起世界工业第一大国的称号,做好 ...
bruce小肥羊 ...
评论博文
2025-4-10
超低谐波失真的电容测试数据大公开(原创) ...
开发工匠 : 写的好,学民门牌号参考,大师之作,很实用。 不敢称大师,工匠也不好(小日本的工匠精神已经成为了躬匠和死板的 ...
bruce小肥羊 ...
评论博文
2025-4-10
超低谐波失真的电容测试数据大公开(原创) ...
最新
博文
Wi-Fi 7来了,和Wi-Fi 6相比有哪些区 ...
[完结14章]Vue3.5+Electron+大模型 跨 ...
微软、谷歌、阿里云围剿下的亚马逊AWS ...
资料下载
本周热帖
车规级功率半导体技术现状、挑战与发 ...
IGBT图解
如何使用英飞凌IGBT7设计高性能伺服驱 ...
C#+WPF+Opencv模块化开发视觉对位运动 ...
电源工程师技术培训-初级
联发科IoT新料G520(MT8371)/G720(MT83 ...
CV8788对比Lattice HDMI TX芯片!性能 ...
【拆解】拆解一款定制10000mAh充电宝- ...
MDD超快恢复二极管在高频开关电源中的 ...
光耦:光与电的联系
最新资讯
芯语最新
只要三个分立器件,就能将PWM连接至开 ...
在月亮上造电池?可以将成本降低99% ...
再反制!中国对美加征关税税率提高至1 ...
从自愿离职到强制裁员,谷歌再裁数百 ...
再反制!中国对美国商品加征关税提升 ...
热稳定DRAM 外围晶体管技术
光学计算的演变
超11GWh!亿纬锂能等3企又签储能大单 ...
引领储能革新?精控能源出击ESIE2025 ...
AI含量拉满!TOP25+储能企业竞逐 ...
EE直播间
更多
利用高性能源表和强大的软件, 实现半导体参数的测试和分析
直播时间: 04月17日 10:00
在线研讨会
更多
多物理场仿真在半导体制程中的应用
迈来芯新一代经济型热成像技术:赋能电力电子过热保护与智能应用温度监控
ADI 应用于电池管理系统 (BMS) 的电芯监测解决方案
利用氮化镓技术打造高效电机驱动——人形机器人、无人机与电动汽车应用
热门
推荐
工程师必看:B2900隐藏的15个超频测试模式
一站式登记香港贸易发展局各个商贸展览
解密半导体全产业链测试密码 | 泰克技术大会
汽车照明的秘密武器,竟然是……
我要评论
0
6
分享到微信
分享到微博
分享到QQ
点击右上角,分享到朋友圈
我知道啦
请使用浏览器分享功能
我知道啦
关闭
站长推荐
/3
2025第1期拆解活动:赢示波器、运动相机、热像仪等!
示波器、影石运动全景相机、大疆无人机、高清红外热成像仪;树莓派5等等
【在线研讨会】多物理场仿真在半导体工艺中的应用
聚焦 COMSOL 仿真软件在半导体制程中的广泛应用,内容涵盖晶圆制备、光刻、沉积、刻蚀、离子注入、热处理,以及平坦化等前道工艺过程中各种多物理场现象的模拟和分析。
泰克示波器五折来袭!
泰克限时五折!全球示波器用户狂欢,软件升级超值优惠,速抢!
首页
论坛
电子技术基础
模拟技术
可编程器件
嵌入式系统与MCU
工程师职场
最新帖子
问答
版主申请
每月抽奖
商城免费换礼
社区有奖活动
博客
下载
评测
视频
文库
芯语
资源
2025泰克杭州测试论坛
2025中国低空经济产业创新发展大会
【直播】芯片设计工艺仿真全解析
西门子数字化工业软件资源中心
嵌入式设计资源库
智能楼宇/家电控制应用全解析
在线研讨会
EE直播间
小测验
白皮书
行业及技术活动
杂志免费订阅
免费在线工具
厂商资源中心
帖子
博文
返回顶部
×
文章评论(0条评论)
登录后参与讨论