2024年5月8日发(作者:)

DSP软件开发工具链的设计与实现

杨丹;史浩山;张梅娟

【摘 要】As an important medium in human-computer interaction for the

development of DSP applications, the design of software development

tool chain has become a key part of the development of SoC on DSP. In

order to design DSP software development tool chain preferably , this

paper proposes an approach based on machine description language LISA.

Firstly, we use the RESOUCE and OPERATION sections in LISA to model the

hardware resources and instruction set respectively, which could provide a

complete description of the abstract model of DSP. Subsequently, the

integrated software development tool chain, comprising an assembler, a

disassembler, a linker, a simulator and a debugger front -end , could be

generated from the LISA description on the PD platform. Finally, a DSP-

based processor ZWxxCore is taken for instance to verify the feasibility of

this method.%软件开发工具链作为DSP应用开发中人机交互的重要媒介,其设计

已成为DSP片上系统开发的关键部分;文章给出了一种基于机器描述语言LISA

设计DSP软件开发工具链的方法;首先,使用LISA表述中的RESOURCE和

OPERATION分别模拟硬件资源和指令集,从而完整描述DSP的抽象模型;然后,

利用PD平台将LISA描述生成包括汇编器、反汇编器、链接器、模拟器和调试器

前端在内的完整的软件开发工具链;最后,以一款DSP型处理器ZWxxCore为例,

验证了该方法的可行性.

【期刊名称】《计算机测量与控制》

【年(卷),期】2011(019)009

【总页数】4页(P2296-2299)

【关键词】DSP处理器;软件开发工具;LISA语言;PD平台;汇编器;模拟器

【作 者】杨丹;史浩山;张梅娟

【作者单位】西北工业大学电子信息学院,陕西西安 710129;西北工业大学电子信

息学院,陕西西安 710129;中国电子科技集团公司第五十八研究所,江苏无锡

214035

【正文语种】中 文

【中图分类】TP302

0 引言

电子世界日新月异,其产品发展力求功能更强,体积更小,换代更快。这无疑给电子产

品的核心——处理器带来了巨大挑战。DSP以远远高于通用微处理器的数据处理

能力和实时运算速度,在处理器领域扮演着日益重要的角色[1]。DSP具有良好的可

编程性,这使得DSP的片上系统功能实现从对硬件的依赖逐渐转向软件,应用开发的

重心也偏向于软件设计。因此,DSP的软件开发工具链成为其片上系统开发的关键

部分。

DSP软件开发工具链包括代码生成工具(如汇编器)和模拟工具(如模拟器)。一般来

说,代码生成工具依赖于处理器的指令集,是指令各种格式之间转换的纽带;而模拟工

具则进行硬件行为的仿真,是验证处理器的重要手段。整个工具链协同工作,完成

DSP应用开发的人机交互。

本文给出了一种基于机器描述语言 LISA(Language for Instruction-Set

Architectures)设计DSP软件开发工具链的方法,即使用LISA描述DS P抽象模型,

生成包括汇编器、反汇编器、链接器、模拟器和调试器前端在内的完整的工具链,

并以一款DSP型处理器ZWxxCore为例,验证了该方法的可行性。

1 DSP软件开发工具链总体设计

1.1 需求分析

该设计以使用汇编语言开发DSP应用为前提,完整的软件开发工具链应该包括:汇

编器、链接器、反汇编器、模拟器和调试器。各个工具依赖于 DSP的不同信息。

一般来说,DSP的各部分信息可以抽象为以下几个模型[2]:

(1)内存模型:模拟DSP的内存。

(2)资源模型:模拟DSP的有效硬件资源。

(3)指令模型:模拟DSP的指令集。

(4)行为模型:模拟DSP的指令执行过程和引起硬件资源的状态变化。

(5)时序模型:模拟DSP的指令执行时序。

DSP软件开发工具链的设计重点就在于如何完成抽象模型与开发工具之间的映射。

汇编器和链接器作为代码生成工具,作用是将汇编代码转换成机器能识别的二进制

代码,其主要依赖于指令模型。反汇编器作为一种验证手段,是代码生成工具的逆过

程,同样依赖于指令模型。而工具链中以模拟器最为复杂,既要仿真指令的执行过程,

又要模拟硬件资源的状态变化,它依赖于行为模型和资源模型。所有工具均按内存

