快速可组态软硬件平台之生成

本文作者:admin       点击: 2003-01-05 00:00
前言:
近期崛起神速的Tensilica公司,其可组态具延伸性的高效率处理器,搭配相关设计工具,号称产品设计者可以在短短的数小时内,拿到一套系统平台,其中包含客制化系统芯片的执行码、软件开发环境,到支持VxWorks 和Nucleus Plus的底层软硬件接口等。藉此,科技已经又迈向一大步,在高效能处理器可组态化的表现之外,更加巧妙地灵活的与操作系统软件结合,大幅提高其应用价值,底下就让我们以Xtensa Processor 和 Nucleus Plus RTOS来探讨其间所关联到的技术概念。

陈泽民

随手报章杂志一翻到科技版,系统芯片SoC这名字到处可见,在搜寻引擎给他Key In一下关键词,结果更会令人眼花缭乱,让你一天一夜都看不完。科技怪杰手中勾勒出的轻薄短小,无所不在的梦幻电子产品,使SoC俨然成为重要的关键核心,此需求也促使各式各样的EDA 工具一一诞生、快速演进。然而,完整的SoC设计时程是否还能够支持目标产品周期,EDA工具的选择搭配、旧有的Methodology,是否依然够弹性化,足以使产品保持一流的竞争力,则是的问号。从另一个角度来思考,是否可以快速的产生客制化核心芯片乃至于软硬件系统平台,以专注于应用法则的推演,加速产品的开发,却是值得投入的技术。
近期崛起神速的Tensilica公司,其可组态具延伸性的高效率处理器,搭配相关设计工具,号称产品设计者可以在短短的数小时内,拿到一套系统平台,其中包含客制化系统芯片的执行码、软件开发环境,到支持VxWorks 和Nucleus Plus的底层软硬件接口等。藉此,科技已经又迈向一大步,其间所牵扯到的背景技术,已经突破传统瓶颈,在高效能处理器可组态化的表现之外,更加巧妙地灵活的与操作系统软件结合,大幅提高其应用价值,底下就让我们以Xtensa Processor 和 Nucleus Plus RTOS来探讨其间所关联到的技术概念。

可组态的Xtensa处理器
荣获2001年EDN票选32/64位微处理器创新奖的Tensilica Xtensa IV相信大家一定不陌生,这家成立于1997年的公司,凭借着独具优势的Xtensa处理器产生器、可组态且具弹性化延伸的架构、异质性多处理器功能、和完整的软件开发环境,使得整个SoC的设计流程可以更为简单化、成品效率可以最佳化,也让Tensilica在不景气环境中成长迅速,赢得众国际大厂的授权使用,成为可组态处理器市场的领导者。

Xtensa的架构里包含了几个不同的区块,如图一所示。其中Base ISA是基本的指令集架构,一般的设计中必备的区块,例如ALU、数据存取单元、指令撷取译码单元、处理器控制单元等;可组态的单元则可以让系统设计者去设定参数和规格,以进行客制化工作,这些单元如缓存器、内存管理单元等;具可选择性的单元用来针对设计者的不同应用,可以做硬件加速的功能,如乘法运算单元、浮点运算单元、On-chip除错功能、和例外处理支持等;具备可参数化的选择性区块则包含了一些外围选项,例如中断控制单元、时脉、指令快速缓冲贮存区、数据快速缓冲贮存区、ROM、RAM、Vectra的DSP、和Xtensa 处理器连结接口;最后,系统设计者可以根据产品的应用,自行设计硬件加速的逻辑,直接加在Advanced Designer-defined Function之内。

这里有一个很重要的特色值得注意,Xtensa允许设计者透过TIE(Tensilica Instruction Extension)语言,在图1中的Advanced Designer Defined Functions区块中,来定义特殊的客制化功能。TIE在使用上类似于一般的HDL,有经验的Verilog设计者,应该很容易可以上手。其原理是透过Xtensa指令集延伸机制,在TIE程序里定义延伸指令集的Opcode与运算子,进一步设计自己的特殊执行逻辑,透过Xtensa Processor Generator直接与处理器的组态和参数,一同进行编译产出。

然可想而知,这些组态参数化设定或选择模块单元的工作,如果没有一套人性化的设计接口,那可能不容易推广,因此Tensilica设计了一套具备图形化网页接口的Xtensa Processor Generator,如图2所示,透过这一套工具,可以让我们对处理器进行客制化的工程,如选择指令集、协同处理器、内存架构、中断处理单元…等,进一步的,可以输入我们想要的效率等级如系统执行频率、耗电量、甚至实体逻辑闸数值等,在处理器产生的阶段,这套工具就会帮忙依据这些参数和制程去做最佳化调整。

