OV6620数字摄像头IP核的设计与实现_第1页
OV6620数字摄像头IP核的设计与实现_第2页
OV6620数字摄像头IP核的设计与实现_第3页
OV6620数字摄像头IP核的设计与实现_第4页
OV6620数字摄像头IP核的设计与实现_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、摘要摘要 SOPC 是 Altera 公司提出来的一种灵活高效的SOC 解决方案,它将处理器、存 储器、I/O 口、LVDS 等系统设计需要的功能模块集成到一个可编程器件上,构成 一个可编程的片上系统。 Nios II 是建立在FPGA 上的嵌入式软核处理器,有很强的灵活性。而作为体 现 Nios II 灵活性的两个最主要方面的自定义外设和自定义指令,则越来越受到人 们的关注。 本文研究以 SOPC Builder 为平台,设计基于 Avalon 总线的从外设OV6620 数字 摄像头的 IP 软核控制器。论文首先介绍了SOPC 技术,其次介绍了 OV6620 的特 性,最后重点论述了如何设计

2、从外设的底层硬件描述及软件驱动程序。该设计在 实验箱上完成并得到了正确的结果。 关关键键词词 SOPC; Nios II; 自定义外设; OV6620 数字摄像头 Abstract SOPC (System On Programmable Chip) is a flexible, efficient solution which is developed by Altera corporation. It could build a SOC design by integrating processor, memory, I/O, LVDS and other peripherals into

3、 one chip, on which forms a programmable system. The Nios II processor is a configurable soft-core processor which is based on the FPGA. As the most important respects of this technology, the custom peripheral and instructions have been paid more and more attention. The design of a custom component,

4、 ov6620 controller of Nios II IP soft-core, is discussed based on the Avalon bus architecture, which uses SOPC Builder as a platform. Firstly the technology of SOPC was introduced. Next the characteristic of ov6620 digital camera was talked about .Finally, how to design a slave Avalon interface from

5、 hardware to software is emphasized. This design has been completed in the experimental box and got the right result on test. Key Word SOPC; Nios II; custom peripheral; OV6620 digital camera 目录目录 摘要摘要.- 2 - ABSTRACT.- 3 - 1. 引言引言.- 5 - 2. SOPC 技术简介技术简介.- 6 - 2.1 SOPC 技术.- 6 - 2.2 NIOS II 软核处理器.- 8 -

6、 2.2.1 Nios II 软核处理器简介.- 8 - 2.2.2 Nios II 嵌入式的软硬件开发流程.- 8 - 2.3 AVALON 总线.- 10 - 2.3.1 Avalon 总线简介.- 10 - 2.3.2 本设计中使用的接口信号 .- 10 - 2.4 定制用户外设简介 .- 11 - 2.4.1 元件的组成部分 .- 11 - 2.4.2 元件的组成模块 .- 11 - 2.4.3 元件的定制步骤 .- 11 - 3. OV6620 数字摄像头介绍数字摄像头介绍.- 13 - 3.1 OV6620 简介 .- 13 - 3.2 OV6620 引脚介绍 .- 13 - 3.

7、3 图像的采集过程 .- 14 - 3.4 摄像头的配置状态 .- 15 - 3.5 其他状态 .- 15 - 4. OV6620 控制器外设的设计过程控制器外设的设计过程.- 16 - 4.1 硬件功能的规划 .- 16 - 4.2 使用 VHDL 来描述硬件逻辑 .- 16 - 4.3 自定义元件的封装 .- 17 - 4.4 编写测试元件的 C 文件.- 20 - 4.5 验证结果 .- 22 - 5. 总结总结.- 23 - 附录附录 1.- 24 - 附录附录 2.- 28 - 参考文献参考文献.- 29 - 1. 引言引言 将 IP 硬核直接植入FPGA 的解决方案存在很大的不足,

8、例如设计者无法根据 实际需要改变处理器的总线规模、接口方式、指令形式等结构,而如果利用软核处 理器,就能有效的弥补以上的不足。 Altera 公司提供的Nios II 软核处理器是用户可随意配置和构建的32 位嵌入式 处理器 IP 核,采用Avalon 总线结构通信接口。在把Nios II 植入 FPGA 前,用户可 以根据设计要求,利用Quartus II 和 SOPC Builder 对 Nios II 及其外设进行构建,使 该系统在硬件结构、功能特点、资源占用等方面满足用户系统设计的要求。 在通常情况下,用户可以从供应商提供的IP 库中选择组件来组装系统。当所 提供的组件不能满足用户的要

