BT1120时序,可以用于自测用
module bt1120_gen #(
parameter H_SYNC = ,
parameter H_FRONT_PORCH = ,
parameter H_BACK_PORCH = ,
parameter V_SYNC = ,
parameter V_FRONT_PORCH = ,
parameter V_BACK_PORCH = )(
input clk,
input rst_p,
// input [5:0] h_sync_pixcels,
// input [5:0] h_front_porch_pixcels,
// input [5:0] h_back_porch_pixcels,
// input [5:0] v_sync_lines,
// input [5:0] v_front_porch_lines,
// input [5:0] v_back_porch_lines, input [:] col,
input [:] row, output reg[:] odata,
output reg v_sync,
output reg h_sync,
output reg de ); parameter S_H_SYNC = 'b00;
parameter S_H_BACK_PORCH = 'b01;
parameter S_H_ACTIVE = 'b10;
parameter S_H_FRONT_PORCH = 'b11;
parameter S_V_SYNC = 'b00;
parameter S_V_BACK_PORCH = 'b01;
parameter S_V_ACTIVE = 'b10;
parameter S_V_FRONT_PORCH = 'b11; reg [:] h_pre_state = S_H_FRONT_PORCH;
reg [:] h_nx_state = S_H_FRONT_PORCH;
reg [:] v_pre_state = S_V_SYNC;
reg [:] v_nx_state = S_V_SYNC; reg [:] h_cnt = ;
reg [:] v_cnt = ;
reg [:] sync_code = ;
reg de_r = 'b0;
reg vid_sop_r = 'b0;
wire pos_vid_sop;
reg fifo_rd_valid = 'b0;
reg [:] fifo_rd_data_r = 'd0;
reg [:] sync_code_r = 'd0;
reg [:] sync_code_r1 = 'd0;
reg de_r1 = 'b0;
reg de_r2 = 'b0;
reg h_sync_r = 'b0;
reg h_sync_r1 = 'b0;
reg h_sync_r2 = 'b0;
reg v_sync_r = 'b0;
reg v_sync_r1 = 'b0;
reg v_sync_r2 = 'b0; reg data_en = 'b0;
reg data_en_dly = 'b0;
always @( posedge clk )
begin
if( h_nx_state == S_H_ACTIVE && v_nx_state == S_V_ACTIVE )
data_en <= 'b1;
else
data_en <= 'b0;
end always @( posedge clk )
begin
data_en_dly <= data_en;
end always @( posedge clk )
begin
if( data_en_dly )
fifo_rd_data_r <= fifo_rd_data_r + 'b1;
else
fifo_rd_data_r <= 'd0;
end /*********************************************************************** ***********************************************************************/ always @( posedge clk )//or posedge rst_p
begin
if( rst_p ) begin
h_pre_state <= S_H_FRONT_PORCH;
v_pre_state <= S_V_SYNC; end else begin
h_pre_state <= h_nx_state;
v_pre_state <= v_nx_state;
end
end always @( * )
begin
case( h_pre_state )
S_H_SYNC :
if( h_cnt == H_SYNC - )
h_nx_state <= S_H_BACK_PORCH;
else
h_nx_state <= S_H_SYNC; S_H_BACK_PORCH :
begin
if( h_cnt == H_BACK_PORCH - )
h_nx_state <= S_H_ACTIVE;
else
h_nx_state <= S_H_BACK_PORCH;
end
S_H_ACTIVE :
begin
if( h_cnt == col - )
h_nx_state <= S_H_FRONT_PORCH;
else
h_nx_state <= S_H_ACTIVE; end
S_H_FRONT_PORCH :
begin
if( h_cnt == H_FRONT_PORCH - )
h_nx_state <= S_H_SYNC;
else
h_nx_state <= S_H_FRONT_PORCH; end
default:;
endcase end always @( * )
begin
case( v_pre_state )
S_V_SYNC :
begin
if( h_nx_state == S_H_FRONT_PORCH && h_pre_state == S_H_ACTIVE ) begin
if( v_cnt == V_SYNC - )
v_nx_state = S_V_BACK_PORCH;
else
v_nx_state = S_V_SYNC;
end else begin
v_nx_state = S_V_SYNC;
end
end
S_V_BACK_PORCH :
begin
if( h_nx_state == S_H_FRONT_PORCH && h_pre_state == S_H_ACTIVE ) begin
if( v_cnt == V_BACK_PORCH - )
v_nx_state = S_V_ACTIVE;
else
v_nx_state = S_V_BACK_PORCH;
end else begin
v_nx_state = S_V_BACK_PORCH;
end
end
S_V_ACTIVE :
begin
if( h_nx_state == S_H_FRONT_PORCH && h_pre_state == S_H_ACTIVE ) begin
if( v_cnt == row - )
v_nx_state = S_V_FRONT_PORCH;
else
v_nx_state = S_V_ACTIVE;
end else begin
v_nx_state = S_V_ACTIVE;
end end
S_V_FRONT_PORCH :
begin
if( h_nx_state == S_H_FRONT_PORCH && h_pre_state == S_H_ACTIVE ) begin
if( v_cnt == V_FRONT_PORCH -'b1 )
v_nx_state = S_V_SYNC;
else
v_nx_state = S_V_FRONT_PORCH;
end else begin
v_nx_state = S_V_FRONT_PORCH;
end
end
default:;
endcase
// end else begin
// v_nx_state = v_nx_state;
// end
//
end
/***********************************************************************
cnt
***********************************************************************/
always @( posedge clk )
begin
if( rst_p ) begin
h_cnt <= ;
end else begin
case( h_nx_state )
S_H_SYNC :
begin
if( h_pre_state == S_H_FRONT_PORCH ) //&& h_cnt == H_FRONT_PORCH -1
h_cnt <= ;
else
h_cnt <= h_cnt + 'b1;
end
S_H_BACK_PORCH :
begin
if( h_pre_state == S_H_SYNC )//&& h_cnt == H_SYNC -1)
h_cnt <= ;
else
h_cnt <= h_cnt + 'b1;
end
S_H_ACTIVE :
begin
if( h_pre_state == S_H_BACK_PORCH)// && h_cnt == H_BACK_PORCH -1)
h_cnt <= ;
else
h_cnt <= h_cnt + 'b1;
end
S_H_FRONT_PORCH :
begin
if( h_pre_state == S_H_ACTIVE )//&& h_cnt == col -1)
h_cnt <= ;
else
h_cnt <= h_cnt + 'b1;
end
default:;
endcase
end
end always @( posedge clk or posedge rst_p )
begin
if( rst_p)
v_cnt <= ;
else begin
if( h_nx_state == S_H_FRONT_PORCH && h_pre_state == S_H_ACTIVE )
begin
case( v_nx_state )
S_V_SYNC :
begin
if( v_pre_state == S_V_FRONT_PORCH )
v_cnt <= ;
else
v_cnt <= v_cnt + 'b1;
end S_V_BACK_PORCH :
begin
if( v_pre_state == S_V_SYNC )
v_cnt <= ;
else
v_cnt <= v_cnt + 'b1;
end
S_V_ACTIVE :
begin
if( v_pre_state == S_V_BACK_PORCH )
v_cnt <= ;
else
v_cnt <= v_cnt + 'b1; end
S_V_FRONT_PORCH :
begin
if( v_pre_state == S_V_ACTIVE )
v_cnt <= ;
else
v_cnt <= v_cnt + 'b1; end
default:;
endcase
end
end
end /***********************************************************************
h_sync v_sync de
***********************************************************************/
always @( posedge clk )
begin
if( h_nx_state == S_H_SYNC )
h_sync_r <= 'b1;
else
h_sync_r <= 'b0;
end always @( posedge clk )
begin
if( v_nx_state == S_V_SYNC )
v_sync_r <= 'b1;
else
v_sync_r <= 'b0;
end always @( posedge clk )
begin
if( h_nx_state == S_H_ACTIVE && v_nx_state == S_V_ACTIVE )
de_r <= 'b1;
else
de_r <= 'b0;
end
/*********************************************************************** ***********************************************************************/ always @( posedge clk )
begin
if( h_nx_state == S_H_ACTIVE && v_nx_state == S_V_ACTIVE )
sync_code <= 'd0;
else if(( h_nx_state == S_H_BACK_PORCH) && ( v_nx_state == S_V_SYNC || v_nx_state == S_V_BACK_PORCH || v_nx_state == S_V_FRONT_PORCH))
case( h_cnt )
H_BACK_PORCH - : sync_code <= 'habab;//16'hab00;//
H_BACK_PORCH - : sync_code <= 'h0000;//16'h00ff;//
H_BACK_PORCH - : sync_code <= 'h0000;//16'h8010;//
H_BACK_PORCH - : sync_code <= 'hffff;//16'h8010;//
default:sync_code <= 'h1080;
endcase
else if(( h_nx_state == S_H_FRONT_PORCH) && ( v_nx_state == S_V_SYNC || v_nx_state == S_V_BACK_PORCH || v_nx_state == S_V_FRONT_PORCH))
if( h_pre_state == S_H_ACTIVE)
sync_code <= 'hffff;//16'h00ff;//
else begin
case(h_cnt )
: sync_code <= 'h0000;//16'hb600;//
: sync_code <= 'h0000;//16'h8010;//
: sync_code <= 'hb6b6;//16'h8010;//
default:sync_code <= 'h1080;
endcase
end
else if(( h_nx_state == S_H_BACK_PORCH)) begin // && ( v_nx_state == S_V_ACTIVE)
case(h_cnt )
H_BACK_PORCH - : sync_code <= 'h8080;//16'h8000;//
H_BACK_PORCH - : sync_code <= 'h0000;//16'h00ff;//
H_BACK_PORCH - : sync_code <= 'h0000;//16'h8010;//
H_BACK_PORCH - : sync_code <= 'hffff;//16'h8010;//
default:sync_code <= 'h1080;
endcase
end
else if(( h_nx_state == S_H_FRONT_PORCH)) begin// && ( v_nx_state == S_V_ACTIVE)
if( h_pre_state == S_H_ACTIVE)
sync_code <= 'hffff;//16'h00ff;//
else begin
case(h_cnt )
: sync_code <= 'h0000;//16'h9d00;//
: sync_code <= 'h0000;//16'h8010;//
: sync_code <= 'h9d9d;//16'h8010;//
default:sync_code <= 'h1080;
endcase
end
end
else begin
sync_code <= 'h1080;
end end
/***********************************************************************
sync
***********************************************************************/ always @( posedge clk )
begin
sync_code_r <= sync_code;
sync_code_r1<= sync_code_r;
de_r1 <= de_r;
de_r2 <= de_r1;
h_sync_r1 <= h_sync_r;
h_sync_r2 <= h_sync_r1;
v_sync_r1 <= v_sync_r;
v_sync_r2 <= v_sync_r1; end
always @( posedge clk )
begin
odata <= sync_code_r1 + fifo_rd_data_r;
h_sync <= h_sync_r2;
v_sync <= v_sync_r2;
de <= de_r2;
end endmodule
BT1120时序,可以用于自测用的更多相关文章
- VESA时序与BT1120的区别
在实现内嵌传输的过程中,笔者参考VESA的时序,也就是下图,实现了一个内嵌同步的程序,同步码放在H Back Porch与H Front Porch的后端与前端,但是在传输过程中发现接收端画面不正常. ...
- Zynq-PL中创建AXI Master接口IP及AXI4-Lite总线主从读写时序测试(转)
转载:原文 http://www.eefocus.com/antaur/blog/17-08/423751_6cc0d.html 0. 引言 通过之前的学习,可以在PL端创建从机模式的AXI接口IP ...
- Java压测之四两拨千斤
压测之四两拨千斤核心观念: 1.传统的http请求肯定不能用于压测,原因是请求一次,响应一次,而响应数据同时占用了客户端的带宽,故此,客户端请求后,不需要接受响应,让服务器单相思去. 2.寻找可以令服 ...
- 全链路压测平台(Quake)在美团中的实践
背景 在美团的价值观中,以“客户为中心”被放在一个非常重要的位置,所以我们对服务出现故障越来越不能容忍.特别是目前公司业务正在高速增长阶段,每一次故障对公司来说都是一笔非常不小的损失.而整个IT基础设 ...
- <十七>UML核心视图动态视图之时序图
一:时序图 --->时序图是用于描述按时间顺序排列的对象之间的交互模式. --->它按照参与交互的对象所具有的“生命线”和他们相互发送的消息来显示这些对象. --->时序图包含对象和 ...
- jmeter压测学习8-压测带token的接口
前言 工作中我们需要压测的接口大部分都是需要先登陆后,带着token的接口(或者带着cookies),我们可以先登陆获取token再关联到下个接口. 比如我现在要压测一个修改用户的个人信息接口,每个用 ...
- 在Linux CentOS上搭建Jmeter压测环境
本文的主要内容是介绍如何在Linux CentOS 服务器上面搭建Jmeter的压测环境整个详细的流程,来满足我们日常工作中对于压力测试环境搭建.压力测试执行过程的需求. 一.首先我们要准备四个东西, ...
- 让全链路压测变得更简单!Takin2.0重磅来袭!
自Takin社区版1.0发布两个多月以来,有很多测试同学陆续在各自的工作中运用了起来,其中包括金融.电商.物流.出行服务等行业.这个过程中我们收到了很多同学的反馈建议,同时也了解到很多同学在落地全链路 ...
- UML图 | 时序图(顺序、序列图)绘制
上一次写过一篇 UML | 类图 相关的文章,平时规范开发会用的上,或者是写什么文档,就还是需要画图,就像毕业设计就是如此.希望能够帮助到大家. 注:本文中所用画图软件为 Microsoft Visi ...
随机推荐
- MyBatis代理开发(2)
一.开发步骤和程序代码 1.程序员需要编写user.xml映射文件,程序员编写mapper接口需要遵循一些开发规范,mybatis可以自动生成mapper接口实现类代理对象. 2.创建数据库配置文件 ...
- 本地推送UILocalNotification的一些简单方法
1.添加本地推送,需要在app添加推送.可以根据通知的userInfo的不同的键值对来区分不同的通知 UILocalNotification *notification = [[UILocalNoti ...
- WebAPI支持Session
1.在App_Start/WebApiConfig.cs中建立建立HttpControllerHandler和HttpControllerRouteHandler 并覆写它: public class ...
- abp ef codefirst Value cannot be null. Parameter name: connectionString
错误原因是abp生成的项目是mvc类型的,但在使用时,选择了vue去开发,所以在abp上重新生成了一个vue项目,把原有的mvc项目给删掉了,没有将新生成的vue类型的项目的文件覆盖掉原有的mvc其他 ...
- 10.Mysql索引
10.索引的设计和使用10.1 索引概述BTREE索引:Mysql(MyIASM和Innodb)默认的索引类型.前缀索引:对索引字段的前N个字符创建索引.N的最大取值和存储引擎有关,MyIASM支持最 ...
- linux 管道符与通配符
###管道符 *命令格: 命令1 | 命令2 //命令1的正确输出作为命令2的操作对象 ll | more netstat -an | grep xxx 通配符 类似于正则表达式 ? 一个以上 [] ...
- hdu 1735(贪心) 统计字数
戳我穿越:http://acm.hdu.edu.cn/showproblem.php?pid=1735 对于贪心,二分,枚举等基础一定要掌握的很牢,要一步一个脚印走踏实 这是道贪心的题目,要有贪心的意 ...
- MySQL学习笔记-数据库内存
数据库内存 InnoDB存储引擎内存由以下几个部分组成:缓冲池(buffer pool).重做日志缓冲池(redo log buffer)以及额外的内存池(additional memory pool ...
- C++11与Unicode及使用标准库进行UTF-8、UTF-16、UCS2、UCS4/UTF-32编码转换
zt https://blog.poxiao.me/p/unicode-character-encoding-conversion-in-cpp11/ Unicode Unicode是计算机领域的一项 ...
- velocity 框架
Java模板引擎 Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅使用简单的模板语言(template language)来引用由java代码定义的对象 ...