经过Xtensa Processor Generator处理后,可以得到三个主要产出如图3所示。首先是硬件相关部分,包含有可合成的或模拟用的RTL,和用来搭配后段EDA 工具的EDA Script。可合成码可选择Verilog或VHDL,支持的模拟工具如Synopsy VCS、Cadence Verilog XL和Mentor Graohics ModelSim等。EDA则支持如Synopsys DesignComplier合成工具、布局工具如Cadence Silicon Ensemble和Synopsys Apollo。其次是System Modeling部份,产生指令及仿真器、总线功能模型等,可以和其它前段的EDA模拟验证工具搭配,软硬件同步验证的Mentor Graphics Seamless…等。

软件方面的支持,包含标准的GNU-based的软件套件,如GNU C/C++程序编译器、汇编语言、程序连结器、除错器、指令集仿真器、一些基本的函式库和参考用的测试程序等。Xtensa C/C++编译器则是选择性的,除了比gcc的编译效率更佳外,还支持到Vectra DSP编译功能。XRAY是一套图形化的除错画面,虽然也是选择性的,但在开发流程中似乎不可或缺。更强的是如之前所提到,有些产品设计需要考虑到多个处理器系统,但以软件设计需求,这里提供的则是支持多处理器的指令仿真器和基本多处理器协同运作的函式库。然而面对可组态可延伸性的架构,读者一定会问,『软件操作系统是不是在CPU换一次组态之后,就得做移植的工作?』,不过令人兴奋的是,Tensilica这里提供了一套OSKit,轻松让支持操作系统的工作可以自动化,一来大大提升了Xtensa的实用价值,也让应用系统设计者更如虎添翼。

Xtensa已是非常成熟的技术,其应用层面也涵盖许多产品面,而主要的应用在消费型电子产品和通讯网路设备上,其中消费型电子产品又以新一代的数字相机居多,日本大厂JVC、FUJIFILM、OLYMPUS和Sony皆有相关产品研发中。通讯领域则有许多成功产品的案例,如Bay Microsystems的可程序化10G network处理器、Broadcom用多个Xtensa Core针对VoIP ASSP做的整合芯片、与NEC的W-CDMA基地台交换机整合芯片、…等。

Nucleus Plus嵌入式操作系统
与嵌入式系统一齐成长的伙伴们,对Accelerated Technology的Nucleus这个具有悠久历史的实时操作系统,一定感到很亲切熟悉,尤其是其提供原始码的批注及免收Royalty费用的特点,若其功能满足应用上的需求,可说是人见人爱的一个嵌入式操作系统。目前这家公司已经成为Mentor Graphics公司的嵌入式系统分部,在整合发展环境与多平台支持上有较大幅度的强化。嵌入式操作系统核心软件技术已经太成熟,单纯提供操作系统核心,以某些角度看来,免不了会缺乏竞争力,而纵使上层的应用与中介软件支持够用,也可能被如软件巨人、Symbian、Palm或WindRiver这类提供完整的产品参考设计者给压缩了市场空间。因此,ATI的策略很明显在并入Mentor后,就是朝向支持嵌入式软硬件一体化快速开发的各项技术远景迈进。
Nucleus Plus Kernel是一个非常典型的嵌入式微核心,目前已经支持七十种以上,由不同的程序编译器和处理器所组成的开发环境。参考图四,其主要切割为两块,即硬件相关部分和核心服务模块区块, 与硬件相关的部份就是分时多任务系统一定会用到的Timer、连接各类外围的中断、和多任务内文管理。系统核心模块部份,其服务主要分为八类,首先是多任务管理用来提供建立删除task对象功能、处理状态切换地工作、优先权设定修改等;多任务Task间的通讯服务,如Mailbox、Queue、和Pipe;多任务Task间的同步机制,常用的Event和Semaphore;Timer的管理机制;内存管理,如内存区块的切割、内存的配置与回收机制等;中断管理,高低优先权的中断的设定使用;I/O服务,如驱动程序的建立使用等;最后是提供给开发阶段的一些服务,诸如系统状态的记录功能等。