9、求时,由于Nios II 软核处理器具有自定义的功能, 用户可以通过自定义逻辑来实现所要求的功能,体现了强大的 设计灵活性。 本文在介绍了SOPC 相关知识和OV6620 的主要特性的基础上主要论述了 OV6620 数字摄像头控制器自定义外设的设计方法,所做的工作有: 1.使用 VHDL 编写硬件逻辑,描述怎样对OV6620 数字摄像头进行控制驱动, 其中主要做的是对SCCB 协议的描述; 2.使用 SOPC Builder 元件编辑器来对编写的硬件逻辑元件进行封装,生成一 个自定义元件; 3.建立一个完整的SOPC Builder system,包含一个OV6620 数字摄像头控制 器元件及

10、其他必要的测试外设。 4.编写验证控制器件的 C 程序,通过 UART 发送图像数据到上位机,并通 过 SCCB 对摄像头进行配置,观察数据是否符合配置要求,验证结果的正 确性。 通过以上过程,完成一个可以直接控制 OV6620 数字摄像头的 IP 核,并给出 了一个简单的通过 Nios II 处理器控制该核的程序,以方便其它相关项目的使用。 2. SOPC 技术简介技术简介 2.1 SOPC 技术技术 在集成电路(IC)发展初期,电路设计主要是器件的物理版图设计。后来出 现了集成电路单元库,使得集成电路设计从器件级进入逻辑级,极大地推动了IC 产业的发展。随着IC 设计与工艺水平的提高,原先

11、由许多IC 组成的电子系统可以 集成到一个芯片上,构成SOC(System on a chip,片上系统)。SOC 的设计思想有 别于普通IC:SOC 从整个系统的角度出发,把处理机制、模型算法、芯片结构直 至器件的设计紧密结合起来,在单个(或少数几个)芯片上实现整个系统的功能。 SOC 的设计以IP 核为基础,以分层次的硬件描述语言为系统功能和结构的主要描 述手段,并需要借助EDA 工具完成。研究表明,与IC 组成的系统相比,由于 SOC 设计能够综合考虑整个系统的各种情况,因而可以在同样的工艺条件下,实 现更高性能的系统指标。 SOPC(System on programmable chi

12、p,可编程的片上系统),是 Altera 公司提 出来的一种灵活、高效的SOC 解决方案,是一种新的软硬件协同设计的系统设计 技术。它将处理器、存储器、I/O 口等系统设计需要的功能模块集成到一个可编程 器件上,构成一个可编程的片上系统。 SOC 的实现方法目前可以采用ASIC(专用集成电路)技术和 PLD(Programmable logic device,可编程逻辑器件)以及基于Hardcopy 的 SOC 实现。 ASIC 是一种为专门目的而设计的集成电路,是指应特定用户要求和特定电子 系统的需要而设计、制造的集成电路。数字集成电路的通用性和大批量生产,使电 子产品成本大幅度下降,推进了

13、计算机通信和电子产品的普及,但同时也产生了 通用与专用的矛盾,以及系统设计与电路制作脱节的问题。 ASIC 在批量生产时与 通用集成电路相比具有体积更小、功耗更低、可靠性提高、性能提高、保密性增 强、成本降低等优点。 同时,集成电路规模越大,组建系统时就越难以针对特殊要求加以改变。为 解决这些问题,就出现了以用户参加设计为特征的专用集成电路,它能实现整机 系统的优化设计,性能优越,保密性强。 ASIC 分为全定制和半定制。全定制设计需要设计者完成所有电路的设计,因 此需要大量人力物力,灵活性好但开发效率低下。如果设计较为理想,全定制能 够比半定制的ASIC 芯片运行速度更快。半定制使用库里的标

14、准逻辑单元,设计时 可以从标准逻辑单元库中选择SSI(门电路)、MSI(如加法器、比较器等)、数据通路 (如 ALU、存储器、总线等)、存储器甚至系统级模块(如乘法器、微控制器等)和 IP 核,这些逻辑单元已经布局完毕,而且设计得较为可靠,设计者可以较方便地完 成 系统设计。 现代 ASIC 常包含整个32-bit 处理器,类似 ROM、RAM、EEPROM、Flash 的 存储单元和其他模块。 这样的 ASIC 常被称为SOC。 PLD 实际上是一种电路的半成品芯片,这种芯片是按一定排列方式集成了大 量的门和触发器等基本逻辑元件,出厂时不具备特定的逻辑功能,需要用户 编程后 才能实现逻辑功能

