随着现场可编程逻辑阵列( FPGA) 技术的日益成熟,基于片上的可编程( SOPC)的嵌入式处理器受到越来越多的关注。特别是Altera公司推出的NIOS嵌入式处理器软核, 通过软件编程的方法可灵活地实现嵌入式处理器的功能, 并且针对FPGA进行性能优化, 可以大大提高系统性能。此外,NIOS还具有片上调试功能,因此便于系统的设计和调试.本文以硬盘录像机为例,研究了NIOS对外部接口设备进行控制的方法,其中包括I2C接口的控制、IDE接口的控制等。
1 NIOS开发方法介绍
NIOS的软硬件开发流程如图1 所示, 下面介绍其具体开发步骤。流程的第一步是设计规划。它需要根据系统设计要求, 划分好各个软硬件模块。完整的基于NIOS的SOPC系统是一个软硬件复合的系统, 在开发时可以分为硬件、软件两个部分。在实际设计过程中, 往往会遇到这样一种情况: 所需要的功能既可以用软件方式实现, 也可以用纯硬件逻辑加以实现。例如, 在系统中需要8位7段码数码管显示时, 可以用FPGA中的可编程逻辑设计一个动态扫描逻辑来实现显示, 也可以通过编写动态扫描程序对PIO进行操作来完成上述功能。若用硬件方式实现, 显然是要占用额外的硬件资源, 但是, 编写软件较为容易, 系统工作速度不受影响; 反之, 用软件方式实现, 可以不增加硬件逻辑, 但是动态扫描需要占用CPU的处理时间, 这增加了软件编写的复杂度。具体采用什么方式是与系统设计要求有关的。因此在设计规划时, 就要确定哪些功能用硬件实现, 哪些功能用软件实现。通常用软件实现时, 其设计容易修改, 查错也比较容易, 且基本上不增加占用的硬件资源。所以在设计规划时, 当需要的软硬件代价相当并且性能保证的情况下, 软件实现是被优先考虑的。
确定好软硬件模块的划分后, 就可以开始具体的设计过程了。通常, 嵌入式系统开发中CPU是不可更改的, 因此外围设备的变动也受到CPU的限制, 甚至整个嵌入式系统的硬件已经固定, 难以更改(如PC104 的开发)。因而, 通常的嵌入式开发中, 更多的是PCB设计及软件开发。与通常的嵌入式系统开发不同, 由于NIOS是一个可灵活定制的CPU,它的外设是可选的IP 核或自定制逻辑, 所以可以根据系统设计要求, 通过SOPC Builder向导式的界面定制裁剪适当的SOPC系统。鉴于上述NIOS开发的特点, 在设计规划后,NIOS的开发流程分为硬件开发与软件开发两大部分。
NIOS 的硬件设计流程就是定制合适的CPU和外设, 在SOPC Builder和QuartusII中完成。在这里可以灵活定制NIOS CPU的各个特性甚至指令, 可以使用Altera提供的大量的IP Core来加快开发者开发NIOS外设的速度,提高外设的性能。同时, 也可以使用第三方的IP Core, 或者使用VHDL、Verilog 来自己定制外设。
完成NIOS的硬件开发后, SOPC Builder可以帮助开发者生成相应的SDK( 软件开发包) 。这是由于在硬件开发中的NIOS CPU及其外设构成的系统是自定制的, 存储器、外设地址的映射等各不相同, 需要的SDK也应是专有的。
SOPC Builder可自动生成SDK。在生成的SDK 基础上, 开发者可以进入软件开发流程。在这个部分, 开发者面对的嵌入式系统是自己定制的、裁剪过的, 因此受到硬件的局限会小一些。开发者可以使用汇编语言、C 或C++语言来进行嵌入式程序设计, 使用GNU工具或其他第三方工具进行程序的编译连接以及调试。
2 针对硬盘录像机的NIOS 嵌入式处理器设计
在硬盘录像机中涉及到图像采集、图像压缩、图像存储三个主要部分, 因此在设计外部接口时需要考虑到这三部分中芯片控制所需要的接口。
(1)图像采集部分。
图像采集部分使用SAA7113完成视频信号的采集。该芯片是可编程视频处理芯片, 采用CMOS工艺, 通过简单的I2C 总线可以对其实现编程控制。它将不同制式的模拟信号统一成相同的数字标准, 采用ITU-R BT.601 格式, 采样时对亮度信号和两个色差信号分别编码, 对不同制式信号采用单一的取样频率, 而且和任何模拟系统的彩色副载波频率无关, 因此在分量系统中不再包含任何副载波。取样频率定为13.5MHz, 它也是对亮度信号Y 的取样频率。由于色度信号的带宽远比亮度信号的带宽窄, 因而对色度信号U 和V 的取样率较Y 减半, 为6.75MHz。每个数字有效行分别有720 个亮度取样点和360×2 个色差信号取样点。对每个分量的取样点进行均匀量化。对每个取样进行8 位的PCM编码。
(2)图像压缩部分。
本系统采用硬件压缩方式完成视频图像的JPEG 压缩。通常在视频监控系统中使用Motion-JPEG(MJPEG)技术, MJPEG 压缩芯片将A/D 转换芯片输入的YUV 格式的数据进行MJPEG 格式的压缩。MJPEG 由JPEG 图像连接组成, 相对JPEG 图像, 每幅都有自己的量化表和Huffman码表。MJPEG可以仅使用一张量化表和Huffman码表对连续几十帧甚至上百帧图像进行压缩, 仅当数据发生丢失时才需要重新载入量化表和Huffman 码表。这一优点大大降低了系统视频解码时所需要的开销。而且, MJPEG 可以分帧存储, 这给数据的管理和回放带来了方便。本系统是使用Zoran公司的单片MJPEG压缩/解压缩芯片ZR36060 来完成图像的JPEG压缩的。
(3)图像存储部分。
为了解决大量的图像数据问题, 本系统采用IDE(电子集成驱动器)接口的硬盘来完成设计。IDE 的本意是指把“硬盘控制器”与“盘体”集成在一起的硬盘驱动器。这种集成方法减少了硬盘接口的电缆数目与长度, 数据传输的可靠性得到了增强, 硬盘控制起来变得更容易。控制方式有PIO 方式和DMA 方式两种。本系统使用了IDE 硬盘的PIO 控制方式。由于采用了NIOS 处理器, 因此可以不局限于预先制造的处理器技术, 而是根据自己的标准定制处理器, 按照需要选择合适的外设、存储器和接口。本系统根据硬盘录像机的具体要求选择了Altera公司的Cyclone 系列的EP1C6来完成CPU的设计; 使用Flash ROM AM29LV065DU进行程序的加载工作; 选用SRAM为CY7C1041CV33 的存储器进行数据的缓存; FPGA 的AS 配置芯片为EPCS4。
在外围芯片中, 视频解码芯片SAA7113需要I2C 接口进行控制, 存储图像的硬盘需要IDE 接口, 但是在NIOS的外围标准接口中没有这些接口可供选择, 这时只要设置GPIO接口, 并用GPIO接口模拟出I2C总线接口和IDE接口的操作即可。同时也用GPIO 接口完成MJPEG 压缩芯片的配置任务。综合以上的硬件资源要求, 本系统在FPGA 内部设计的模块如图2 所示。
FPGA 内部模块的核心模块是NIOS 处理器的核, 其次是用来控制系统时钟的定时器1和定时器2。为了完成对SAA7113和ZR36060 的初始化配置工作, 设置了片内ROM来存储配置文件信息, 同时还设置了存储器接口和通用I/O 接口完成和外部存储器与I/O 设备的连接。整个嵌入式系统内部是由Avalon总线完成各模块之间连接的。整个系统的调试工作通过JTAG接口和串行口完成。调试程序通过JTAG接口下载到FPGA的内部, 由串口来连接一个显示终端, 将调试信息显示到PC机上。
3 控制软件的设计
系统上电硬件复位后, 软件根据用户需要自动对各项控制器指令代码及其参数进行设置, 从而完成对SAA7113、ZR36060、IDE 接口的初始化工作, 然后控制视频信号的采集压缩和存储。系统工作流程如图3 所示。
4 整体工作性能
(1)录制画面大小: 352* 248 或352* 288。(2)每秒录制或播放25 帧, 每帧两场, 共50 场, 隔行扫描。(3)每场图片压缩后大小平均为10KB, 每秒0.5MB, 每小时1.8GB。可根据需要配接10GB 到80GB 的硬盘, 实现5~40 小时的连续录像。
5 结束语
NIOS是一个性价比较高的微处理器软核, 可以方便地把用户需要的接口和自定义的逻辑加入到系统中去。本文介绍的方法体现了SOPC 嵌入式系统的灵活性。因此这种方法能够有效地缩短开发周期, 同时能够延长产品的生命周期, 可以不断地在原有产品的基础上进行升级设计。