CVI的时序如下 :de指示数据有效。
从下面的程序看,同步码的长度不会影响对有效数据的判断。同步码的作用更多的是用于计算行及一行的像素数目。
方案一:
1 module vga_1sym_2_2sym(
input clk_i,
input rst_p,
input [:] data_i,
input h_sync_i,
input v_sync_i,
input de_i , output [:] data_o,
output [:] h_sync_o,
output [:] v_sync_o,
output [:] de_o,
output vga_clk_o ); wire ctrl_clk;
wire vga_clk;
wire vga_clk_dvi2;
clkctrl u0_clkctrl (
.inclk (clk_i), // altclkctrl_input.inclk
.outclk (ctrl_clk) // altclkctrl_output.outclk
);
iopll u0 (
.rst (rst_p), // reset.reset
.refclk (ctrl_clk), // refclk.clk
.locked (), // locked.export
.outclk_0 (vga_clk), // outclk0.clk
.outclk_1 (vga_clk_dvi2) // outclk0.clk
); reg [:] data_r;
reg [:] vga_data_dly2;
reg [:] vga_data_dly3;
reg h_sync_r = ;
reg v_sync_r = ;
reg de_r = ;
always @( posedge vga_clk )
begin
data_r <= data_i;
h_sync_r <= h_sync_i;
v_sync_r <= v_sync_i;
de_r <= de_i;
end
// reg [1:0] de_dly = 2'b00;
// always @( posedge vga_clk )
// begin
// de_dly[1:0] <= {de_dly[0],de_i};
// end
// wire pos_de = (de_dly[1:0] == 2'b01 );
reg h_l_cnt = 'b0;
always @( posedge vga_clk )
begin
// if( pos_de )
// h_l_cnt <= 1'b1;
// else
h_l_cnt <= ~h_l_cnt;
end
reg [:]data_r2 = ;
reg [:] h_sync_r2 = 'b00;
reg [:] v_sync_r2 = 'b00;
reg [:] de_r2 = 'b00;
always @( posedge vga_clk )
begin
if( h_l_cnt ) begin
data_r2[:] <= data_r;
h_sync_r2[] <= h_sync_r;
v_sync_r2[] <= v_sync_r;
de_r2[] <= de_r; end else begin data_r2[:] <= data_r;
h_sync_r2[] <= h_sync_r;
v_sync_r2[] <= v_sync_r;
de_r2[] <= de_r;
end
end
reg vga_cvi_valid = ;
always @( posedge vga_clk )
begin
if( ~h_l_cnt )
vga_cvi_valid <= 'b1;
else
vga_cvi_valid <= 'b0; end // assign data_o = data_r2;
// assign h_sync_o = h_sync_r2;
// assign v_sync_o = v_sync_r2;
// assign de_o = de_r2; wire rd_empty;
wire [:] fifo_dout;
reg [:] rd_empty_r = 'b00;
wire rd_en ;
fifo_w22 u0_fifo_w22 (
.data ({data_r2,h_sync_r2,v_sync_r2,de_r2}), // fifo_input.datain
.wrreq (vga_cvi_valid), // .wrreq
.rdreq (rd_en), // .rdreq
.wrclk (vga_clk), // .wrclk
.rdclk (vga_clk_dvi2), // .rdclk
.q (fifo_dout), // fifo_output.dataout
.rdempty (rd_empty), // .rdempty
.wrfull () // .wrfull
);
always @( posedge vga_clk_dvi2 )
begin
rd_empty_r <= {rd_empty_r[],rd_empty};
end
assign rd_en = ~rd_empty_r[];
assign {data_o,h_sync_o,v_sync_o,de_o} = fifo_dout;
assign vga_clk_o = vga_clk_dvi2;
endmodule

现在用一种更简单的方式即可实现,

方案二:

