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

VESA时序检测模块设计verilog实现

module fps_vs_hs_de_timing_check
#(
parameter FPS             = 60,//帧率
parameter CLK_FREQ_CNT     = 74250000,//clock:单位HZ
parameter WIDTH            = 1920,//分辨率宽
parameter HIGH             = 1080//分辨率高
)
(
input            i_clk,
input            i_rst_n,

input            i_vs,
input            i_hs,

output reg            o_fps_err,
output reg            o_row_err,
output reg            o_col_err,

output reg    [31:0]    o_check_fps,
output reg    [31:0]    o_check_high,
output reg    [31:0]    o_check_width
);


reg    vs_r;
reg hs_r;

reg[31:0] col_cnt;
reg[31:0] row_cnt;


reg       start_flag;
reg[31:0] clk_cnt;
reg[31:0] frame_cnt;

always@(posedge i_clk or negedge i_rst_n)begin
if(i_rst_n==1'b0)begin
vs_r <= 1'b0;
hs_r <= 1'b0;
end
else begin
vs_r <= i_vs;
hs_r <= i_hs;
end
end

always@(posedge i_clk or negedge i_rst_n)begin
if(i_rst_n==1'b0)begin
col_cnt <= 'd0;
end
else begin
if(i_hs)begin
col_cnt <= col_cnt + 'd1;
end
else begin
col_cnt <= 'd0;
end
end
end

always@(posedge i_clk or negedge i_rst_n)begin
if(i_rst_n==1'b0)begin
o_check_width <= 'd0;
end
else begin
if(~i_hs & hs_r)begin
o_check_width <= col_cnt;
end
end
end


always@(posedge i_clk or negedge i_rst_n)begin
if(i_rst_n==1'b0)begin
row_cnt <= 'd0;
end
else if(~i_vs & vs_r)begin
row_cnt <= 'd0;
end
else if(i_vs) begin
if((~i_hs & hs_r)begin
row_cnt <= row_cnt + 'd1;
end
end
end

always@(posedge i_clk or negedge i_rst_n)begin
if(i_rst_n==1'b0)begin
o_check_high <= 'd0;
end
else begin
if(~i_vs & vs_r)begin
o_check_high <= row_cnt;
end
end
end

//clk_cnt
//start_flag
//frame_cnt

always@(posedge i_clk or negedge i_rst_n)begin
if(i_rst_n==1'b0)begin
start_flag <= 'd0;
end
else if(~vs_r & i_vs) begin
start_flag <= 1'b1;
end
end



always@(posedge i_clk or negedge i_rst_n)begin
if(i_rst_n==1'b0)begin
clk_cnt <= 'd0;
end
else  begin
if(clk_cnt==CLK_FREQ_CNT-1)begin
clk_cnt <= 'd0;
end
else begin
clk_cnt <= clk_cnt + 'd1;
end
end
end

always@(posedge i_clk or negedge i_rst_n)begin
if(i_rst_n==1'b0)begin
frame_cnt <= 'd0;
end
else if(clk_cnt ==(CLK_FREQ_CNT-1))begin
frame_cnt <= 'd0;
end
else if(clk_cnt < (CLK_FREQ_CNT-1)) begin
if(~vs_r & i_vs)begin
frame_cnt <= frame_cnt + 1;
end

end
end

always@(posedge i_clk or negedge i_rst_n)begin
if(i_rst_n==1'b0)begin
o_check_fps <= 'd0;
end
else if(clk_cnt ==(CLK_FREQ_CNT-1))  begin
o_check_fps <= frame_cnt;
end
end



always@(posedge i_clk or negedge i_rst_n)begin
if(i_rst_n==1'b0)begin
o_col_err <= 1'b0;
end
else if(o_check_width!=WIDTH) begin
o_col_err <= 1'b1;
end
else begin
o_col_err <= 1'b0;
end
end

always@(posedge i_clk or negedge i_rst_n)begin
if(i_rst_n==1'b0)begin
o_row_err <= 1'b0;
end
else if(o_check_high!=HIGH) begin
o_row_err <= 1'b1;
end
else begin
o_row_err <= 1'b0;
end
end

always@(posedge i_clk or negedge i_rst_n)begin
if(i_rst_n==1'b0)begin
o_fps_err <= 1'b0;
end
else if(o_check_fps>=(FPS-2)  o_check_fps<=(FPS+2)) begin//误差范围
o_fps_err <= 1'b0;
end
else begin
o_fps_err <= 1'b1;
end
end






endmodule

http://www.dtcms.com/a/353093.html

相关文章:

  • 力扣hot100:字母异位词分组和最长连续序列(49,128)
  • Ansible的介绍+ansible平台部署
  • 互联网大厂Java面试深度解析:从基础到微服务云原生的全场景模拟
  • 公开课程 | 大规模图数据管理与分析 第二讲:图的度量、性质与生成模型
  • redbook的判断完美数
  • 销售数据分析平台
  • LeetCode hot 100 每日一题(18)——206.反转链表
  • 开源 | 推荐一套企业级开源AI人工智能训练推理平台(数算岛):完整代码包含多租户、分布式训练、模型市场、多框架支持、边缘端适配、云边协同协议:
  • 高并发写入、毫秒级查询——盘古信息携手 TDengine 时序数据库解决六大技术挑战
  • SimLab Composer8.2_win中文_3D绘画_安装教程
  • 音频时长裁剪工具:高效处理音频,让内容创作更轻松
  • 【Rust】 2. 数据类型笔记
  • Compose副作用域
  • 大模型重构建筑“能耗基因“:企业如何用物联中台打响能源革命?
  • 入行IC | 数字IC设计和FPGA哪个好?
  • STM32 入门实录:从 0 到 3 色 LED 呼吸式闪烁
  • Git-远程操作
  • 基于 Node.js 的淘宝 API 接口开发:快速构建异步数据采集服务
  • SFTP服务器可以通过同一个登录到SFTP服务器的账号密码连接上控制台吗
  • 【0420】Postgres内核 实现(借助 SMgrRelation)为指定 table(CREATE TABLE)创建 disk file
  • android证书相关
  • 天启录:Linux性能调优·混沌掌控者篇
  • Android中AAR、JAR文件
  • 具身导航助力果园种植!基于模仿学习的果园环境无人机视觉导航
  • Spring Boot项目集成日志系统使用完整指南
  • R-Zero:通过自博弈机制让大语言模型无需外部数据实现自我进化训练
  • Flutter桌面应用实战:Windows系统代理切换工具开发
  • 集成电路学习:什么是SSD单发多框检测器
  • 线性回归原理推导与应用(十一):多重共线性
  • 20250827的学习笔记