4.1 概述在前面的章节,笔者非常详细的提供了一种数据缓存的构架,并且提供了完善的测试例子,对 构架的设计做了充分的测试验证。前面章节也完成了 OV5640 的图像缓存显示方案,总得来说没什么 难度,但是由于 OV5640 的输入信号是 720P@30HZ,而 HDMI输出是 720P@60HZ 所以本课程的三缓存设计可以最大程度上保证图像的输出结果。(7725的例子采用了相同的构架)。 4.2 构架设计对于稍微复杂一点的工程项目必须要有优秀的构架设计,优秀的设计构架的意义比具体写代码 更有价值,所以笔者建议读者在以后自己的项目中要多学习和思考构架的设计。笔者设计了一种基于 消息缓存模式的构架,可以广泛用于图像缓存,数据采集缓存,通信数据缓存等项目中。如下图所示, 摄像头数据经过sensor_decode 模块解码摄像头数据后将RGB时序图像数据输入到MIG_BURTS_IMAGE, 然后再流出来到 vga_lcd_driver 模块,vga_lcd_driver 模块输出的是 RGB 时序,进过 HDMI IP模块 后接到 HDMI显示器显示输出。 1)、OV5640摄像头接口:是连接到开发板的物理接口,摄像头模块安装FEP转CEP扩展卡上,默认安装CEP1接口。 2) 、HDMI 接口:是图形的输出接口,图像数据从 HDMI 接口输出 3) 、sensor_decode模块:解码 OV5640 摄像头的图像数据,然后转为 R/G/B 数据,同时需要产生 HS 信号、VS信号、de 信号提供给后续模块使用。如下面一段代码
4)、vga_lcd_driver 模块:产生 RGB(VGA)输出时序 5)、MIG_BURST_IMAGE 模块:管理图像数据和内存管理,MIG_BURST_IMAGE 模块中包括了 CH0_FIFO 模 块、CH6_FIFO 模块、MIG_DDR 控制器、MSG_FIFO 消息盒、M_S 内存管理状态机,此外还包括 CH0_FIFO 的读请求,以及 CH6_FIFO 的写请求。 4.3 主要模块源码分析4.3.1 sensor_decode.v
OV5640输入的图像是 1280X720分辨率的图形,为了观察数据的方便,未来观察行场信号是否正 确,笔者先利用上一课中用到的测试图形方案数据代码OV5640产生的 RGB 数据,而行场型号继续使 用OV5640产生的行场信号。这么做的目的,主要是我们在对OV5640解码的时候可能采样的颜色时序 会出问题,但是一开始又不能定位问题,这样可以循序渐进式解决问题。 4.3.2 vga_lcd_driver.v
vga_lcd_driver模块的作用是产生 1280X720 分辨率的RGB使出时序,RGB 的数据来源来自 CH6_FIFO。读者可以修改不同分辨率输出不同的测试图形。 4.3.3 CH0_FIFO FIFO IP 设置Step1:设置 Native 和 Independent Clocks Block RAM Step2:设置 FIFO 采用 Firt Word Fall Through 模式,FIFO 的写是 64bit 2048 深度 FIFO 的读是 512bit 256 深度 Step3:默认设置 Step4:设置计数器
4.3.4 CH6_FIFO FIFO IP 设置Step1:设置 Native 和 Common Clocks Block RAM Step2:设置 FIFO 采用 Firt Word Fall Through 模式,FIFO 的写是 32bit 32 深度 FIFO 的读是 64bit 16 深度 Step3:这一页设置默认 Step4:设置读FIFO 的 counter 计数器宽度是6bit
前面讲到 FIFO不支持从512BIT 转换为32bit所以需要添加以下代码将64Bit转换为32bit
4.3.5 MSG_FIFO 模块
MSG_FIFO 模块的作用是设计了一个消息的缓存,所有读写请求都会先保存在这消息队列里面然后再 按照先后顺序出列。M_S 模块会对 MSG_FIFO里面的消息进行处理。 MSG_FIFO_CLK :MSG_FIFO 的时钟信号 这里就是系统本模块的系统时钟和 MIG 控制器时钟一致。 MSG_FIFO_WRDATA:长度为 8 代表同时可以一次性存储 8 个不同信号 MSG_FIFO_WREN:写消息使能,当读 image_data_gen 和 vga_lcd_driver 模块的场信号过来的时候会 使能写 MSG_FIFO,把消息的状态进入 MSG_FIFO MSG_FIFO_RDDATA:读消息使能,M_S 状态机会逐条取出 MSG_FIFO 队列中的消息。 MSG_FIFO_FULL:消息满信号,不应该让此信号满,如果满必然发出消息溢出 MSG_FIFO_USEDW:记录目前已经写入的消息条数,这里最多记录 32 条消息 CH6_FIFO 的配置界面: Step1:设置 Native 和 Common Clocks Block RAM Step2:设置 FIFO采用 standard 模式,FIFO 的写是 8bit 32 深度读 FIFO 是 8bit 32 深度。 Step3:这一页默认不用设置 Step4:设置写FIFO 的 counter 计数器宽度5bit 4.3.6 CH0_FIFO_REQ/CH6_FIFO_REQ 模块
CH0_REQ:这个模块中,信号在CH0_FIFO 缓存一行数据后有效 CH6_REQ:这个模块中,当CH6_FIFO的数据小于一行开始读DDR并且写入。 4.3.7 M_S 内存管理状态机
最新评论资讯幻灯片
热门评论
热门专题
排行榜
XILINX 官网|站点统计|Archiver|手机版|米联客品牌主页|UISRC工程师开源站 ( 苏ICP备19046771号-2 ) GMT+8, 2025-4-2 15:32 , Processed in 0.200191 second(s), 87 queries . |