视频编码过程如图1所示。首先,SoC主处理器通过指令配置Diamond视频引擎,然后将未编码的视频帧发送给该引擎,由它对视频帧进行编码,并将编码后的图像数据(VDE)送回主处理器。进行视频解码时,主处理器首先通过指令配置Diamond视频引擎,然后将VDE发送给它,由它进行图像解码,最后将已解码的帧传回主处理器。音频解码过程,主处理器将压缩的音频流发送给Diamond音频引擎,以解压成音频数据流。
图1:已编码和未编码视频数据出入Diamond视频引擎示意图
Diamond视频引擎内核中有两个配置好的处理器,它们共同执行视频压缩的任务,而集成的DMA控制器则负责将压缩前后的图像送入和送出该内核,并在内核中的两个处理器之间传递。Diamond视频引擎内核中的这两个处理器都采用了Tensilica的可配置Xtensa处理器架构,引擎的流处理器则通过增加额外指令来完成比特流解析和熵编码。
这些新指令中一部分基于Tensilica的可变长度指令扩展(FLIX),并采用每条指令执行两次独立操作的VLIW指令格式。Diamond视频引擎的像素处理器也增加了可同时操作多个像素的单指令多数据(SIMD)指令。
流处理器和像素处理器中添加的指令使Diamond视频引擎能够在时钟速率低于200MHz时以标准清晰度(SD或D1)显示分辨率和30帧/秒的速度编码MPEG4 ASP比特流或解码H.264/AVC MP、MPEG4 ASP、MPEG2 MP、和VC-1/WMV9 MP视频比特流。
Diamond视频引擎的所有内部操作对主处理器都是不可见的,这正符合其作为部件级SoC模块的身份。主处理器通过调用一组预定义API来操作Diamond视频引擎。在运行视频应用时,主处理器使用主系统内存中的两个队列向Diamond视频引擎发送指令消息和数据,而用另两个队列接收来自Diamond视频引擎的状态消息和数据。基于队列的消息事务处理则由主处理器和Diamond视频引擎之间的固件驱动型中断启动。
图2:包含Tensilica Diamond视频引擎的音、视频SoC设计实例
结合Tensilica的Diamond视频引擎的硬件设计也并不复杂。与其他系统部件一样,Diamond视频引擎是连接到主系统总线上的,如图2所示。同时,Diamond 330HiFi音频引擎内核可以进行数字音频解码以配合Diamond 视频引擎,并由主处理器对它们进行同步。Diamond 330HiFi音频引擎的软件库中包含大量可直接运行(ready-to-run)的数字音频编解码程序。在某些设计中,该引擎也可用作主处理器。
目前在多媒体设备和手机SoC中已实现量产的Diamond标准音、视频引擎说明处理器和可直接运行的固件是如何构成一个复杂的高性能低功耗的IP内核的。采用这种面向模块的设计方法,SoC开发团队就能利用复杂并已得到验证的IP核快速搭建起非常复杂的SoC,然后利用应用程序代码对这些SoC编程,从而为市场提供独特的产品。由于多媒体压缩标准发展迅速,设计时间也日益缩短,因此这种黑盒式设计方法已变得越来越重要。