实现1sym转换成2个sym送给CVI(VGA数据)
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数据)的更多相关文章
- 将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据
领导让在存储过程中批量添加数据,找出效率最高的,我看到后台代码后,发现可以将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据,知道还有其 ...
- GUID转换成16位字符串或19位数据(确保唯一)
// <summary> /// 根据GUID获取16位的唯一字符串 /// </summary> /// <param name=\"guid\"& ...
- C#将DataTable转换成list的方法
本文实例讲述了C#将DataTable转换成list及数据分页的方法.分享给大家供大家参考.具体如下: /// <summary> /// 酒店评论列表-分页 /// </su ...
- list<?>转换成 对应的 class
项目中用到的,list转换成bean.因为查询出来的数据用list 泛型接收,要返回 实体对象.所以需要对应转换. 主要用到的技术:反射. 上代码: public static <T> L ...
- Linux下ffmpeg添加Facebook/transform代码块实现将全景视频的球模型转换成立方体模型
Facebook事实上已开始在平台中支持360度全景视频的流播,但公司对此并不满足.其工程师更是基于锥体几何学设计出了一套全新的视频编码,号称最高能将全景视频的文件大小减少80%.(VR最新突破:全景 ...
- DataTable 转换成 Json的3种方法
在web开发中,我们可能会有这样的需求,为了便于前台的JS的处理,我们需要将查询出的数据源格式比如:List<T>.DataTable转换为Json格式.特别在使用Extjs框架的时候,A ...
- 微信小程序中利用时间选择器和js无计算实现定时器(将字符串或秒数转换成倒计时)
转载注明出处 改成了一个单独的js文件,并修改代码增加了通用性,点击这里查看 今天写小程序,有一个需求就是用户选择时间,然后我这边就要开始倒计时. 因为小程序的限制,所以直接选用时间选择器作为选择定时 ...
- C#将Word转换成PDF方法总结(基于Office和WPS两种方案)
有时候,我们需要在线上预览word文档,当然我们可以用NPOI抽出Word中的文字和表格,然后显示到网页上面,但是这样会丢失掉Word中原有的格式和图片.一个比较好的办法就是将word转换成pdf,然 ...
- DataTable转换成IList<T>的简单实现
DataTable的无奈 很多时候,我们需要去操作DataTable.但DataTable的操作,实在是太不方便了.Linq?lambda表达式?统统没有... 特别是对现有结果集做进一步筛选,这样的 ...
随机推荐
- Java08-java语法基础(七)构造方法
Java08-java语法基础(七)构造方法 一.构造方法 1.什么是构造方法? 构造方法(类方法)是一个方法名和类名相容的特殊的成员方法. 2.构造方法的作用? 当使用new关键字创建一个对象时,为 ...
- sqlserver数据库的分离与附加
当我们一台电脑上创建了数据库想要转移到另外一台电脑上时,由于数据库处于联机状态,不能够对数据库文件进行复制和迁移,所以我们可以将数据库从服务器上分离出去,这样我们就可以复制数据库文件了.然后将数据库文 ...
- 如何指定vim 的查找是从上往下还是从下往上[z]
vim 搜索可以是 / 或者 ?,前者是往下找,后者是往前找. 用 n 查找下一个的时候,就和这两个指令指定的方向相同.如果你想改变方向的话,比如想往下找,那么 / 完了直接回车就行了.表示再次使用上 ...
- Redhat(RHEL)配置静态IP
vim /etc/sysconfig/network NETWORKING=yes NETWORKING_IPV6=no HOSTNAME=itcc.dev GATEWAY=192.168.0.1 v ...
- SSI服务端包含技术
1.页面拆出来怎么样通过web服务浏览呢? 使用web服务(例如nginx)的SSI技术,将多个子页面合并渲染输出. 2.SSI是什么? 3. ssi包含类似于jsp页面中的incluce指令,ssi ...
- MFC 一个无参线程的CreateThread 使用
最近想把c#的一个工作中用到的软件用MFC 实现出来, 刚下手 要了解的东西挺多,不但要对c++的语法,大体看一遍. 还要看MFC 内一些窗体,之类的相关的定义,比如cpp ,.h 内的类的定义方式等 ...
- 8Q - 献给杭电五十周年校庆的礼物
我不能参赛,就送给学校一个DOOM III球形大蛋糕吧.等一等,吃蛋糕之前先考大家一个问题:如果校长大人在蛋糕上切了N刀(校长刀法极好,每一刀都是一个绝对的平面),最多可以把这个球形蛋糕切成几块呢? ...
- 64位Win7系统下vs2010调试无法连接oracle解决办法
具体的解决办法如下: 1.先将WebDev.WebServer20.EXE和WebDev.WebServer40.EXE文件从Program Files (x86)目录中拷贝出来放到c:\dev目录中 ...
- Windows MySQL5.7安装和配置
http://www.leixuesong.cn/category/mysql MySQL5.7是MySQL是最新的MySQL大版本,也是官方认为目前性能最好的.MySQL5.7也有很多改动,很多新的 ...
- ui设计用什么软件
Ui设计用什么软件?作为ui设计师,你必须要熟练的使用以下几款设计软件,不然可能也无法胜任ui设计师的职位. ui设计除了要学习一些基本的操作软件,如PS AI AE AXURE 以外呢,还要学习比如 ...