15、,编程的含义就是利用专用的开发工具对其进行再加工,在片 内进行电路连接,使之完成某个逻辑电路或系统的功能,成为一个可再设计电子 系统中使用的专用芯片。 目前使用较广的PLD 有 CPLD 和 FPGA 两大类,CPLD 专指那些集成规模大 于 1000 门以上的可编程逻辑器件。FPGA 是现场可编程门阵列,它是从门阵列中 发展来的。由于FPGA 的规模比CPLD 大,因此SOPC 一般使用FPGA 来实现 SOC 的功能。现今,可将SOPC 视为是基于FPGA 解决方案的SOC。 FPGA 在结构上已经实现了复杂 SOC 系统所需要的主要功能,如FPGA 中可 能含有 CPU、存储器、DSP、

16、PLL 以及兼容于各种标准的接口。 Hardcopy 就是利用原有的FPGA 开发工具,将成功实现于FPGA 器件上的 SOPC 系统通过特定的技术直接向ASIC 转化,从而解决传统ASIC 设计中普遍存在 的问题。它是一种全新的SOC 级 ASIC 设计解决方案,既是将专用的硅片设计和 FPGA 至 Hardcopy 自动迁移过程结合在一起的技术。首先利用Quartus II 将系统模 型成功实现于Hardcopy FPGA 上,然后帮助设计者把可编程解决方案无缝的迁移 到低成本的ASIC 上。这样,Hardcopy 器件就把大容量FPGA 的灵活性和ASIC 的 市场优势结合起来,实现对于

17、有大批量要求并对成本敏感的电子产品上,从而避 开了直接设计ASIC 的困难。 三种实现方法的比较见表2-1。 表 2-1 三种 SOC 实现方法对比 指标基于 ASIC 的 SOC 基于 FPGA 的 SOC(SOPC) 基于 Hardcopy 的 SOC 单片成本低较高较低 开发周期长(20 周)短(10 周)较短(20 周) 开发成本 设计工程成本高 掩膜成本高 软件工具成本高 设计工程成本低 无掩膜成本 软件工具成本低 设计工程成本低 掩膜成本低 软件工具成本低 一次投片情况 一次投片成功率低, 成本高,耗时长 可现场配置 一次投片成功率近 100%,成本低,耗 时短 可重构性不可重构可

18、重构不可重构 2.2 Nios II 软核处理器软核处理器 2.2.1 Nios II 软核处理器简介软核处理器简介 在 SOC 中,往往需要集成一个甚至若干个处理器,包括RISC 处理器、DSP 处 理器以及某些专门应用设计的专用指令集处理器。这些处理器是SOC 的一个重要 组成部分。处理器和SOC 的其余部分融合在一起,共同构成一个完整的系统。因 此,将集成在SOC 上的处理器称为嵌入式处理器。 目前最有代表性的软核处理器有Altera 公司的 Nios II 核,以及Xilinx 公司的 Microblaze 核。在本设计中,采用Nios II 软核。 继第一代可配置嵌入式软核处理器Ni

19、os 之后,2004 年 6 月,Altera 公司又推出 了性能更高的Nios II 嵌入式软核处理器。它与2000 年上市的原产品Nios 相比,最 大处理性能提高了3 倍,而 CPU 内核部分的面积最大可缩小一半。 Nios II 系列 32 位 RISC 嵌入式处理器具有超过200DMIP 的性能,在FPGA 中 实现的成本只有35 美分。由于处理器是软核形式,具有很大的灵活性,可以在多 种系统设置组合中进行选择,满足成本和功能要求。采用Nios II 处理器进行设计, 可以帮助用户将产品迅速推向市场,延长产品 使用周期,防止出现处理器逐渐过时 的情况。 Nios II 以软件形式提供

20、了标准外围设备和用户自定义的外围设备。根据实际 的开发应用,Nios II 提供了如时钟、串行通信、通用I/O 接口、SDRAM 控制器以 及其它存储器的控制器,在开发软件中列出了所有由Altera 公司以及第三方发布的 软件形式的外围设备IP 核。由于用户的需要,用户也可以创建自己的自定义外围 设备并将其集成到Nios II 处理器系统中,由于硬件的速度比软件快,因此 原来有 些使用软件编程来完成的外围数据处理现在使用自定义的外围设备将大幅度提高 系统的性能。 2.2.2 Nios II 嵌入式的软硬件开发流程嵌入式的软硬件开发流程 下图为 Nios II 的开发流程图(图2.1)。 图 2