一般的嵌入式系统软件微核心也大致有类似的功能,因此,在Nucleus Plus微核心上,架构出其它嵌入式操作系统核心的应用程序呼叫接口是可行的。如此一来,可以让其它操作系统上面的应用程序在Nucleus Plus上执行,进一步可以吸引更多的设计者使用,即便这些人之前是用别的嵌入式操作系统开发产品。Nucleus Plus首先锁定日本客户,日本最普遍用的操作系统微核心当属µITRON,产品包罗万象几乎占了百分之五十的市场,就连手机也不例外。因此许多应用式架构在µITRON的应用程序呼叫界面之上,产品设计者当然希望他的程序不需修改就可以在新的RTOS执行,所以就有一套Nucleus µiPLUS的产品,提供Nucleus Plus加上µITRON 4.0 标准API的套件,让µITRON的应用程序具有可移植性。这种架构下,当然就会有两套API存在, Nucleus Plus依然可以使用。另外一个称为Nucleus OSEK,支持OSEK RTOS标准OSEK/VDX,这个标准是德国的一个汽车工业团体(http://www.osek-vdx.org/)所定义的,其成员有BMW、VW、Bosch、...等,大部分用于车辆电子控制设计上。
Nucleus Plus的其它上层套件有支持C++的标准链接库Nucleus C++、档案系统Nucleus File、网络套件Nucleus NET、Nucleus PPP,SNMP、RMON、SPAN、Email、TCP/IP相关套件等;嵌入式Java虚拟机器CEE-J则支持到JDK 1.1.8、J2ME CLDC和MIDP与Personal Java规格;图形接口称为Nucleus GRAFIX,支持一般的图形窗口接口所需的功能。另一方面在与Mentor合并后,更重视整合式开发环境,code|lab Developer Suite就提供项目管理功能、除错功能、仿真等,可Plug-in到Microsoft Visual Studio。

Xtensa 与 Nucleus之间
Nucleus Plus与硬件无关的部份全部采用标准的ANSI C来设计,因此在移植上就会比较容易,而理论上只需针对处理器架构的规格,去修改系统初始化的程序代码、工作管理、和Timer控制模块部份,针对处理器的特性作某些程度的最佳化应该就够了。但面对Xtensa这种完全可组态、结构可参数化、指令可延伸化的处理器,如何有效的发挥其效能,且让SoC设计者可容易得到满意的软件平台,可说是一大挑战。
在操作系统和处理器之间的接口,我们通常称为硬件抽象层,而大部分的硬件抽象层的做法,在于将处理器可控制的单元函式化,让软件针对不同处理器可以透过同一个界面来使用,其最佳状态希望能确保软件可以不用修改。若是在固定的Process core其实不是很困难,只需用人工实作一次就可,但针对Xtensa可组态的架构,若把这个工作交由使用者去实作,并不是很恰当,因为在每次组态之后,就必须从新修改一次硬件抽象层。可想而知,就需要提供一套硬件抽象层自动产生技术,依据设计者的规划,针对中断、缓存器存取、内存管理、Timer、甚至Coprocessor的各种组态参数,让硬件抽象层程序代码的产生工作自动化。而在实际使用上,只要在Processor Generator那边勾一下Nucleus选项,经过参数对照和一些算法,得到Processor core RTL的同时也就可以拿到已经移植好的Nucleus Plus!
这些技术与XT-2000目标板支持套件(BSP:Board Support Package)合起来,Tensilica将之称为Xtensa Oskit for Nucleus Plus,如图5所示。XT-2000是一块以CPLD为中心的发展版,让组态出来的处理器码可以加载执行,透过On-Chip-Debug与开发端的主机联机进行软硬件同步除错。在这套Oskit工具下,除了前述的系统核心移植的相关工作外,当然还需产生其它低阶驱动程序,整个操作系统跟硬件有关的接口包含BSP和HAL称为Operating System Overlay,就可以自动产生出来,大大降低了手动软硬件整合所需花费的工作量。
针对应用的开发,Mentor Nucleus Plus目前已经有支持Xtensa处理器的code|lab Developer Suite版本,提供开发过程所需的各项功能,其中还包括多任务应用的侦错与分析功能。使用Xtensa和Nucleus在开发上,可以搭配Mentor的Seamless Co-verification和Xray Debugger ,应是当今可属非常完备的软硬件同步设计环境。

结语
有人问笔者,为什么谈嵌入式操作系统专栏,这几期总是会讲很多硬件的观念?其实答案很简单,嵌入式系统产品的设计,并不容易把软硬件的界线明显区分开来,你硬要把软硬件隔开来做系统设计,可能就会导向桌上型计算机的趋势,无法把效率和成本在有竞争力的时程中,做最佳化调整。故未来整个系统的设计行为模型的建立之初,只需粗略考虑软硬件区隔,在做最佳化的流程中,才去弹性灵活地调整试验,哪些成分该属于软件或硬件。支持这样的产品系统设计,必须有很好的系统平台基础建设,而类似Xtensa核心芯片提供可组态可延伸架构功能,与Mentor Graphics的Nucleus Plus RTOS可以自动结合,快速产生系统建构平台,则很明显已经成为嵌入式系统设计流程的一个趋势。
感谢Tensilica孙诗征亚太区资深项目经理提供宝贵的参考资料,让笔者可以透过深入了解该公司在软硬件耦合技术的关键,介绍给读者们一个新颖的概念。