每天进步一点点------DE2-70-TV例子说明
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例子说明的更多相关文章
- Flex移动皮肤开发(三)
范例文件 mobile-skinning-part3 在关于创建Flex移动皮肤系列文章的第二部分里,我们讨论了屏幕密度(DPI)对组件皮肤以及移动应用布局所带来的影响. 我还展示了如何使用缩放应用, ...
- 数据结构与算法->树->2-3-4树的查找,添加,删除(Java)
代码: 兵马未动,粮草先行 作者: 传说中的汽水枪 如有错误,请留言指正,欢迎一起探讨. 转载请注明出处. 目录 一. 2-3-4树的定义 二. 2-3-4树数据结构定义 三. 2-3-4树的可以得到 ...
- OJ题:成绩排序
题目描述 查找和排序 题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩 都按先录入排列在前的规则处理. 例示: jack 70 peter 96 Tom 70 smit ...
- pkuwc2018题解
题解: 思路挺好想的..然而今天写代码写成傻逼了 d1t1: 首先比较暴力的就是$f[i][j]$表示i个这个点是j的概率 然后前缀和一下dp就是$n^2$的 部分分树形态随机就说明树深度是$log$ ...
- vuex和vuejs
前言:在最近学习 Vue.js 的时候,看到国外一篇讲述了如何使用 Vue.js 和 Vuex 来构建一个简单笔记的单页应用的文章.感觉收获挺多,自己在它的例子的基础上进行了一些优化和自定义功能,在这 ...
- C#小知识点积累
1.sealed 修饰符 概念: C#提出了一个密封类(sealed class)的概念,帮助开发人员来解决这一问题. 密封类在声明中使用sealed 修饰符,这样就可以防止该类被其它类继承.如果试图 ...
- 用vuex构建单页
原文地址:点我 前言:在最近学习 Vue.js 的时候,看到国外一篇讲述了如何使用 Vue.js 和 Vuex 来构建一个简单笔记的单页应用的文章.感觉收获挺多,自己在它的例子的基础上进行了一些优化和 ...
- 【死磕JVM】看完这篇我也会排查JVM内存过高了 就是玩儿!
前言 CPU 是时分的,操作系统里面有很多线程,每个线程的运行时间由CPU决定,CPU会分给每一个线程一个时间片,时间片是一个很短的时间长度,如果在时间片内,线程一直占有,就是100%,我们应该意识到 ...
- 使用 Vuex + Vue.js 构建单页应用
鉴于该篇文章阅读量大,回复的同学也挺多的,特地抽空写了一篇 vue2.0 下的 vuex 使用方法,传送门:使用 Vuex + Vue.js 构建单页应用[新篇] ------------------ ...
- Win10《芒果TV》更新v3.8.70周年版:升级高级配色、自动切换夜间模式
官宣!光阴似箭,已过三年时光,我们一起从最初的青涩变成更加成熟起来,同呼吸共命运,匠心依旧,感恩有你,Win10版<芒果TV>全平台同步更新周年版v3.8.70,升级高级配色,新增自动切换 ...
随机推荐
- 最近公共祖先 Lowest Common Ancestors
基于深度的LCA算法: 对于两个结点u.v,它们的深度分别为depth(u).depth(v),对于其公共祖先w,深度为depth(w),u需要向上回溯depth(u)-depth(w)步,v需要d ...
- phpstorm对比代码
方法一 首先在phpstorm中左侧的资源管理器中,按住键盘上的CTRL键选中两个文件,然后鼠标右键,点击菜单中的"Compare Tow Files",就可以了,如下图 方法二 ...
- TD - SimpleTextarea
html模板 <input dojoType="bootstrap.form.SimpleTextarea" dojoAttachPoint="assetDescr ...
- 'ssh-keygen' 不是内部或外部命令,也不是可运行的程序
右键我的电脑,点击环境变量,设置系统配置里面的Path 新增一个 D:\ruanjiananzhuangdizhi\Git\usr\bin 路径就可以了
- 洛谷P1028 数的计算
https://www.luogu.org/problem/P1028 #include<cstdio> using namespace std; int main(){ ,i,f[]; ...
- Myeclipse异常
打不开文件 问题描述:Myeclipse然打开什么东西都报错了:Could not open the editor: Invalid thread access 解决方法:1.cmd 2.cd 进入你 ...
- spring boot使用freemarker模版整合spring Data JPA
目录结构 第一步:在pom.xml文件中添加依赖 <!--模板依赖--> <dependency> <groupId>org.springframework.boo ...
- python3爬取百度知道的问答并存入数据库(MySQL)
一.链接分析: 以"Linux"为搜索的关键字为例: 首页的链接为:https://zhidao.baidu.com/search?lm=0&rn=10&pn=0& ...
- java多线程--死锁
1. Java中导致死锁的原因 Java中死锁最简单的情况是,一个线程T1持有锁L1并且申请获得锁L2,而另一个线程T2持有锁L2并且申请获得锁L1,因为默认的锁申请操作都是阻塞的,所以线程T1和T2 ...
- 概念理解_L2范数(欧几里得范数)
L1范数 L1范数是指向量中各个元素绝对值之和 L2范数 L2范数.欧几里得范数一些概念. 首先,明确一点,常用到的几个概念,含义相同. 欧几里得范数(Euclidean norm) ==欧式长度 = ...