ADSP-2106X SHARC DSPs软件仿真器的实现
时间:07-24
来源:互联网
点击:
3 软件仿真器ADSPSim的构架与实现
ADSPSim在INTEL/WINDOWS 2000环境下运行,模拟SHARC体系结构的数字信号处理器,属于跨体系结构仿真,这也是采用解释型指令仿真技术的原因之一。
3.1主要功能
ADSPSim的主要功能是模拟ADSP-2106x执行其上扩展名为.dxe的可执行程序。此类目标可执行程序为 ELF(Executable and Linkable Format)格式,其中的调试信息符合DWARF2格式。除了模拟核心处理器基本功能外,ADSPSim还能仿真了双端口SRAM,IOP(I/O Processor)寄存器等。
除了模拟功能外,ADSPSim还实现了常用的程序调试功能,包括反汇编,断点(breakpoint)及内存读写监视点(watchpoint)的设置,单步进入/单步跳过运行,符号信息与行号信息的查询,存储器与寄存器内容的查看与修改,函数最大和最小十个执行时间统计,函数执行次数统计,覆盖率信息统计,保存/加载当前存储器状态。
ADSPSim还以动态链接库形式提供,大量接口函数提高了系统的可操作性和可扩展性。
3.2 ADSPSim的构架
ADSPSim按照图1所示各功能单元抽象得出相应模块,如图2所示。
图2 ADSPSim功能模块图
前面提到过,运行于ADSP-2106x上的目标可执行程序为ELF格式。GNU的BFD(Binary File Description,二进制文件描述)链接库并不能支持AD公司所用的ELF格式,因此ADSPSim设计时未使用该链接库,而是单独开发解析模块,即程序加载模块。为了方便向其它格式扩展,利用类和继承的优势,创建程序加载器基类,实际各类文件格式的解析由派生类完成。程序加载模块不仅解析程序得到相应的符号表、行号信息给调试功能模块,还负责映射指令和数据至仿真的存储器。
寄存器模块实现了通用寄存器和IOP寄存器,相应详细的寄存器编码和格式见附录A&C。为了方便调试程序,寄存器的内容可以通过接口函数显示修改。
仿真存储器内容由程序加载模块映射,各类芯片的存储器空间大小和编址不尽相同,但均分为内部存储空间、多处理器存储空间和外部空间3部分,其中的内部存储空间都包含IOP寄存器空间,正常字空间和短字空间。短字空间与正常字空间实际上是相同的物理空间,只是寻址方式不同,短字空间对内存以16bit为单位寻址,而正常字空间则以32/48位寻址。各芯片存储器不同之处详见第5章。注意,IOP寄存器实际上属于特殊的存储器空间。同样,存储器的内容也能通过接口函数显示修改。
调试功能模块提供对符号表、行号信息及其它调试信息的查询变量信息另外,ADSPSim还实现了调试运行功能,包括反汇编,单步进入/单步跳过运行,置断点/内存读写监视点,保存当前仿真器状态及存储器内容,或加载已保存的仿真器状态,统计函数执行时间和覆盖率信息等。
ADSPSim的关键模块为核心单元模块,即模拟了图1所示的核心处理器功能单元,包括包含有程序控制器,指令高速缓存,定时器及21kCore。程序控制器实现顺序执行、循环、子程序调用、跳转、中断等程序结构,及其它相关功能,详见第3章。21kCore包括了ALU、乘法器和移位器,并完成了三级流水中的译码和执行单元。图1所示的数据地址产生器(DAG)未单独实现,已合并至21kCore。核心单元部分各芯片也存在不同,例如中断基地址、短字空间地址的判断,这些细微的差别由相应的派生类实现。
图2中虚线框内为ADSPSim的功能模块,基于接口函数,图形界面模块提供用户对仿真器操作途径。
ADSP-2106x作为一个系列的数字信号处理器,其包含的四种产品指令系统和体系结构基本相同,唯一在于片上存储器的大小和外部接口不尽相同。仿真器基于面向对象的方法构架,面向对象技术的类和继承的利用,使得ADSP-2106x各产品的共性能很方便的抽象出来,相异之处由派生类实现,达到了代码的高度重用。
3.3 ADSPSim实现中的难点技术
3.3.1各类数据的表示
ADSP-2106x支持IEEE754/854标准定义的32位单精度浮点数,还支持相同格式的40位扩展精度浮点数(有额外的8位尾数)和16位短字浮点数(仅有4位指数12位尾数)。当然,ADSP-2106x也支持32位的定点格式,包括有符号或无符号的小数和整数(详见附录C)。ADSP-2106x数据寄存器为40位,用来存放上述定点和浮点数据。定点数据不难实现,而16/32/40位浮点数则需要额外构造浮点数据类型,来区分符号位、指数和尾数部分。运算时将构造的浮点数据结构转换为常见的浮点数进行运算,当然运算结果需要转换回来。
更特殊之处在于,ADSP-2106x的乘法单元包含80位乘法累加器MRF和MRB用于32位×32位=64位数据乘法。而C/C++中常用数据结构最多至64位,ADSPSim中构造了新的类作为80位数据以实现此类乘法(乘法具体算法见B.2.2&C.5)。利用运算符重载使得该类能同常见的数据结构进行运算,同样也能对其进行赋值;另外为了在运算中判断是否上溢/下溢/为负,还提供了相应的接口函数。
ADSPSim在INTEL/WINDOWS 2000环境下运行,模拟SHARC体系结构的数字信号处理器,属于跨体系结构仿真,这也是采用解释型指令仿真技术的原因之一。
3.1主要功能
ADSPSim的主要功能是模拟ADSP-2106x执行其上扩展名为.dxe的可执行程序。此类目标可执行程序为 ELF(Executable and Linkable Format)格式,其中的调试信息符合DWARF2格式。除了模拟核心处理器基本功能外,ADSPSim还能仿真了双端口SRAM,IOP(I/O Processor)寄存器等。
除了模拟功能外,ADSPSim还实现了常用的程序调试功能,包括反汇编,断点(breakpoint)及内存读写监视点(watchpoint)的设置,单步进入/单步跳过运行,符号信息与行号信息的查询,存储器与寄存器内容的查看与修改,函数最大和最小十个执行时间统计,函数执行次数统计,覆盖率信息统计,保存/加载当前存储器状态。
ADSPSim还以动态链接库形式提供,大量接口函数提高了系统的可操作性和可扩展性。
3.2 ADSPSim的构架
ADSPSim按照图1所示各功能单元抽象得出相应模块,如图2所示。
图2 ADSPSim功能模块图
前面提到过,运行于ADSP-2106x上的目标可执行程序为ELF格式。GNU的BFD(Binary File Description,二进制文件描述)链接库并不能支持AD公司所用的ELF格式,因此ADSPSim设计时未使用该链接库,而是单独开发解析模块,即程序加载模块。为了方便向其它格式扩展,利用类和继承的优势,创建程序加载器基类,实际各类文件格式的解析由派生类完成。程序加载模块不仅解析程序得到相应的符号表、行号信息给调试功能模块,还负责映射指令和数据至仿真的存储器。
寄存器模块实现了通用寄存器和IOP寄存器,相应详细的寄存器编码和格式见附录A&C。为了方便调试程序,寄存器的内容可以通过接口函数显示修改。
仿真存储器内容由程序加载模块映射,各类芯片的存储器空间大小和编址不尽相同,但均分为内部存储空间、多处理器存储空间和外部空间3部分,其中的内部存储空间都包含IOP寄存器空间,正常字空间和短字空间。短字空间与正常字空间实际上是相同的物理空间,只是寻址方式不同,短字空间对内存以16bit为单位寻址,而正常字空间则以32/48位寻址。各芯片存储器不同之处详见第5章。注意,IOP寄存器实际上属于特殊的存储器空间。同样,存储器的内容也能通过接口函数显示修改。
调试功能模块提供对符号表、行号信息及其它调试信息的查询变量信息另外,ADSPSim还实现了调试运行功能,包括反汇编,单步进入/单步跳过运行,置断点/内存读写监视点,保存当前仿真器状态及存储器内容,或加载已保存的仿真器状态,统计函数执行时间和覆盖率信息等。
ADSPSim的关键模块为核心单元模块,即模拟了图1所示的核心处理器功能单元,包括包含有程序控制器,指令高速缓存,定时器及21kCore。程序控制器实现顺序执行、循环、子程序调用、跳转、中断等程序结构,及其它相关功能,详见第3章。21kCore包括了ALU、乘法器和移位器,并完成了三级流水中的译码和执行单元。图1所示的数据地址产生器(DAG)未单独实现,已合并至21kCore。核心单元部分各芯片也存在不同,例如中断基地址、短字空间地址的判断,这些细微的差别由相应的派生类实现。
图2中虚线框内为ADSPSim的功能模块,基于接口函数,图形界面模块提供用户对仿真器操作途径。
ADSP-2106x作为一个系列的数字信号处理器,其包含的四种产品指令系统和体系结构基本相同,唯一在于片上存储器的大小和外部接口不尽相同。仿真器基于面向对象的方法构架,面向对象技术的类和继承的利用,使得ADSP-2106x各产品的共性能很方便的抽象出来,相异之处由派生类实现,达到了代码的高度重用。
3.3 ADSPSim实现中的难点技术
3.3.1各类数据的表示
ADSP-2106x支持IEEE754/854标准定义的32位单精度浮点数,还支持相同格式的40位扩展精度浮点数(有额外的8位尾数)和16位短字浮点数(仅有4位指数12位尾数)。当然,ADSP-2106x也支持32位的定点格式,包括有符号或无符号的小数和整数(详见附录C)。ADSP-2106x数据寄存器为40位,用来存放上述定点和浮点数据。定点数据不难实现,而16/32/40位浮点数则需要额外构造浮点数据类型,来区分符号位、指数和尾数部分。运算时将构造的浮点数据结构转换为常见的浮点数进行运算,当然运算结果需要转换回来。
更特殊之处在于,ADSP-2106x的乘法单元包含80位乘法累加器MRF和MRB用于32位×32位=64位数据乘法。而C/C++中常用数据结构最多至64位,ADSPSim中构造了新的类作为80位数据以实现此类乘法(乘法具体算法见B.2.2&C.5)。利用运算符重载使得该类能同常见的数据结构进行运算,同样也能对其进行赋值;另外为了在运算中判断是否上溢/下溢/为负,还提供了相应的接口函数。
- F1aSh存储器在TMS320C3X系统中的应用(11-11)
- 基于PIC18F系列单片机的嵌入式系统设计(11-19)
- DSP在卫星测控多波束系统中的应用(01-25)
- 基于PCI总线的双DSP系统及WDM驱动程序设计(01-26)
- 利用Virtex-5 FPGA实现更高性能的方法(03-08)
- DSP与单片机通信的多种方案设计(03-08)