21、.1 Nios II 开发流程图 硬件开发的具体流程: 1)用 SOPC Builder 系统生成软件来选取合适的CPU、存储器以及外围设备, 并定制它们的功能,分配外设地址及中断号,设定复位地址,最后生成 系统。用户也可以添加用户自身定制指令逻辑到Nios II 内核以加速CPU 性能,或添加用户外设以减轻CPU 的任务。 2)使用 SOPC Builder 生成 Nios II 系统后,将其集成到整个Quartus II 工程中。 可以在 Quartus II 工程中加入Nios II 系统以外的逻辑,大多数的SOPC 设 计都包括Nios II 系统以外的逻辑。用户可以集成自身定制的硬件

22、模块到 SOPC 设计或集成从Altera 以及第 3 方 IP 供应商中得到的其它现成的 IP 模块。 3)选取具体的Altera 可编程器件,使用Quartus II 软件来对SOPC Builder 生 成的 HDL 设计文件进行布局布线;再使用 Quartus II 软件选取目标器件 并对 Nios II 系统上的各种I/O 口分配管脚。另外还要根据要求进行硬件 编译选项或时序约束的设置。在编译的过程中, Quartus II 从 HDL 源文件 综合生成一个适合目标器件的网表,最后生成配置文件。 4)使用 Quartus II 编程器和Altera 下载电缆,将配置文件下载到开发板上

23、, 当下载完成后,就可以把此开发板作为软件开发初期的硬件平台,然后进 行软件功能的开发。 软件开发的具体流程: 1)在用 SOPC Builder 系统集成软件进行硬件设计的同时,就可以开始编写 独立于器件的C/C+软件,如算法或控制程序。而且用户可以使用现成 的软件库和开放的嵌入式操作系统内核以加快开发过程。 2)在 Nios II IDE 集成开发环境中建立新的软件工程时,集成开发环境会根 据 SOPC Builder 对系统的硬件配置自动生成一个定制的HAL(硬件抽象层) 系统库,这个系统库能为程序和底层硬件的通信提供接口驱动程序。 3)使用 Nios II IDE 对 C/C+软件工程

24、进行编译、调试。 4)将软件下载到开发板上并在硬件上运行调试,同时修改硬件和软件,直 到系统符合设计要求。 2.3 Avalon 总线总线 2.3.1 Avalon 总线总线简介简介 Avalon 交换式总线是由Altera 开发的一种专用的内部连线技术,是由SOPC Builder 自动生成,理想的用于系统处理器和外设之间的内部总线。在自定义外设 的设计过程中,要熟悉诸如传输类型和信号时序等全面的Avalon 总线接口知识。 Avalon 总线的外设分为主外设和从外设两类,能够在Avalon 总线上发起总线 传输的外设是主外设,只能响应Avalon 总线传输而不能发起总线传输的外设是从 外设

25、。Avalon 总线接口规范定义了Avalon 总线外设可能使用的信号类型,如 address、data、chipselect 等,一个外设可以包含任意的信号类型,这取决于它与外 设逻辑的接口的需要,但外设的每个信号都要指定一个有效的Avalon 总线信号类 型,以确定该信号的作用。 2.3.2 本设计中使用的接口信号本设计中使用的接口信号 在本设计中,ov6620 数字摄像头控制器 IP 核为从外设,主要涉及到的Avalon 总线接口有以下: 1)CLK 信号:从端口的同步时钟,为 SCCB 通信提供时钟源; 2)Reset_n 信号:从外设的复位信号,低电平时从外设复位到初始状态; 3)C

26、hipselect 信号:从外设端口的片选信号,只有在此信号有效时,从外设 端口才能响应Avalon 总线信号的输入; 4)Address 信号:规定了从外设地址空间的一个子偏移,在本设计中,定义 了控制器中的 10 个寄存器,故其地址线定义了4 位; 5)Read 信号:从端口的读使能信号; 6)Readdata 信号:读传输时,输出到Avalon 总线交换结构的数据线,用于 传输所读取的信号; 7)write 信号:端口的写请求信号; 8)writedata 信号:写传输时,来自Avalon 总线交换结构的数据线,用于传 输数据; 在本设计中,只涉及到从端口的基本读和写传输,故不需要其他任

