CVO输出如果是一个像素并行输出,选择内嵌人插入同步码。如果两个像素并行输出是不能选择内嵌的,只能选择分离的方式。如果把输出的并行数据给VIP并且要求是内嵌,那只能在内部转或者外部转。

这里是实现外部转换的方式。

程序是比较简单的,只是防止以后找不到程序反复得写而已。

实现过程是:

1、先把两个像素转换成一个像素

    module sym2_2_sym1(
input clk_i,
input [:] h_sync_i,
input [:] v_sync_i,
input [:] de_i,
input [:] vin, input clk_o,
output h_sync_o,
output v_sync_o,
output [:] vout
);
reg de_i_r = 'b0;
reg cnt = 'b0;
reg [:] din_r = 'd0;
reg [:] h_sync_i_r = 'b00;
reg [:] v_sync_i_r = 'b00;
reg h_sync_r =;
reg v_sync_r = ;
reg [:] vout_r =;
/*********************************************************
检测de信号上升沿,用于指示每行第一个有效数据
**********************************************************/
always @( posedge clk_o )
begin
de_i_r <= de_i[]; end
wire pos_de = ({de_i_r,de_i[] } == 'b01 );
always @( posedge clk_o )
begin
cnt <= pos_de ? : ~cnt; end
/*********************************************************
由于de上升沿延时一个时钟周期,所以对数据也延时一个时钟周期
**********************************************************/
always @( posedge clk_o )
begin
din_r <= vin;
h_sync_i_r <= h_sync_i;
v_sync_i_r <= v_sync_i;
end
/*********************************************************
2转1
**********************************************************/ always @( posedge clk_o )
begin
vout_r <= cnt ? din_r[:] : din_r[:];
h_sync_r <= cnt ? h_sync_i_r[]: h_sync_i_r[];
v_sync_r <= cnt ? v_sync_i_r[] : v_sync_i_r[];
end assign h_sync_o = h_sync_r;
assign v_sync_o = v_sync_r;
assign vout = vout_r; endmodule

2、在像素中插入同步码

module seperate_2_embeded(
input clk,
input h_sync,//低电平有效
input v_sync,//低电平为有效区间
input f_sync,
input [:] h_black_len,
input [:] vin,
output [:] vout ); reg [:] h_r = ;
reg [:] v_r = ;
reg [:] vin_r1 = ;
reg [:] vin_r2 = ;
reg [:] vout_r = ;
(*keep*)reg [:] cnt = ;
wire [:] xyz ;
wire black_len_m4;
reg black_len_m4_dly = 'b0;
/************************************************************************
把行消隐区间的长度去掉4个
************************************************************************/
always @( posedge clk )
begin
h_r <= {h_r[:],h_sync};
v_r <= {v_r[:],v_sync};
end
assign black_len_m4 = h_r[] & h_sync;
/************************************************************************
找到上升沿与下降沿,即SAV与EAV的位置
************************************************************************/
always @( posedge clk )
begin
black_len_m4_dly <= black_len_m4;
end assign pos_black_len_m4 = {black_len_m4_dly,black_len_m4} == 'b01;
assign neg_black_len_m4 = {black_len_m4_dly,black_len_m4} == 'b10;
/************************************************************************
在SAV 和EAV位置计数
************************************************************************/
always @( posedge clk )
begin
if( pos_black_len_m4 | neg_black_len_m4 )
cnt <= ;
else if( cnt == )
cnt <= cnt;
else
cnt <= cnt + 'b1;
end always @( posedge clk )
begin
case( cnt )
'h0 :
vout_r <= 'hffff;
'h1 :
vout_r <= 'h0000;
'h2 :
vout_r <= 'h0000;
'h3 :
vout_r <= {{xyz[:]}};
default:vout_r <= data[];
endcase end reg[:] data[:];
reg [:] i;
generate
// genvar i;
always @( posedge clk )
begin
for(i = ;i <= ;i= i + )
data[i+] <= data[i];
end endgenerate always @( posedge clk )
begin
data[] <= vin;
end assign xyz = calc_xyz({'b0,v_r[0],h_r[0]});
assign vout = vout_r;
function [:] calc_xyz;
input [:] FVH;
case (FVH)
'b000 : calc_xyz = 10'h200;
'b001 : calc_xyz = 10'h274;
'b010 : calc_xyz = 10'h2ac;
'b011 : calc_xyz = 10'h2d8;
'b100 : calc_xyz = 10'h31c;
'b101 : calc_xyz = 10'h368;
'b110 : calc_xyz = 10'h3b0;
'b111 : calc_xyz = 10'h3c4;
endcase
endfunction endmodule

实现两个sym转一个sym的更多相关文章

  1. zeromq中两个dealer 通过一个router进行通信

    发现有童鞋不是很清楚ZMQ中的“请求-回复”模式中的ROUTER怎么用,所以简单介绍一下“请求-回复”模式的使用(最后付代码). 一.讲一讲 1.要使用zmq 通过一个router进行通信,你首先需要 ...

  2. C# 图片的裁剪,两个图片合成一个图片

    图片的裁剪,两个图片合成一个图片(这是从网上摘的) /// <summary>         /// 图片裁剪,生成新图,保存在同一目录下,名字加_new,格式1.png  新图1_ne ...

  3. c# 写着玩的,两个Task并发,一个写队列一个读队列的异常情况

    class Program { class TestEnqueue { static Queue<string> str = new Queue<string>(); publ ...

  4. 两个dropDownList和一个GridView的选择与显示

    很久没有写ASP.NET了,今天有看到论坛上一个问题:"两个dropDownList和一个GridView,已经进行了数据绑定,现在想让第一个下拉菜单的数据改变时,第二个下拉菜单自动变到相应 ...

  5. java cache过期策略两种实现,一个基于list轮询一个基于timer定时

    最近项目要引入缓存机制,但是不想引入分布式的缓存框架,所以自己就写了一个轻量级的缓存实现,有两个版本,一个是通过timer实现其超时过期处理,另外一个是通过list轮询.       首先要了解下ja ...

  6. 客户端一个http连接包含两个方向,一个是这个http连接的输入,另一个是这个http连接的输出。

    1.客户端一个http连接包含两个方向,一个是这个http连接的输入,另一个是这个http连接的输出. 利用httpclient进行ip地址和端口号连接后,http的输出端作为http请求参数设置.h ...

  7. 《剑指Offer》附加题_用两个队列实现一个栈_C++版

    在<剑指Offer>中,在栈和队列习题中,作者留下来一道题目供读者自己实现,即"用两个队列实现一个栈". 在计算机数据结构中,栈的特点是后进先出,即最后被压入(push ...

  8. 已知有两个水杯,一个11L一个7L,水可以任意使用,求怎么得到2L 的详细解法

    问题:有两个水杯,一个是11L一个是7L,水可以随便用,怎么得到2L 1.了解问题的本质 问题中给出了两个杯子,只有这两个杯子有量度,所以只能让杯中的水满进满出才能确定杯子中最后有多少水. 现在问题要 ...

  9. Python两个栈实现一个队列

    牛客网原题: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型.   实现这个算法的方式有很多种,这里就写一种比较简单易懂的:虽然可能算法和效率上不太出色,当大多数人 ...

随机推荐

  1. DMZ原理与应用

    DMZ是英文“demilitarized zone”的缩写,中文名称为“隔离区”,“非军事化区”.它是为了解决安装防火墙后外部网络不能访问内部网络服务器的问题,而设立的一个非安全系统与安全系统之间的缓 ...

  2. JQuery UI之Autocomplete(1)入门程序

    1.Autocomplete的主要属性:source:即为指定智能提示下拉框中的数据来源,支持三种类型.  Array,主要用于本地化数据提供,支持两种格式:字符串数组 [ "Choice1 ...

  3. ADT和DS

    Abstract Data Type vs. Data Structrue 抽象数据类型=数据模型+定义在该模型上的一组操作.  interface 数据结构=基于某种特定语言,实现ADT的一整套算法 ...

  4. java String 中替换"\"为"\\"

    表示路径的字符串  c:\work\test\afd.out, 要形成 c:\\work\\test\\afd.out   用 String str = strBsf.replaceAll(" ...

  5. 安装doxygen(一个自动文档生成工具)+Graphviz图形可视化软件

    参考文章: http://www.fmddlmyy.cn/text21.html http://www.cnblogs.com/duguguiyu/archive/2008/06/29/1231852 ...

  6. go语言中操作mysql的方法

    需要下载指定的golang的mysql驱动包 > go get github.com/go-sql-driver/mysql 下面的例子: package main; import ( &quo ...

  7. Json解析数据

    Json数据解析(重点网址推荐:www.json.org   code.google.com/   https://www.json.com/) 1:什么是Json? 2:Json数据格式的特点? 3 ...

  8. Android Studio 解析json文件出现中文乱码解决方法

    作为一个Android开发初学者,好不容易找到解决方法,跟大家分享一下, 其实很简单,只要保持服务器上的文件(date2.json)与软件的编码方式一样就行. 我用的Android Studio是ut ...

  9. js Map和Set

    Map Map是一组键值对的结构,具有极快的查找速度.JavaScript的对象有个小问题,就是键必须是字符串.但实际上Number或者其他数据类型作为键也是非常合理的.为了解决这个问题,最新的ES6 ...

  10. Centos7 开机启动命令行模式

    1.在图形界面下单击鼠标右键,选择“Konsole”: 2. 获取当前系统启动模式,输入:systemctl get-default 3.查看配置文件, cat /etc/inittab 4.通过以上 ...