module vga_1sym_2_2sym(
input clk_i,
input rst_p,
input [:] data_i,
input h_sync_i,
input v_sync_i,
input de_i , output [:] data_o,
output [:] h_sync_o,
output [:] v_sync_o,
output [:] de_o,
output vga_clk_o,
output vga_valid_o );reg [:] data_r;
reg [:] vga_data_dly2;
reg [:] vga_data_dly3;
reg h_sync_r = ;
reg v_sync_r = ;
reg de_r = ;
always @( posedge vga_clk )
begin
data_r <= data_i;
h_sync_r <= h_sync_i;
v_sync_r <= v_sync_i;
de_r <= de_i;
end
// reg [1:0] de_dly = 2'b00;
// always @( posedge vga_clk )
// begin
// de_dly[1:0] <= {de_dly[0],de_i};
// end
// wire pos_de = (de_dly[1:0] == 2'b01 );
reg h_l_cnt = 'b0;
always @( posedge vga_clk )
begin
// if( pos_de )
// h_l_cnt <= 1'b1;
// else
h_l_cnt <= ~h_l_cnt;
end
reg [:]data_r2 = ;
reg [:] h_sync_r2 = 'b00;
reg [:] v_sync_r2 = 'b00;
reg [:] de_r2 = 'b00;
always @( posedge vga_clk )
begin
if( h_l_cnt ) begin
data_r2[:] <= data_r;
h_sync_r2[] <= h_sync_r;
v_sync_r2[] <= v_sync_r;
de_r2[] <= de_r; end else begin data_r2[:] <= data_r;
h_sync_r2[] <= h_sync_r;
v_sync_r2[] <= v_sync_r;
de_r2[] <= de_r;
end
end
reg vga_cvi_valid = ;
always @( posedge vga_clk )
begin
if( ~h_l_cnt )
vga_cvi_valid <= 'b1;
else
vga_cvi_valid <= 'b0; end assign data_o = data_r2 ;
assign h_sync_o = h_sync_r2 ;
assign v_sync_o = v_sync_r2 ;
assign de_o = de_r2 ;
assign vga_clk_o = vga_clk;
assign vga_valid_o = vga_cvi_valid;
end

该实现过程与方案一相比,节省了PLL和FIFO,但输出了一个vga_valid_o信号,该信号连接到CVI的vid_datavalid信号。以下是vid_datavalid信号的定义:

意思是,CVI II IP核只在vid_datavalid为高电平时,才会读取vid信号,该信号用于CVI支持视频信号的过采样。也就是同一个像素对应多个时钟的情况下,只需要一个时钟的数据即可。

  原本我的想法是让vid_datavalid始终保持高电平状态,通过vga_cvi_valid信号控制de_o翻转,间隔一个时钟数据有效一次(其实在实现时v_sync_o,h_sync_o都有翻转,目前觉得可能不翻转h,v信号也许可行),但是画面很不正常。de_o的作用是指示vid_data是有效数据。

方案三:

尝试上面提到的h,v不翻转。保持vid_datavalid始终为高电平。

经过验证,可能不行。

