module Reset_Delay(iCLK,iRST,oRST_0,oRST_1,oRST_2);
input iCLK;
input iRST;
output reg oRST_0;
output reg oRST_1;
output reg oRST_2; reg [:] Cont; always@(posedge iCLK or negedge iRST)
begin
if(!iRST)
begin
Cont <= ;
oRST_0 <= ;
oRST_1 <= ;
oRST_2 <= ;
end
else
begin
if(Cont!='h3FFFFF)
Cont <= Cont + 'b1;
if(Cont>='h1FFFFF)
oRST_0 <= ;
if(Cont>='h2FFFFF)
oRST_1 <= ;
if(Cont>='h3FFFFF)
oRST_2 <= ;
end
end endmodule

//-------------------------------------------------------------------------------
//  TD_Detect: 通过检测消隐的iTD_HS的个数判断数据是否稳定;iTD_VS高电平有效.
//VSYNC(低电平有效)    ------                                        ------
//                            ---      -----------------------------        -------------------
//HREF 高电平有效    --------------------------------------------------------------- 
//-------------------------------------------------------------------------------

 module TD_Detect
(
oTD_Stable,
iTD_VS,//
iTD_HS,
iRST_N
);
input iTD_VS;
input iTD_HS;
input iRST_N;
output oTD_Stable;
reg TD_Stable;
reg Pre_VS;
reg [:] Stable_Cont;
//
assign TD_Stable = iRST_N;
assign oTD_Stable = TD_Stable;
always@(posedge iTD_HS or negedge iRST_N)begin
if(!iRST_N)
begin
TD_Stable <= 'b0;
Stable_Cont <= 'h0;
Pre_VS <= 'b0;
end
else
begin
//
Pre_VS <= iTD_VS;
//
if(!iTD_VS)//表示进入消隐区域
Stable_Cont <= Stable_Cont+'b1;
else
Stable_Cont <= ;
//
if({Pre_VS,iTD_VS}=='b01)//表示从消隐去进入数据有效区
begin
if ((Stable_Cont==) || (Stable_Cont==))//24、25(PAL制式)分别是顶场和低场消隐的行数 通过判断消隐去的行数
TD_Stable <= 'b1; //判断数来据时PAL or NTSC制式 //GMK (Stable_Cont==9)NTSC制
else
TD_Stable <= 'b0;//数据不稳定产生复位
end
end
end
endmodule

//-------------------------------------------------------------------------------
//  Reset_Delay: TD_Detect 模块的TD_STABLE(低电平复位)信号做为复位信号,检测不到正常的格式则复位。
//            oDLY0(低电平复位)最先恢复正常,sdram、linebuffer等
//            oDLY1(低电平复位)第二恢复正常,ITU_656 Decoder等
//            oDLY2(低电平复位)最后恢复正常, 其他模块等
//-------------------------------------------------------------------------------

 module ITU_656_Decoder
(
// Control Signals
input iRST_N,
input iTD_CLK27,
input iSwap_CbCr,
input iSkip,
// TV Decoder Input
input [:] iTD_DAT,
// Position Output
output [:] oTV_X,
output [:] oTV_Y,
output [:] oTV_Cont,
// YUV 4:2:2 Output
output [:] oYCbCr,
output oDVAL
);
assign oTV_X = Count>>;
assign oTV_Y = TV_Y;
assign oYCbCr = YCbCr;
assign oDVAL = Data_Valid;
assign oTV_Cont = Data_Cont; //
reg [:] Window;
wire [:] Window_N;
always@(posedge iTD_CLK27 or negedge iRST_N)begin
if(!iRST_N)
Window <= 'h0;
else
Window <= Window_N;
end
assign Window_N = {Window[:],iTD_DAT}; //
wire SAV;
assign SAV = ((Window == 'hff0000) && (iTD_DAT[4] == 1'h0)); reg [:] Count,Count_N;
always@(posedge iTD_CLK27 or negedge iRST_N)begin
if(!iRST_N)
Count <= 'h0;
else
Count <= Count_N;
end
always@(*)begin
if(SAV)
Count_N = 'h0;
else if(Count == )
Count_N = Count;
else
Count_N = Count + 'h1;
end reg Active_Video,Active_Video_N;
always@(posedge iTD_CLK27 or negedge iRST_N)begin
if(!iRST_N)
Active_Video <= 'h0;
else
Active_Video <= Active_Video_N;
end
always@(*)begin
if(SAV)
Active_Video_N = 'h1;
else if(Count == )
Active_Video_N = 'h0;
else
Active_Video_N = Active_Video;
end reg Field,Field_N;
always@(posedge iTD_CLK27 or negedge iRST_N)begin
if(!iRST_N)
Field <= 'h0;
else
Field <= Field_N;
end
always@(*)begin
if(Window == 'hff0000)
Field_N = iTD_DAT[];
else
Field_N = Field;
end reg Pre_Field;
always@(posedge iTD_CLK27 or negedge iRST_N)begin
if(!iRST_N)
Pre_Field <= 'h0;
else
Pre_Field <= Field;
end reg FVAL,FVAL_N;
always@(posedge iTD_CLK27 or negedge iRST_N)begin
if(!iRST_N)
FVAL <= 'h0;
else
FVAL <= FVAL_N;
end
always@(*)begin
if(Window == 'hff0000)
FVAL_N = !iTD_DAT[];
else
FVAL_N = FVAL;
end reg Start,Start_N;
always@(posedge iTD_CLK27 or negedge iRST_N)begin
if(!iRST_N)
Start <= 'h0;
else
Start <= Start_N;
end
always@(*)begin
if({Pre_Field,Field} == 'b10)
Start_N = 'h1;
else
Start_N = Start;
end reg Data_Valid,Data_Valid_N;
always@(posedge iTD_CLK27 or negedge iRST_N)begin
if(!iRST_N)
Data_Valid <= 'h0;
else
Data_Valid <= Data_Valid_N;
end
always@(*)begin
if(Start && Active_Video && FVAL && Count[] && !iSkip)
Data_Valid_N = 'h1;
else
Data_Valid_N = 'h0;
end reg [:] TV_Y,TV_Y_N;
always@(posedge iTD_CLK27 or negedge iRST_N)begin
if(!iRST_N)
TV_Y <= 'h0;
else
TV_Y <= TV_Y_N;
end
always@(*)begin
if(!FVAL)
TV_Y_N = 'h0;
else if(FVAL && SAV)
TV_Y_N = TV_Y + 'h1;
else
TV_Y_N = TV_Y;
end reg [:] Data_Cont,Data_Cont_N;
always@(posedge iTD_CLK27 or negedge iRST_N)begin
if(!iRST_N)
Data_Cont <= 'h0;
else
Data_Cont <= Data_Cont_N;
end
always@(*)begin
if(!FVAL)
Data_Cont_N = 'h0;
else if(Data_Valid)
Data_Cont_N = Data_Cont + 'h1;
else
Data_Cont_N = Data_Cont;
end reg [:] Cb,Cb_N;
reg [:] Cr,Cr_N;
reg [:] YCbCr,YCbCr_N; always@(posedge iTD_CLK27 or negedge iRST_N)begin
if(!iRST_N)
begin
Cb <= ;
Cr <= ;
YCbCr <= ;
end
else begin
if(iSwap_CbCr)//商=1440/9
case(Count[:])
: Cb = iTD_DAT;
: YCbCr = {iTD_DAT,Cr};
: Cr = iTD_DAT;
: YCbCr = {iTD_DAT,Cb};
endcase
else
case(Count[:])
: Cb = iTD_DAT;
: YCbCr = {iTD_DAT,Cb};
: Cr = iTD_DAT;
: YCbCr = {iTD_DAT,Cr};
endcase
end
end endmodule

//------------------------------------------------------------------------------
//  ITU_656_Decoder :本模块实现去除消隐区,并将一行720个像素减为640个
//                               oRESET_1(低电平复位)第二恢复正常,ITU_656 Decoder等
//                              “XY”为控制字。“XY”的8个bit含义如下:
//                               • Bit7(Const),常数,总为1。
//                               • Bit6(F),场同步信号,表示该行数据处于奇场还是偶场。
//                               • Bit5(V),垂直同步信号,表示处于场消隐区间还是正程区间(有效数据行)。
//                               • Bit4(H),水平同步信号,表示是“SAV”还是“EAV”。
//                               • Bit3-0(P3P2P1P0,纠错位。P3=V(XOR)H;P2=F(XOR)H;P1=F(XOR)V;P0=F(XOR)V(XOR)H。
//                              其中, F:标记场信息,传输顶场时为0,传输底场时为1
//                                       V:标记消隐信息,传输消隐数据时为1,传输有效视频数据时为0
//                                       H:标记EAV还是SAV,SAV为0,EAV为1
//-------------------------------------------------------------------------------

每天进步一点点------DE2-70-TV例子说明的更多相关文章

  1. Flex移动皮肤开发(三)

    范例文件 mobile-skinning-part3 在关于创建Flex移动皮肤系列文章的第二部分里,我们讨论了屏幕密度(DPI)对组件皮肤以及移动应用布局所带来的影响. 我还展示了如何使用缩放应用, ...

  2. 数据结构与算法->树->2-3-4树的查找,添加,删除(Java)

    代码: 兵马未动,粮草先行 作者: 传说中的汽水枪 如有错误,请留言指正,欢迎一起探讨. 转载请注明出处. 目录 一. 2-3-4树的定义 二. 2-3-4树数据结构定义 三. 2-3-4树的可以得到 ...

  3. OJ题:成绩排序

    题目描述 查找和排序 题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩 都按先录入排列在前的规则处理. 例示: jack 70 peter 96 Tom 70 smit ...

  4. pkuwc2018题解

    题解: 思路挺好想的..然而今天写代码写成傻逼了 d1t1: 首先比较暴力的就是$f[i][j]$表示i个这个点是j的概率 然后前缀和一下dp就是$n^2$的 部分分树形态随机就说明树深度是$log$ ...

  5. vuex和vuejs

    前言:在最近学习 Vue.js 的时候,看到国外一篇讲述了如何使用 Vue.js 和 Vuex 来构建一个简单笔记的单页应用的文章.感觉收获挺多,自己在它的例子的基础上进行了一些优化和自定义功能,在这 ...

  6. C#小知识点积累

    1.sealed 修饰符 概念: C#提出了一个密封类(sealed class)的概念,帮助开发人员来解决这一问题. 密封类在声明中使用sealed 修饰符,这样就可以防止该类被其它类继承.如果试图 ...

  7. 用vuex构建单页

    原文地址:点我 前言:在最近学习 Vue.js 的时候,看到国外一篇讲述了如何使用 Vue.js 和 Vuex 来构建一个简单笔记的单页应用的文章.感觉收获挺多,自己在它的例子的基础上进行了一些优化和 ...

  8. 【死磕JVM】看完这篇我也会排查JVM内存过高了 就是玩儿!

    前言 CPU 是时分的,操作系统里面有很多线程,每个线程的运行时间由CPU决定,CPU会分给每一个线程一个时间片,时间片是一个很短的时间长度,如果在时间片内,线程一直占有,就是100%,我们应该意识到 ...

  9. 使用 Vuex + Vue.js 构建单页应用

    鉴于该篇文章阅读量大,回复的同学也挺多的,特地抽空写了一篇 vue2.0 下的 vuex 使用方法,传送门:使用 Vuex + Vue.js 构建单页应用[新篇] ------------------ ...

  10. Win10《芒果TV》更新v3.8.70周年版:升级高级配色、自动切换夜间模式

    官宣!光阴似箭,已过三年时光,我们一起从最初的青涩变成更加成熟起来,同呼吸共命运,匠心依旧,感恩有你,Win10版<芒果TV>全平台同步更新周年版v3.8.70,升级高级配色,新增自动切换 ...

随机推荐

  1. render(七)

    Vue 的 _render 方法是实例的一个私有方法,它用来把实例渲染成一个虚拟 Node.它的定义在 src/core/instance/render.js 文件中: Vue.prototype._ ...

  2. Java 11 新垃圾回收器 ZGC

    可伸缩.低延迟的垃圾回收器 GC 暂停时间不超过 10ms 堆管理容量范围(小M级别,大到T级别) 对应用吞吐量影响不超过15%(对比 G1) 为进一步的添加新特性和优化做基础 默认支持 Linux/ ...

  3. Oracle登录报错-ORA-00119

    报错 如果配置监听没有问题了,但是连接时又出现ORA-00119问题: ORA-00119: invalid specification for system parameter LOCAL_LIST ...

  4. app点击底部菜单切换标题

    <!DOCTYPE HTML><html><head> <meta charset="utf-8"> <meta name=& ...

  5. HTML表单处理

    一.表单简介 表单的处理是一个多进程.首先创建一张表单,以供用固话输入详细的请求信息.接着,输入的数据被发送到服务器,在服务器里这些数据得到编译和错误检测.如果PHP代码识别出一个或多个需要重新输入的 ...

  6. 2019-08-13 纪中NOIP模拟B组

    T1 [JZOJ1534] rank 题目描述 小h和小R正在看之前的期末&三校联考成绩,小R看完成绩之后很伤心,共有n个学生,第i个学生有一个总成绩Xi,因为他的排名是倒数第k个,于是小R想 ...

  7. 05 部署mysql关系数据库

    01 安装Mysql 在官网https://dev.mysql.com/上找到自己需要的版本并执行安装 sudo apt-get install mysql-server-5.7 02 运行和退出 # ...

  8. Js 事件委托 解决动态元素不能click点击的问题

    参考教程地址 https://blog.csdn.net/xiaolong20081/article/details/79792137 不想写了.直接看上面就行 采用事件委托或代理方式绑定 $(doc ...

  9. 压力测试:响应时间、并发、RPS的关系

    需要对服务器接口做压力测试前,要理解的一些术语含义:响应时间.并发.RPS 并发: 什么叫并发?并发不是我们理解的在loadrunner场景中设置并发数,而是正在系统中执行操作或者在系统的队列中排队的 ...

  10. centos7下使用selenium实现文件上传

    1.pip install SendKeys 2. 利用js去掉元素的隐藏属性,然后输入: 一般控制元素显示或隐藏是用display属性来实现的 style.display = “none”,表示元素 ...