27、何带传输 属性的从端口信号,在此就不再介绍了。 2.4 定制用户外设简介定制用户外设简介 定制用户外设有两种可行的方法:一种是SOPC Builder 提供的元件编辑器。在 图形用户界面下将用硬件描述语言(Verilog 或 VHDL)描述的用户逻辑封装成一 个 SOPC Builder 元件(也可称之为IP 核);另一种是在Altera 提供的元件基础上来修 改(主要是修改Class.ptf 文件)。本文是通过第一种方法来设计OV6620 控制器的 IP 核。 2.4.1 元件的组成部分元件的组成部分 一般来说,一个元件由下列部分组成: 1)描述元件逻辑的硬件描述文件(HDL 文件); 2)

28、软件文件,一个用来定义元件寄存器的C 语言头文件,以及让程序员控 制该元件的软件驱动; 3)元件的描述文件(Class.ptf),该文件定义了元件的构架,在定制用户逻 辑外设时,该文件是由元件编辑器自动生成的,用户不需要自己设计 。 2.4.2 元件的组成模块元件的组成模块 一个典型的元件由下列功能模块组成: 1)任务逻辑:用来完成元件级别的功能,是必不可少的; 2)寄存器文件:有了寄存器文件,用户就可以通过Avalon 总线接口采用基 地址+地址偏移量的方式来访问元件内部各寄存器; 3)Avalon 总线接口:为寄存器文件提供了一个标准的Avalon 总线前端,它 使用 Avalon 总线必

29、需的信号来访问寄存器文件,并且支持任务逻辑的传 输类型。 2.4.3 元件的定制步骤元件的定制步骤 一个典型元件定制的步骤如下: 1)规划元件的硬件功能; 2)如果采用微控制器来控制该元件,则需规划访问该硬件的应用程序接口; 3)在硬件和软件要求的基础上,定义一个恰当的Avalon 总线接口; 4)使用 Verilog 或 VHDL 来描述硬件逻辑; 5)单独验证元件的硬件功能; 6)写用于描述寄存器的C 头文件为软件定义硬件寄存器映像; 7)使用元件编辑器来封装硬件HDL 和软件文件,得到一个元件; 8)将该元件集成到一个简单的Nios II 系统中; 9)使用 Nios II 来测试寄存器

30、的访问是否正确; 10) 写该元件的驱动软件; 11) 反复改进该元件的硬件设计和软件驱动,并使用元件编辑器来更新所做 的修改; 12) 建立一个完整的SOPC Builder system,里面含有一个或多个该元件; 13) 执行系统的验证并进行改进; 14) 完成元件定制,并分发给其他设计者。 当用户创建好了用户描述元件的硬件和软件文件后,就可以使用SOPC Builder 中的元件编辑器将它们封装成一个元件。 3. OV6620 数字摄像头介绍数字摄像头介绍 3.1 OV6620 简介简介 OV6620 是美国 Omni Vision 公司生产的 CMOS 彩色黑白图像传感器,以其 高性

31、能、低功耗适合应用在嵌入式图像采集系统中。0V6620 集成在一个板卡上, 需要稳定的 5V 电压供电,有独立的 17 MHz 晶振。它支持连续和隔行 2 种扫描方 式,CIF 与 QCIF 两种图像格式,最高像素为 356292 pixels,有效像素为 352288 pixels,PAL 制式,帧速率为 25 fps。输出 4 种图像同步的时序信号:像素时钟 PCLK、行同步 HREF、帧同步 VSYNC 和奇偶场同步 FODD。同时,还可以通过 8 位或 16 位的数据总线输出 RGB、RGB 4:2:2、YUV 或 YCrCb 格式的图像数据,能 够满足一般图像采集系统的要求。OV66

32、20 内部可编程功能寄存器的设置有上电模 式和 SCCB 编程模式。SCCB 模式下可以调整摄像头的参数,比如电子曝光、增益、 白平衡控制、内部自动图像增强、亮度、对比度、伽马、饱和度、锐度, 加窗控 制等。其本质是 SCCB 协议的寄存器写入。 3.2 OV6620 引脚介绍引脚介绍 下面是 OV6620 摄像头的实物图(图 3.1) ,引脚图(图 3.2)和各个引脚的用 途。 图3.1 OV6620实物图 图3.2 OV6620引脚图 PIN1-PIN8亮度信号输出接口 Y0-Y7 PIN9低功耗模式 PWDN PIN10复位信号输入 RST PIN11 SCCB数据接口 SDA PIN1