模型指示分配内存,并在时序模型的控制下生成。

DSP的流水操作是其高速运算的基础,流水线可以达到每个时钟周期完成一条指令,

只有时钟级模拟才能有效的表现流水操作的特征。这就要求对行为模型的描述必须

达到时钟精度。同时,其时序模型的计时间隔也应为时钟周期。

1.2 方法选择

在以往的工程中,软件开发工具链中各种工具的设计往往采用不同的语言和平台,如

汇编器基于可重定目标的开放平台GAS设计[3],而模拟器则基于C语言设计[4]。

这种设计思想优点在于针对工具特性选择较为优化的方法,但是开发人员必须掌握

多种技术,开发难度高、周期长。此外,不同平台之间的接口问题还有可能影响整个

工具链的效果,并且各个部分的优化不一定能实现整体的优化。如果能实现基于同

一语言和平台设计完整的软件开发工具链,在工具链整体来看将是一种更为优化的

方法。

可用于设计软件开发工具的语言大致分为高级语言和机器描述语言两类。高级语言

以C语言为代表,通用性好、开发平台完善,能够设计各种软件工具。但是高级语言

体系由于完全脱离硬件,其语言描述和处理器模型之间的映射往往比较复杂,尤其在

实现DSP所需的时钟级模拟器时,设计人员要对处理器模型进行极为深层的分析,属

于比较复杂的方法。

机器描述语言与处理器模型之间更为接近。其中,VHDL偏向硬件,容易完成自身描

述与处理器模型之间的映射,但过于详尽的硬件表述对于软件设计来说并不需要,反

而会影响模拟速度,此外,在VHDL中提取指令集信息比较困难,比如汇编语法就不能

直接得到。ISDL(Instruation-Set Description Language)重在描述指令集,易于得

到代码生成工具,但是它对硬件资源的描述能力很差,无法产生时钟级模拟器。LISA

结合了VHDL和ISDL的特点,能够描述处理器的硬件资源和指令集,并定义了流水

线,可以建立DSP所需的时钟级模拟。

本文基于上述分析,选择 LISA作为开发语言。此外,Co Ware公司的

PD(Processer Designer)集成开发环境,集成有最新版的LISA2.0,能将LISA对处理

器的描述生成相应的软件开发工具,故选作本设计的开发平台。

1.3 设计思路

本设计基于LISA描述DSP的抽象模型,将其输入给PD生成器,得到DSP的软件开

发工具链,包括汇编器、链接器、反汇编器、模拟器以及调试器前端[5]。LISA生成

的工具链如图1所示。

图1 LISA生成的软件开发工具链

工具链中各种工具的工作原理如下。

汇编器:汇编器的的输入是汇编代码,包括处理器的汇编指令和控制汇编过程的伪

指令。执行流程循环体按照流水线的4个阶段进行:

(1)取指:取得第一条输入的汇编指令。

(2)译码:将这条汇编指令去匹配LISA的描述。如果匹配成功,则进入下一阶段;不

成功则报错。同时,第二条指令取指。依次类推。

(3)执行:取得汇编格式对应的二进制代码。第二条指令译码。

(4)写回:将二进制代码输出。第二条指令执行。

循环体执行完成后,输出包含对应的二进制代码的目标文件。

反汇编器:是汇编器执行的逆过程。

链接器:将汇编器输出的一个或多个目标文件以及库文件链接在一起,按照目标内

存和汇编分段信息组织代码,得到可执行文件。

模拟器:同样在流水线中执行。输入可执行文件,取指阶段取得指令二进制代码,译

码阶段匹配后,将执行模拟指令行为的C代码,再将结果写回模拟的硬件资源,得到资

源的状态变化。

调试器前端:LISA生成的调试器前端可以作为模拟器的可视化界面,查看模拟过程

中的内部状态。同时可以显示反汇编文件,模拟的内存以及流水线等信息。在调试

器中可以设置断点,分步执行、调试并修改程序。

1.4 实现过程

LISA作为一种机器描述语言,专注于建立处理器模型。其语言表述分为

RESOURCE和OPERATION两个部分,其中RESOURCE部分包含建立内存模型和

资源模型所需对象的定义,而OPERATION则用于描述指令模型、行为模型和时序

模型。

1.4.1 RESOURCE

