摘要 : 视频编解码芯片中运动估计与补偿单元(MECU)的算法复杂,使用传统硬件描述语言建立模型和模型验证的过程繁琐耗时,为了缩短芯片验证时间,本文针对MECU 模块提出了基于SySTemC 语言的具体系统级验证流程。在整个芯片验证工作中,为了实现MECU 模块和低抽象级的其它外部模块协同验证,本文提出的验证流程利用了SystemC 能在不同抽象级建模的优势,对MECU 模块的数据传输控制端口进行细化。仿真结果表明:与使用传统件描述语言验证方法相比,基于SystemC 的验证流程简单有效,大大缩短了建模与验证时间。
1 引言
当前集成电路制造技术迅速发展,SoC(system-on-chip)设计已经成为集成电路设计的发展方向。随着SoC 设计的复杂度提高,在开发SoC 的过程中,验证工作越发重要和繁重,所占的开销占据总开销的40%~70%。SoC 设计的验证过程不但影响到芯片的成功设计,而且影响到芯片的上市时间,因此验证的正确性及其耗时的缩短成为了SoC 设计的关键。
传统设计中,系统级设计使用高级语言C/C++等描述功能模块的算法,验证的时候使用硬件描述语言(VHDL 或Verilog HDL)。系统验证之前必须通过手工将原始的C/C++代码转换为VHDL/Verilog HDL 代码,这个转换过程耗时大并且容易产生错误。在系统验证过程中,使用传统硬件描述语言对复杂模块的验证需要耗费大量时间。
为了提高系统级验证效率,本文针对视频芯片中的运动估计与补偿单元模块(MECU)提出了基于SystemC 的验证方法和流程。该方法大大缩短了系统验证的搭建时间和系统验证过程的时间。本文利用SystemC 支持设计者在不同抽象级建模的特点,给MECU 添加了低抽象级接口,使该单元能够和视频芯片内部其它模型通讯以便完成整个芯片的系统级验证。本文最后的仿真结果证明了该设计流程的有效性。
2 SystemC 语言
SystemC 是由C++衍生而来,本质是在C++的基础上添加了硬件扩展库和仿真核,这使SystemC 可以在不同抽象级对复杂电子系统建模。它既可以描述纯功能的模型和系统体系结构,又可以描述软硬件的具体实现,进行软硬件的协同验证。
SystemC 包括以下建模元素:
*模块(module) 相当于C++的类定义,是一个可以多层次的实体。一个模块可以嵌套其他模块和一些进程,是SystemC 里面最基本的单元。
*进程(process) 用来描述模块的功能,包含于模块中。进程是由事件(event)来触发的,这种触发的方式使进程可以并行执行,实现了硬件系统的并行特性,SystemC 包括三种不同的进程。
*接口(interface) 定义了一组方法实现目标,但是不实现这些方法。
*通道(channel) 实现了接口定义的方法,分为基本通道和层次化通道。
*端口(port) 总是与一定的接口类型相关联,端口只能连接到实现了该类接口的通道上,通过端口模块和进程来访问通道内定义的接口方法。
*信号(signal) 用来实现各个进程之间的通讯。SystemC 提供了多种信号格式来满足从寄存器传输级(Register Transmit Level, RTL)到功能级等不同抽象级的模拟。
*事件(event) 用来触发各个进程的开始以及暂停,通常多个事件组成一个敏感列表(sensitive list)共同决定进程的状态。
*时钟信号(clock) 时钟在同步电路设计中是一个非常重要的角色,本质上它是一种特殊的信号,为仿真过程提供了时间基准。
上述建模元素使得SystemC 能够顺利的搭建硬件平台。
3 基于SystemC 的建模方法
系统级验证过程中,对于复杂算法模型只需要建立参考模型(Reference Models),搭建验证平台,观察模型的一些重要功能(算法、进程等等),不需要了解RTL 层面的细节。利用事务级建模方法(TLM, Transaction Level Modeling)技术很容易建立参考模型。一个完整的芯片是由多个功能模块组成,采用SystemC 对复杂算法单元建立模型能使功能验证时间缩短,而一些简单模型的验证需要在RTL 层面。为了实现不同抽象级模块通讯,本文对使用SystemC 建立的复杂单元模型进行接口精细化处理。本文对实际芯片单元提出的SystemC 建模验证流程如图1 所示:
<img id="aimg_H8y3D" class="zoom" file="http://www.21ic.com/d/file/201202/8a38d075965b2d7a89d4fe5f8e2b3028.jpg" lazyloadthumb="1" border="0" alt="" /> |