OpenRisc-27-wishbone接口的vga ipcore的分析与仿真
来源:互联网 发布:mac 打开rar文件 编辑:程序博客网 时间:2024/05/18 00:50
引言
图形,总是给人直观的感觉。想让ORPSoC能有image/video的输出,是一件很有意义的事情,而VGA就是其中一个不错的选择。
本小节就分析一下一个wishbone接口的vga模块。
1,模块准备
下载:
http://opencores.org/project,vga_lcd
2,模块的architecture
3,模块的使用
这一步需要一点与LCD/vedio相关的知识。我曾经写过一个LCDC的linux driver,并且有数字电视的开发经验,所以理解起来就容易了很多。
这里只把最重要的timing拿来。更过详细信息,请参考内附的spec.
下面这个图要仔细看,真正理解了才行。理解之后,后面的很多事情就好说了。
建议:想象一下,电视的刷新过程。
这个模块是比较简单的,没有复杂的图像处理功能,但是这里还是必须把下面几个概念搞明白:
1>行同步(水平同步),行宽,前肩,后肩。
2>列同步(垂直同步),场宽
3>回扫
4>像素
5>rgb
6>灰阶
7>wishbone的burst访问
8>双buffer工作机制
9>alpha blanking
10>fifo的underrun和overrun
11>调色板的本质作用
4,仿真的整体结构
要想对vga_eng_top这个模块进行仿真,需要建立必要的仿真模型,并将它们连接起来。
5,仿真过程概述
1>复位
2>测试寄存器的读写是否有问题(reg_test)
3>初始化mem。
4>测试vga所有模式下的输出时序是否正确(tim_test),共6个模式。
5>测试DVI pixel数据的正确性:dvi_pd_test
6>测试VGA pixel的数据的正确性:pd1_test
7>测试FIFO的underrun:ur_test
6,各个模式下参数的设置:
for(mode=0;mode<6;mode=mode+1) begin// reset corescen = 0;m0.wb_wr1( `CTRL, 4'hf, 32'h0000_0000);repeat(10)@(posedge clk);$display("Mode: %0d", mode);case(mode)0:beginthsync = 0;thgdel = 0;thgate = 319; // gate = 320thlen = 345;tvsync = 0;tvgdel = 0;tvgate = 239; // vgate = 240tvlen = 245;hpol = 0;vpol = 0;cpol = 0;bpol = 0;end1:beginthsync = 18;thgdel = 18;thgate = 319; // gate = 320thlen = 390;tvsync = 18;tvgdel = 18;tvgate = 239; // vgate = 240tvlen = 290;hpol = 1;vpol = 0;cpol = 0;bpol = 0;end2:beginthsync = 1;thgdel = 1;thgate = 639; // hgate = 640thlen = 644;tvsync = 1;tvgdel = 1;tvgate = 479; // vgate = 480tvlen = 484;hpol = 0;vpol = 1;cpol = 0;bpol = 0;end3:beginthsync = 0;thgdel = 2;thgate = 799; // hgate = 800thlen = 804;tvsync = 0;tvgdel = 2;tvgate = 599; // vgate = 600tvlen = 604;hpol = 0;vpol = 0;cpol = 1;bpol = 0;end4:beginthsync = 3;thgdel = 2;thgate = 799; // hgate = 800thlen = 807;tvsync = 2;tvgdel = 2;tvgate = 599; // vgate = 600tvlen = 606;hpol = 0;vpol = 0;cpol = 0;bpol = 1;end5:beginthsync = 6;thgdel = 2;thgate = 799; // hgate = 800thlen = 810;tvsync = 4;tvgdel = 2;tvgate = 599; // vgate = 600tvlen = 608;hpol = 1;vpol = 1;cpol = 1;bpol = 1;endendcase/*thsync = 0;thgdel = 0;thgate = 64;thlen = 70;tvsync = 0;tvgdel = 0;tvgate = 64;tvlen = 70;hpol = 0;vpol = 0;cpol = 0;bpol = 0;*/m0.wb_wr1( `HTIM, 4'hf, {thsync, thgdel, thgate} );m0.wb_wr1( `VTIM, 4'hf, {tvsync, tvgdel, tvgate} );m0.wb_wr1( `HVLEN, 4'hf, {thlen, tvlen} );m0.wb_wr1( `CTRL, 4'hf, {16'h0,bpol, cpol,vpol, hpol,1'b0,// PC2'h0,// CD2'h0,// VBL2'h0,// Reserved5'h01// Bank Switch, INT, VideoEn});repeat(2) @(posedge vsync);scen = 1;repeat(4) @(posedge vsync); end
7,仿真结果
说明:仿真过程需要很长时间(我的电脑超过30mins),所以只选取了一行数据的输出波形,如下;
可以看到行同步型号,混合同步信号,blank信号,rgb信号等重要的几个信号的时序关系。
8,小结
剩下的工作就是FPGA验证了,参考之前的blog内容,将其挂在arbiter_dbus上面。
与之前那个FFT模块的接口一样,也是一个slave接口,和一个master接口。
http://blog.csdn.net/rill_zhen/article/details/8849149
附:
本实验的所有源码和文档我已上传:
http://download.csdn.net/detail/rill_zhen/5353755
good luck!
- OpenRisc-27-wishbone接口的vga ipcore的分析与仿真
- OpenRisc-33-关于用户空间程序直接访问ipcore问题的分析与解决
- OpenRisc-31-关于在设计具有DMA功能的ipcore时的虚实地址转换问题的分析与解决
- OpenRisc-11-编写ipcore 的linux driver,然后run helloworld
- OpenRisc-11-编写ipcore 的linux driver,然后run helloworld
- AXI STREAM 接口的VGA控制器分析
- OpenRisc-57-ORPSoC仿真环境的构建
- OpenRisc-22-添加自己的master (DMA-like) ipcore到ORSoC并测试
- VGA接口的研究
- OpenRisc-6-wishbone实验
- OpenRisc-6-wishbone实验
- OpenRisc-37-OpenRISC的CPU&core的整体架构分析
- OpenRisc-28-ORPSoC的clock子系统分析
- OpenRisc-29-ORPSoC的debug子系统分析
- OpenRisc-40-or1200的MMU模块分析
- OpenRisc-41-or1200的cache模块分析
- OpenRisc-42-or1200的ALU模块分析
- OpenRisc-43-or1200的IF模块分析
- 简单的字符串算法
- hdu 1422 (最大非负字段和)
- 弹出 提示窗口 背景显示灰色 可移动 模板
- Android ListView的滚动条样式
- Chrome源代码分析之线程模型续1(十三)
- OpenRisc-27-wishbone接口的vga ipcore的分析与仿真
- GridView鼠标拖拽改变列宽
- 终于搞清楚java的序列化是干嘛的了。。
- VS2010 cannot attach x64 process on x64 machine
- ios打印程序使用内存、真机(模拟器)剩余内存办法
- Linux环境下获取网卡连接状态
- PHP中数组排序
- POJ 2823 Sliding Window(单调队列)
- Ubuntu如何添加光盘和ISO文件源