33、2 奇偶场同步信号 FODD PIN13 SCCB数据时钟 SCL PIN14 行中断信号 HREF PIN15 模拟地 AGND PIN16 场中断信号 VSYN PIN17 模拟地 AGND PIN18 像素同步信号 PCLK PIN19 外部时钟输入端 EXCLK Pin20 电源 VCC Pin21 模拟地 AGND Pin22 电源 VCC PIN23-PIN30 UV信号输出接口 UV0-UV7 Pin31 公共地 GND PIN32 模拟信号输出接口 VTO 3.3 图像的采集过程图像的采集过程 OV6620 数字摄像头的图像采集主要通过用 VSYNC、FODD、HREF 和 P

34、CLK 4 根 同步信号线进行控制。其中 FODD 为奇偶场同步信号,每次高低电平的转换都表 示一场的切换,就是说 FODD 一个周期包括两场。VSYNC 为场同步信号,每场开 始时,场同步信号产生一个短的脉冲信号,标志一场的开始,然后进入场前消隐 区。HREF 为行同步脉冲,场前消隐区以行同步脉冲产生高电平为结束标志,同时 开始行有效区。在 HREF 高电平期间有效数据从 Y0-Y7 和 UV0-UV7 输出。 (具体数 据格式参见 OV6620 的 Datasheet)PCLK 为像素同步信号,在 HREF 信号高电平期 间,PCLK 每来一个上升沿输出通道就输出一个新像素的数据。这些信号

35、的时序关 系如图 3.3。 图 3.3 ov6620 信号时序 其中具体时间参数如表 3-1。 表 3-1 时序图中的时间参数 符号符号名称名称最小值最小值最大值最大值 t1PCLK fall timing4 ns8 ns t2PCLK low time50 ns t3PCLK rise time4 ns8 ns t4PCLK high time50 ns t5PCLK period106 ns t6Y/UV/HREF setup time10 ns t7Y/UV/HREF hold time20 ns t8VSYNC setup/hold time1 us 3.4 摄像头的配置状态摄像头的配

36、置状态 通过 SDA 和 SCL 两根线可以对摄像头进行配置,指令传输遵循 SCCB 协议。 SCCB 通信协议与 I2C 协议的写周期完全相同,SCCB 的读周期则增加一个总线停止 条件。OV6620 功能寄存器的地址为 0 x000 x50。通过设置相应的寄存器,可以 使 OV6620 工作于不同的模式。 (具体功能参见 OV6620 的 Datasheet) 3.5 其他状态其他状态 OV6620 的 PWDN 引脚为高电平时,摄像头进入硬件低功耗状态,此时摄像 头的内部时钟停止工作,所有寄存器(除 SCCB 寄存器)全部复位,工作电流小 于 10uA。另外通过设置相应的寄存器也可以用软

37、件方式让摄像头工作于低功耗, 此时工作电流小于 1mA。 通过拉高 RST 引脚可以使摄像头转为复位状态,此时所有的寄存器恢复为默 认值,也可以通过 SCCB 软件的方式让摄像头复位。 4. OV6620 控制器外设的设计过程控制器外设的设计过程 4.1 硬件功能的规划硬件功能的规划 待设计的外设相当于 OV6620 的一个驱动芯片,对调用该外设的系统来说类 似于一个黑盒子,其设计目的是把 OV6620 的应用封装起来,方便系统的使用, 让控制器从繁琐的杂务中解放出来,同时也起到了信号转换的作用。 根据 OV6620 的特点,需要定义如下几个寄存器。 1)状态寄存器(2 位):用来设定摄像头的

38、 4 种工作状态,即复位状态、 低耗状态、配置状态和采集状态。 2)数据寄存器(28 位):用来储存 Y 通道和 UV 通道发来的数据。 3)I2C 寄存器(2x8 位):前 8 位用来储存 OV6620 待配置的片内寄存器地 址,后 8 位储存相应寄存器待设定的值。 4.2 使用使用 VHDL 来描述硬件逻辑来描述硬件逻辑 本设计中,用VHDL 语言来描述元件的逻辑特性,顶层文件中定义了4 种状 态,分别为复位状态,低耗状态,配置状态和采集状态。配置状态 用一个元件例化 的底层文件进行描述。复位状态时把RST 信号线拉高,使摄像头复位;低耗状态 时把 PWDN 信号线拉高,使摄像头进入低耗等

39、待状态;配置状态时通过底层描述 的 SCCB 协议的功能,把接收来的命令通过SCCB 协议的方式发给OV6620,对相 应寄存器进行配置,使摄像头实现不同功能;采集状态时通过摄像头的4 个同步信 号对每个像素的数据进行采集,存到相应的数据 存储器中,以便系统读取。在利用 4 个同步信号线的同时,从外设向调用系统提供这4 根信号,以便系统利用,实现 其它功能。 其中需要注意的是在SCCB 协议的描述中,已经把摄像头的地址集成当中,控 制的时候只需给出寄存器地址和待设定的数据即可。 把从外设中所有与Avalon 总线连接的引脚定义为信号,以寄存器的方式控制。 通过 Avalon 总线提供的 chi