实现1sym转换成2个sym送给CVI(VGA数据)的更多相关文章

  1. 将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据

    领导让在存储过程中批量添加数据,找出效率最高的,我看到后台代码后,发现可以将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据,知道还有其 ...

  2. GUID转换成16位字符串或19位数据(确保唯一)

    // <summary> /// 根据GUID获取16位的唯一字符串 /// </summary> /// <param name=\"guid\"& ...

  3. C#将DataTable转换成list的方法

    本文实例讲述了C#将DataTable转换成list及数据分页的方法.分享给大家供大家参考.具体如下: /// <summary>   /// 酒店评论列表-分页  /// </su ...

  4. list<?>转换成 对应的 class

    项目中用到的,list转换成bean.因为查询出来的数据用list 泛型接收,要返回 实体对象.所以需要对应转换. 主要用到的技术:反射. 上代码: public static <T> L ...

  5. Linux下ffmpeg添加Facebook/transform代码块实现将全景视频的球模型转换成立方体模型

    Facebook事实上已开始在平台中支持360度全景视频的流播,但公司对此并不满足.其工程师更是基于锥体几何学设计出了一套全新的视频编码,号称最高能将全景视频的文件大小减少80%.(VR最新突破:全景 ...

  6. DataTable 转换成 Json的3种方法

    在web开发中,我们可能会有这样的需求,为了便于前台的JS的处理,我们需要将查询出的数据源格式比如:List<T>.DataTable转换为Json格式.特别在使用Extjs框架的时候,A ...

  7. 微信小程序中利用时间选择器和js无计算实现定时器(将字符串或秒数转换成倒计时)

    转载注明出处 改成了一个单独的js文件,并修改代码增加了通用性,点击这里查看 今天写小程序,有一个需求就是用户选择时间,然后我这边就要开始倒计时. 因为小程序的限制,所以直接选用时间选择器作为选择定时 ...

  8. C#将Word转换成PDF方法总结(基于Office和WPS两种方案)

    有时候,我们需要在线上预览word文档,当然我们可以用NPOI抽出Word中的文字和表格,然后显示到网页上面,但是这样会丢失掉Word中原有的格式和图片.一个比较好的办法就是将word转换成pdf,然 ...

  9. DataTable转换成IList<T>的简单实现

    DataTable的无奈 很多时候,我们需要去操作DataTable.但DataTable的操作,实在是太不方便了.Linq?lambda表达式?统统没有... 特别是对现有结果集做进一步筛选,这样的 ...

随机推荐

  1. js继承的几种类型

    首先提供构造函数 1. 构造函数实现继承 原理:改变函数上下文实现继承(call,apply,return,bind) return {}/function(){}   如果返回值是对象 那么this ...

  2. docker-ce-17.09 镜像获取,创建,删除,保存

    一.安装docker的文档地址: https://docs.docker.com/engine/installation/linux/centos/ 二.安装docker 1.通过yum进行安装 &g ...

  3. threejs纹理

    纹理 纹理用来表现物体的细节.理论上可以将物体的每个细节建模出来,但是这样时间成本和性能成本都太高,因此,将物体的一些细节用纹理来表示. 图片纹理 图片纹理直接在物体表面应用图片.可以使用Textur ...

  4. admin 的流程 Xadmin

    提交根评论 显示根评论 --- render显示 --- ajax显示 提交子评论 显示子评论 ---- render显示 ---- Ajax显示(扩展) 评论树 博客:富文本编辑器 beautful ...

  5. c# 使用ssh.net 上传文件

    在ssh.net 客户端实例下无法普通用户切换到su root  超级用户,原因是tty 的不支持,具体原因未查, 连接时用超级用户,问题解决 使用ssh.net  能实现远程命令,  使用其中的sf ...

  6. hdu 5691(状压DP) Sitting in Line

    题目http://acm.hdu.edu.cn/showproblem.php?pid=5691 状态DP,dp[i][j],i 表示的是一种状态,这个状态指的是当前这个数取或不取,j表示的是以第j个 ...

  7. IDEA 的基本介绍

    1.工具界面 (1)工程下的 src 类似于 Eclipse 下的 src 目录, 用于存放代码. (2)工程下的.idea 和 project01.iml 文件都是 IDEA 工程特有的.类似于 E ...

  8. Latex基本用法

    空格 需要使用 \qquad,\quad,\,应该是占位符和变量之间需要有{}相隔. $$ C_{1} \qquad {C_2} $$ $$ C_{1} \quad {C_2} $$ $$ C_{1} ...

  9. 201621123008 《Java 程序设计》 第九周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 本次作业题集集合 1. List中指定元素的删除(题集题目) 1.1 实验总结.并回答:列举至 ...

  10. 把一行数字(readline)读进List并以科学计数法输出(write)到文件

    主要过程是读取的时候是一行字符串,需要Strip去除空格等,然后split变成一个List. 注意这时候数据结构是List但是每一个元素是Str性质的. 所以需要map(float,List)  把这 ...