【FPGA】基于bt1120时序设计实现棋盘格横纵向灰阶图数据输出
基于bt1120时序设计实现棋盘格横纵向灰阶图数据输出
- 一、bt1120介绍
- 二、代码
- 三、bt1120中文建议书
一、bt1120介绍
bt1120的标准时序为1080p@60hz,其一帧数据主要是由消隐和有效数据构成,有效数据为YCbCr 4:2:2方式输出,在数字行消隐还有两种定时基准码,一种在每个视频数据块的起始(SAV),另一种在每个视频数据块
的结束(EAV),其一帧数据还有两场和一场两种方式输出,一帧格式如下图所示。
逐行扫描系统中的帧时间期定时规范
图像定时基准码的比特分配
在EAV 和SAV输出,其格式如下,在这两个基准码前还有三个固定数据其格式为 ff 00 00 EAV、
ff 00 0 SAV.
二、代码
bt1120
module bt1120(//inputsclk,rst_n,data_in,//outputshcnt,vcnt,hsync,vsync,data_out,clk_out);input clk;
input rst_n;
input [15:0] data_in;output [11:0] hcnt;
output [10:0] vcnt;
output [15:0] data_out;
output clk_out;
output hsync;
output vsync;reg [15:0] data_out;parameter HNUM = 12'd2200; // 1080p @30Hz 2200 @25hz 2640
parameter VNUM = 11'd1125;
parameter HSYNC_END = 12'd276;
parameter VSYNC_START = 11'd1121;
parameter VSYNC_END = 11'd41;
parameter EAV = 12'd4;
parameter SAV = 12'd280;
parameter EAV_PRE = 12'd1;
parameter SAV_PRE = 12'd277;assign clk_out = ~clk;reg hsync;
reg vsync;
reg [11:0] hcnt;
reg [10:0] vcnt;always @(posedge clk or negedge rst_n) beginif(!rst_n) beginhcnt<=12'd1;vcnt<=11'd1;endelse if(hcnt==HNUM) beginhcnt<=12'd1;if(vcnt==11'd1125)vcnt<=11'd1;elsevcnt<=vcnt+11'd1;endelsehcnt<=hcnt+12'd1;
endalways @(posedge clk or negedge rst_n) beginif(!rst_n)hsync<=1'b0;else if(hcnt==HNUM)hsync<=1'b1;else if(hcnt==HSYNC_END)hsync<=1'b0;else;
endalways @(posedge clk or negedge rst_n) beginif(!rst_n)vsync<=1'b0;else if(hcnt==HNUM) beginif(vcnt==VSYNC_START)vsync<=1'b1;else if(vcnt==VSYNC_END)vsync<=1'b0;else;endelse;
endassign p3 = 1'b0^vsync^hsync;
assign p2 = 1'b0^hsync;
assign p1 = 1'b0^vsync;
assign p0 = vsync^hsync;always @(posedge clk or negedge rst_n) beginif(!rst_n)data_out<=16'd0;else if(hcnt==SAV_PRE || hcnt==EAV_PRE)data_out<=16'hffff;else if(hcnt==EAV || hcnt==SAV)data_out<={1'b1,1'b0,vsync,hsync,p3,p2,p1,p0,1'b1,1'b0,vsync,hsync,p3,p2,p1,p0};else if(hcnt==SAV_PRE+12'd1 || hcnt==SAV_PRE+12'd2 || hcnt==EAV_PRE+12'd1 || hcnt==EAV_PRE+12'd2)data_out<=16'd0;else if(hcnt==EAV+12'd1)data_out<={~vcnt[6],vcnt[6:0],~vcnt[6],vcnt[6:0]};else if(hcnt==EAV+12'd2)data_out<={4'b1000,vcnt[10:7],4'b1000,vcnt[10:7]};else if(hsync==1'b0 && vsync==1'b0)data_out<=data_in;elsedata_out<=16'h1080;
endendmodule
下面展示一些 内联代码片
。
test_img
module test_img(//inputsclk ,rst_n ,hcnt ,vcnt ,img_ctrl ,//outputsdata_out );input clk ;
input rst_n ;
input [11:0] hcnt ;
input [10:0] vcnt ;
input [3:0] img_ctrl ;output [15:0] data_out ;reg [15:0] data_out ;/********************************************************/
reg [15:0] data_checker ;
reg [15:0] data_grayscale_c;
reg [15:0] data_grayscale_l;//输出
always @(*)begin if(img_ctrl == 4'b0000)begin //checkerboarddata_out = data_checker;end else if(img_ctrl == 4'b0001)begin //gray scale crosswisedata_out = data_grayscale_c;end else if (img_ctrl == 4'b0010) begin //gray scale lengthwaysdata_out = data_grayscale_l; endelse begin data_out <= data_checker;end
end//checkerboard
always @(posedge clk or negedge rst_n) beginif(!rst_n)data_checker<=1'b0;else if(vcnt[6]) beginif(hcnt[6])data_checker<={8'd16,8'd128};//{8'd16,8'd128};16'ha040;elsedata_checker<={8'd235,8'd128};//{8'd235,8'd128};16'h60a0;endelse beginif(hcnt[6])data_checker<={8'd235,8'd128};//{8'd235,8'd128};16'h4050;elsedata_checker<={8'd16,8'd128};//{8'd16,8'd128};16'hb0c0;end
end//gray scale//crosswise
reg [7:0] cnt ;
wire add_cnt ;
wire end_cnt ;reg [3:0] cnt_12 ;
wire add_cnt_12 ;
wire end_cnt_12 ;always @(posedge clk or negedge rst_n)begin if(!rst_n)begincnt <= 8'd1;end else if (hcnt == 12'd280) begincnt <= 8'd1;endelse if(add_cnt)begin if(end_cnt)begin cnt <= 8'd1;endelse begin cnt <= cnt + 8'd1;end endelse begincnt <= cnt;end
end assign add_cnt = end_cnt_12;
assign end_cnt = add_cnt && cnt == 8'd160;always @(posedge clk or negedge rst_n)begin if(!rst_n)begincnt_12 <= 4'd1;end else if (hcnt == 12'd280) begincnt_12 <= 4'd1;endelse if(add_cnt_12)begin if(end_cnt_12)begin cnt_12 <= 4'd1;endelse begin cnt_12 <= cnt_12 + 4'd1;end endelse begincnt_12 <= cnt_12;end
end assign add_cnt_12 = hcnt>12'd280;
assign end_cnt_12 = add_cnt_12 && cnt_12 == 4'd12;always @(posedge clk or negedge rst_n)begin if(!rst_n)begindata_grayscale_c <= 16'd0;end else begin data_grayscale_c <= {cnt,8'd128};end
end//lengthwaysreg [7:0] cnt_l ;
wire add_cnt_l ;
wire end_cnt_l ;reg [3:0] cnt_12_l ;
wire add_cnt_12_l ;
wire end_cnt_12_l ;always @(posedge clk or negedge rst_n)begin if(!rst_n)begincnt_l <= 8'd1;end else if (vcnt == 11'd41) begincnt_l <= 8'd1;endelse if(add_cnt_l)begin if(end_cnt_l)begin cnt_l <= 8'd1;endelse begin cnt_l <= cnt_l + 8'd1;end endelse begincnt_l <= cnt_l;end
end assign add_cnt_l = end_cnt_12_l;
assign end_cnt_l = add_cnt_l && cnt_l == 8'd108;always @(posedge clk or negedge rst_n)begin if(!rst_n)begincnt_12_l <= 4'd1;end else if (vcnt == 11'd41) begincnt_12_l <= 4'd1;endelse if(add_cnt_12_l)begin if(end_cnt_12_l)begin cnt_12_l <= 4'd1;endelse begin cnt_12_l <= cnt_12_l + 4'd1;end endelse begincnt_12_l <= cnt_12_l;end
end assign add_cnt_12_l = vcnt>11'd41 && hcnt == 12'd2200;
assign end_cnt_12_l = add_cnt_12_l && cnt_12_l == 4'd10;always @(posedge clk or negedge rst_n)begin if(!rst_n)begindata_grayscale_l <= 16'd0;end else begin data_grayscale_l <= {cnt_l,8'd128};end
end
三、bt1120中文建议书
https://blog.csdn.net/li_lys/article/details/124870664?utm_source=app&app_version=5.4.0&code=app_1562916241&uLinkId=usr1mkqgl919blen
【FPGA】基于bt1120时序设计实现棋盘格横纵向灰阶图数据输出相关推荐
- (20)FPGA面试题时序设计的实质
1.1 FPGA面试题时序设计的实质 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题时序设计的实质: 5)结束语. 1.1.2 本节引言 "不积 ...
- 国产智多晶FPGA基于Verilog的设计开发流程
大家好,我是小梅哥,这里给大家介绍国产FPGA厂家"西安智多晶"微电子的FPGA基于Verilog进行逻辑设计的开发流程,步骤详细,可作为大家的评估参考.本博客将陆续发表更多国产F ...
- FPGA之OV7725摄像头采集与VGA显示实验--4--摄像头数据输出VAG协议分析
大家好,前面几节给大家介绍了OV7725摄像头通过SCCB协议进行配置的内容,这一节我们来聊一下关于OV7725摄像头的VAG协议的知识,为后面的数据采集模块做铺垫. 学习目标 理解VGA协议传输数据 ...
- 基于FPGA的IIR滤波器设计
基于FPGA的IIR滤波器设计,使用VHDL语言. 本设计是毕设,包括论文 下面是论文目录截图: 各模块VHDL程序 时序控制模块程序 library ieee; use ieee.std_logic ...
- 基于FPGA的电子计算器设计(下)
今天给大侠带来基于FPGA的电子计算器设计,由于篇幅较长,分三篇.今天带来第三篇,下篇,话不多说,上货. 导读 本篇介绍了一个简单计算器的设计,基于 FPGA 硬件描述语言 Verilog HDL,系 ...
- 基于FPGA的LSTM加速器设计(MNIST数据集为例)
摘要 本文以MNIST手写数字识别任务为例,使用FPGA搭建了一个LSTM网络加速器,并选取MNIST数据集中的10张图片,通过vivado软件进行仿真验证.实验结果表明,本文设计的基于FPGA的LS ...
- 基于FPGA的信号发生器的设计
基于FPGA的信号发生器的设计 首先先要介绍的是本设计的主芯片是ALTERA的一款芯片,芯片名称是EP2C5T144C8N.该芯片的LE单元有4608个,PLL锁相环具有2个,IO口管脚具有142个, ...
- 基于 FPGA 的 UART 控制器设计(VHDL)(下)
今天给大侠带来基于FPGA的 UART 控制器设计(VHDL)(下),由于篇幅较长,分三篇.今天带来第三篇,下篇,使用 FPGA 实现 UART.话不多说,上货. 之前有关于 Veriliog HDL ...
- 基于FPGA的电子计算器设计(上)
今天给大侠带来基于FPGA的电子计算器设计,由于篇幅较长,分三篇.今天带来第一篇,上篇,话不多说,上货. 导读 本篇介绍了一个简单计算器的设计,基于 FPGA 硬件描述语言 Verilog HDL,系 ...
- 【FPGA实例】基于FPGA的DDS信号发生器设计
原文链接来源:www.runoob.com 基于FPGA的DDS信号发生器设计 DDS 原理 ------DDS(直接频率合成) 技术是根据奈奎斯特抽样定理及数字处理技术,把一系列的模拟信号进行不失真 ...
最新文章
- 观察者模式(Observer)
- 自己动手写C语言编译器(暂停)
- matlab算法时间复杂度,关于降低算法时间复杂度问题的探讨和总结
- 各种音频编码方式的对比
- 码农口述:AI创业两年,积蓄花光,重回职场敲代码
- SQLServer 2005删除无主键表中的重复项
- (视频+图文)机器学习入门系列-第15章
- json 字符串反序列化成DataSet
- 【2016年第1期】基于大数据的玉米田四代棉铃虫发生量的预测模型
- 全新拟态个人主页/引导页源码
- mac下自带apache
- 秋色园网站转移过程记录篇
- goreman 多进程管理工具
- Fix Bug的五个阶段
- 电力系统仿真软件python_电力系统PSS@E仿真软件
- 昨天熬夜整了一波,值了!
- 版权符号--如何在页面完美显示版权符号,版权符号字体
- c语言围棋报告,C++围棋程序实现报告.doc
- 《哈利波特》购书最低折扣
- 上帝模式代码_生产代码中的上帝模式