RESORCE部分定义处理器内存、寄存器、流水线和全局变量,以关键字RESORCE

为标识[6]。内存的定义只用于模拟硬件架构,构成内存模型;其他资源可以在

OPERATION部分被引用,构成资源模型。

定义内存:包括内存属性和内存地址映射,分别使用关键字MEMORY和

MEMORY_MAP。例如,定义32位地址、256M内存,地址以字节存储,可读/写操

作,地址从0开始,描述如下:

RESOURCE

{MEMORY uint32 prog_mem//内存位宽 名称{ SIZE(0x10000000);//地址个数

BLOCKSIZE(8);//每地址存储位数

FLAGS(R|W);//可读/写 }MEM ORY_MAP//内存地址映射

{RANGE(0x00000000,0x0fffffff)->

prog_mem[(31..0)];//范围是从0~256M} }

定义寄存器:一般使用关键字REGISTER,程序计数器则使用关键字

PROGRAM_COUNTER。

RESOURCE

{ REGIS TE R int 32 GP R[0..15];//16个通用寄存器

PROGRAM_COUNTER uint32 PC;//程序计数器}

定义流水线:指令要在流水线中执行,必须事先定义。例如,定义流水线pipe,四级

分别为FE,DC,EX,WB,对应取指,译码,执行和写回这4个阶段。

RESOU RCE

{ PIPELINE pipe={FE;DC;EX;WB}; }

定义全局变量:

RESOU RCE

{ in t32 operand;//32位整型变量 }

1.4.2 OPERATION

OPERATION部分定义指令操作的主体,从入口节点main操作开始,有条不紊地执

行指令的取指、译码、执行和写回操作,并将操作安排在流水线的相应阶段,在流水

线中执行指令操作的循环体。

每个操作以关键字OPERATION为标识,由若干属性构成。属性用于描述处理器抽

象模型的相关信息,分别在以下几个段内定义[7]:

DEC LARE:定义操作的局部变量,以及对其他操作的引用。

SYNTAX:定义指令的汇编格式。CODING:定义指令的二进制格式。

BEHAVIOR和EXPRESSION:定义描述指令执行过程的C代码。

AC TIVA TION:定义流水线中后续操作的激活时序。

一个操作可以具有全部属性,也可以只由部分属性构成。基于操作提供的属性信

息,OPERATION部分可以建立处理器的指令模型、行为模型和时序模型。在LISA

的表述中,这3个模型可以在指令的执行过程中同步建立。

首先,将指令执行的操作安排在流水线的各个阶段。流水线及其阶段按照2.4.1节的

定义。指令的流水操作如图2所示。

图2 指令的流水操作

然后,将共有的操作提取出来,并添加main操作,就形成了OPERATION部分的结构,

如图3所示。图3中每个节点代表一个操作。

最后,根据OPERATION的结构,对每个节点 (即一个操作)进行描述:

main:指令入口,指引指令执行并激活fetch操作。作为特殊操作,main并不处于

流水线的任何阶段。

OPERATION m ain

{ DECLARE{INST ENCE fetch;}

BEHAVIOR{execute();shift();}

ACTIVAT ION{fetch} }

fetch:处于取指阶段。程序计数器自动加1,并激活decode操作。

图3 指令流水操作的OPE RATION结构[8]

OPERA TION fetch IN

{ DECLARE{INST ENCE decode;}

BEHAVIOR{PC=PC+1;}

AC TIVATION{decode} }

decode:处于译码阶段。输入的指令取得与之匹配的操作,并激活匹配的指令操作

(如 alu,load…)。

OPERA TION decode IN

{ DECLARE{GROUP instruction={load||alu||…};}

AC TIVATION{instruction();} }

alu等:处于执行阶段。这是指令执行的主体部分,包含汇编格式、二进制格式和模

拟指令行为的C代码。执行操作应描述指令集中的全部指令。任何一条输入的指

令必须去匹配相应属性才能执行。汇编器的输入应匹配SYNTAX段,输出

CODING段。而模拟器的输入则匹配CODING段后执行BEH AVIOR段。

LISA对这类操作的描述非常灵活。例如,格式相同的add和sub两条指令,可以各

自用一个操作描述,但更好的方法是提取共有部分建立alu操作,再分别描述不同之

处。后者的好处在于指令结构清晰,并有效减少了代码量。

OPERA TION alu IN

{ DECLARE{GROUP s1,s2,dest={reg};

GROUP opcode={add||su b};

INS TANCE w riteback;}

S YN TAX{opcode~ ” “dest” ,”s1” ,”s2}

CODING{0b0[6]s1 s2 dest 0b0[5]op code}

BEHAVIOR{op1=GPR[s1];op2=GPR[s2];opcode();}

AC TIVATION{w riteback} }

OPERA TION add

{CODING{0b000010}

BEHAVIOR{resu lt=op1+op2;} }

OPERA TION su b

{CODING{0b000011}

BEHAVIOR{resu lt=op1-op2;} }

值得一提的是,在alu中使用关键字GROUP引用了reg作为操作数。reg也在

OPERATION部分定义。但它不在流水线中。reg属于公用操作,返回一个寄存器

名,可以被多个操作引用[8]。

OPERA TION reg

{ DECLARE{LABEL idx;}

S YN TAX{"r"~idx}

CODING{id x=0bx[5]}

EXPRESSION{idx} }

w riteback:处于写回阶段。将指令执行结果写入目的寄存器。

OPERATION w riteback IN

{ BEHAVIOR{GPR[dest]=result; }

OPERATION部分的所有操作的SYNTAX和CODING属性构成指令模

型,BEHAVIOR属性构成行为模型,AC TIVATION属性则构成时序模型。再加上

RESOURCE部分建立的内存模型和资源模型,LISA语言系统成功描述了DSP的全

部抽象模型。将LISA描述输入PD生成器,能得到完整的DSP软件开发工具链。

2 设计实例

为验证方法的可行性,本文设计并实现了ZWxxCore的软件开发工具链。

ZWxxCore是一款高性能的DSP型处理器,适用于现代通信,图形图像处理以及片

上系统开发等诸多领域。ZWxxCore具有一个整数运算单元和一个存取操作单元,

两个单元均支持四级流水操作。ZWxx Core同时支持16-bit及32-bit两种指令

编码格式,具有复杂的指令集架构。

本设计基于LISA描述的ZWxx Core信息如下:

RESOURCE:超过50个资源;

OPERATION:超过800条操作;

在PD平台中编译LISA源码,生成汇编器、反汇编器、链接器、模拟器和调试器前

端这一套工具链。工具链的执行流程如图4所示。汇编测试文件经过汇

编器得到二进制对象文件,再经由链接器得到目标机的可执行文件

。可执行文件经过反汇编器得到反汇编文件,验证指令的反汇编格

式与二进制格式 (图5)。再将可执行文件输入模拟器的可视化界面,即调试器前端,

查看指令的模拟执行过程(图6)。结果显示,所有测试指令生成的二进制格式和反汇

编格式准确无误,指令模拟执行效果良好。

图4 工具链执行流程

3 结论

本文描述了一种基于LISA语言设计DS P软件开发工具链的方法。该方法的优势

在于以一种语言的描述得到整套的DSP软件开发工具链,不仅能够提高开发效率,同

时工具链具有系统性和完整性。设计实例证明,该方法设计的软件开发工具链功能

全面,代码生成准确度高,模拟执行效果良好。

图5 (左)与对应的(右)示例

图6 模拟器/调试器界面

【相关文献】

[1]张雄伟,曹铁勇.DS P芯片的原理与开发利用 [M].北京:电子工业出版社,2000.

[2]Pees S,Hoffmann A,Zivojnovic V,et -Machine Description Language for Cy cle-

Accu rate M odels of Prog rammable DSP Architectures[A].Proceeding s of the Design Au

tomation Conference[C].New Orleans,1999.

[3]陈文平.GNUas的移植 [J].计算机工程,2003,29(10):107-109.

[4]黄南戈.嵌入式CP U指令系统通用仿真研究与实现 [D].福建:厦门大学,2009.

[5]Hoffmann A,Nohl A,Brau n G,et al.A survey on modeling issues using the machine

descrip tion langu age LIS A[A].IEEE In ternational Conference on Acoustics,Speech,and

Signal Processing[C].S alt Lake City,2001.

[6]LISA Modeling Fundamentals[Z].San Jose:CoWare,2006.

[7]LISA Language Reference M anu al[Z].San Jose:CoWare,2006.

[8]Processor Design Guide[Z].S an Jose:CoWare,2006.