40、pslect、read、write 等信号和自定义的 iic_add_selected、iic_dat_selected、state_selected 等信号相与组成了各寄存器的片选信 号。其中 datay_selected 使能 Y 通道数据输出;state_selected 使能从外设状态设置; iic_add_selected 让 writedata 选择 iic_add 数据输出;iic_dat_selected 让 writedata 选择 iic_dat 数据输出;iic_en_up_selected 使能 SCCB 模块。 程序的顶层源代码见附录 1。 4.3 自定义元件自定义元

41、件的封装的封装 (1)打开工程文件“ov6620.qpf”,点击进入 SOPC Builder。 (2)点击 File 下的 New Component,出现图 4.1。 图 4.1 New Component (3)选择 HDL Files 标签。添加HDL File,本设计文件是ov6620.vhd 和 sccb.vhd,其中 ov6620 为顶层文件。 图 4.2 HDL Files 标签 (4)可以看到SOPC Builder 自动对 HDL 文件进行分析,检查其中的错误,分 析完毕如图4.3。 图 4.3 文件分析 (5)选择 Signals 标签,把外设的信号和Avalon 总线信

42、号类型一一对应。元件 中所定义的直接与摄像头连接的引脚为外部输入输出,故设为export 类型。其他与 Avalon 总线直接相连的应与Avalon 总线信号一致。具体设定如图 4.4。 图 4.4 Signals 标签 (6)选择 Interfaces 标签,做图4.5 示选择,需要注意的是。Slave addressing 栏 要选择 registers 一项。 图 4.5 Interfaces 标签 (7)选择最后一个标签如图4.6 显示。 图 4.6 最后一个标签 (8)点 Finish,出现如图 4.7。 图 4.7 完成定制 (9)点 yes,回到 SOPC Builder 中,我

43、们可以看到在左下方,多了定制的外设。 图 4.8 自定义外设 (10) 添加自定义外设到系统中,生成文件,如图4.9 所示。 图 4.9 添加自定义外设 (11) 回到 Quartus II 中,更新Nios II 模块,进行编译综合。 图 4.10 编译文件 4.4 编写测试元件的编写测试元件的 C 文件文件 在编写 C 程序时,要注意地址映射,因为要将输入数据分别写到各个寄存器中, 首先要找到寄存器的地址,然后将其赋给所定义的变量 。在本设计中,定义了一个 结构体,其成员便是从外设里的各个寄存器,故只要将外设的首地址赋给结构体变 量的首地址即可。之后先禁止SCCB 模块工作,向SCCB 模

44、块寄存器中写入相应的 数据,使能SCCB 模块后延时一段时间,等数据发送完毕可以继续设定下一个寄存 器,最后禁止模块,进入图像采集发送过程。读取Y 通道的亮度值,并通过UART 发送到上位机上。源程序见附录 2。 具体操作步骤如下。 (1)进入 IDE 开发环境,新建一个空工程,如图4.11 所示。 图 4.11 IDE 开发环境 (2)将设计的C 文件拷到工程中,并进行编译,如图4.12。 图 4.12 添加 C 文件 4.5 验证结果验证结果 编译通过后,便可将程序通过 JTAG 口下载到 FPGA 中,在 Nios II IDE 中运 行程序,观察实验结果。由 UART 发回的亮度数据来

45、看,把摄像头全盖上之后, 数据都为 16,这是 OV6620 默认配置情况下的亮度下限。之后由于摄像头的自动 调整,亮度逐渐增大一些,增到 30 左右。通过 SCCB 对摄像头进行配置,禁止其 自动调整后,发现摄像头盖住时数据一直保持 16,如图 4.13 所示。 图 4.13 取消自动调整 又调节亮度寄存器,使摄像头图像亮度达到最大,得到的数据比原先同等亮 度下得到的数据大 80 左右,如图 4.14,都符合设计。故此验证了 IP 核功能的正 确性。 图 4.14 取消自动调整,增大亮度 5. 总结总结 本设计成功的实现了一个基于Nios II 的自定义从外设OV6620 数字摄像头 控制器

46、 IP 核。该外设能够有效的控制摄像头进行图像采集,方便的对摄像头进行 配置,达到了最初的设计目标。 自定义外设体现了SOPC 的强大灵活性,而OV6620 控制器的外设的设计体现 了层次化的设计方法,整个设计分为硬件和软件两大部分。最终向用户提供的仅 仅是一个简单的控制函数和几个接口,而用户不必面对复杂的硬件系统,极大地 方便用户的应用设计,这种设计思想是值得学习的。 通过此次设计,查阅了很多资料,对于摄像头的控制与图像的采集与处理有 了一定的认识,了解了嵌入式的基本思想,较深入的理解了SOPC 及软核处理器的 概念,由原来的一点不了解,达到了能够用 SOPC Builder 定制系统,在N

47、ios II IDE 中运行程序,实现一定的功能的程度。 附录附录 1 顶层硬件的描述。 library IEEE; use IEEE.STD_LOGIC_1164.all; entity ov6620 is port( clock_up:in std_logic;-系统时钟 reset_n_up:in std_logic;-系统复位 fodd:inSTD_LOGIC;-奇偶场信号 pclock_up :inSTD_LOGIC;-像素同步信号 href:inSTD_LOGIC;-行同步信号 vsync:inSTD_LOGIC;-场同步信号 y:inSTD_LOGIC_VECTOR(7 down

48、to 0);-亮度通道 uv:inSTD_LOGIC_VECTOR(7 downto 0);-色度饱和度通道 sda_up:inoutSTD_LOGIC; scl_up:outSTD_LOGIC; reset:outSTD_LOGIC;-复位 pwdn:outSTD_LOGIC;-低耗 chipselect :in std_logic; address:in std_logic_vector(3 downto 0); read:in std_logic; write:in std_logic; readdata:out std_logic_vector(7 downto 0); writeda

49、ta :in std_logic_vector(7 downto 0) ); end ov6620; architecture ctrl of ov6620 is component sccb port( clock:in std_logic;-系统时钟 reset_n:in std_logic;-系统复位 scl:out std_logic;-sccb 时钟线 sda:inout std_logic;-sccb 数据线 addr1_reg:in std_logic_vector(7 downto 0);-寄存器地址 data_reg:in std_logic_vector(7 downto

50、0);-寄存器控制数据 sccb_en :in std_logic-控制寄存器工作状况 ); end component; signalpclock_upo:STD_LOGIC;-像素同步输出(周期 110ns)* signalhrefo :STD_LOGIC;-场同步输出(周期 64um)* signalvsynco :STD_LOGIC;-场同步输出(周期 20ms)* signalfoddo:STD_LOGIC;-奇偶场信号输出- signalsccb_en_up:std_logic;-SCCB 模块使能,高电平后开始发送数据- signalsccb_add,sccb_dat:STD_L

51、OGIC_VECTOR(7 downto 0);- signalstate:STD_LOGIC_VECTOR(1 downto 0);-状态设置(4 种)- signaldatay :STD_LOGIC_VECTOR(7 downto 0);-亮度通道输出* signaldatauv :STD_LOGIC_VECTOR(7 downto 0);-色度饱和度通道输出 signaldatay_selected : std_logic; signalhrefo_selected :STD_LOGIC;-场同步输出(周期 64um)* signalvsynco_selected : STD_LOGIC

52、;-场同步输出(周期 20ms)* signal pclock_upo_selected :STD_LOGIC;-像素同步输出(周期 110ns)* signal sccb_add_selected : std_logic; signal sccb_dat_selected : std_logic; signalsccb_en_up_selected : std_logic; signal state_selected : std_logic; signal foddo_selected : std_logic; begin u1:sccb port map(clock_up,reset_n_

53、up,scl_up,sda_up,sccb_add(7 downto 0),sccb_dat(7 downto 0),sccb_en_up); process(address) -address decode begin sccb_add_selected =0; sccb_dat_selected=0; state_selected=0; sccb_en_up_selected=0; pclock_upo_selected=0; hrefo_selected=0; vsynco_selected=0; datay_selected=0; foddo_selectedsccb_add_sele

54、cted sccb_dat_selected state_selectedsccb_en_up_selectedpclock_upo_selectedhrefo_selectedvsynco_selecteddatay_selectedfoddo_selected null; end case; end process; process(clock_up,reset_n_up) begin if reset_n_up=0 then sccb_add0); elsif(clock_upevent and clock_up=1)then if(write and chipselect and sccb_add_selected)=1)then sccb_add(7 downto 0)=writedata(7 downto 0); end if; end if; end process; process(clock_up,reset_n_up) begin if reset_n_up=0 then sc

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论