彭珲 张晓娜 张翔 于鑫
【摘要】 首先分析DSP6x架构嵌入式CPU的模拟需求,然后研究了DSP6x架构的嵌入式CPU模拟器的架构设计、组成与功能、运行流程与接口设计等,最后设计实现了基于DSP6x架構嵌入式CPU模拟技术构建的嵌入式软件测试平台。
【关键词】 DSP6x 嵌入式CPU 模拟仿真
引言:
DSP6x系列的CPU是典型的嵌入式系统芯片处理器。该系列CPU采用超长指令字结构,具有易编程性,且编译性能较好,同时该CPU上还集成了一些大容量的存储器,使得应用变得非常方便。所以广泛应用于通信导航、弹载星载、航空航天等多种领域的嵌入式装备设备中。
本文以典型的DSP6x系列CPU为研究对象,通过对DSP6x系列嵌入式CPU内核的结构、组成、指令执行过程和执行时序的研究分析,介绍了对DSP6x系列芯片进行仿真模拟的总体架构、操作流程、指令集模拟执行过程等。
一、DSP6x嵌入式CPU原理
1.1典型DSP6x架构的CPU分析
典型DSP6x系列DSP包括DSP62x和DSP64x两个定点系列和DSP67x一个浮点系列,其DSP芯片中包括CPU、存储器及定时器、串口等外设。
DSP6x系列DSP含有不同大小的数据存储器。与CPU一样,DMA控制器(直接存储访问)、EMIF接口(外部存储器接口)和省电逻辑电路等外设,也是DSP必备的组成部分。通用寄存器组一般分为A组和B组。8个运算功能单元的名称分别为.L1、.L2、.S1、.S2、.M1、.M2、.D1、.D2。内核控制寄存器包括AMR、CSR、IFR、ISR、ICR、IER、ISTP、IRP、NRP、PCE1、PC等控制器。控制逻辑是DSP6x处理器内核各种运行时序控制的单元。测试和仿真是接仿真器的接口。中断是DSP6x处理器的中断处理模块。
1.2典型DSP6x架构CPU原理分析
DSP6x系列CPU的总线分为两种:程序总线和数据总线。程序总线主要负责将存储在CPU芯片程序存储器中的指令,传送至CPU芯片的执行器执行。程序总线宽度为256位,一次取指操作是同时取8条指令,将8条指令同时通过程序总线传递给CPU执行器。在执行器上执行时,每条指令都独占一个操作单元。取指、分配和译码三个指令操作,都可在一个CPU周期内读取并传递8条(32位)指令。这些指令的操作方式都是由控制寄存器组进行控制。从在程序存储器中读取第一个取值指令包起,一个超长指令字的处理流程就开始了。
DSP6x系列CPU芯片外存储器及芯片外总线都是不区分程序和数据的。CPU芯片所有存储器(内部和外部的程序存储器和数据存储器),都是按字节进行统一编址的。无论是读外部指令或者对外交换数据,CPU都需要通过DMA和EMIF。但CPU内部交换数据时使用数据总线,在取指令时才使用程序总线。
与指令执行相关的主要包括数据通路和控制寄存器。数据通路一般包括执行指令的功能单元、通用寄存器组和数据总线。DSP6x系列CPU有两个类似的数据通路,每个数据通路都有4个功能单元和1组通用寄存器。4个功能单元执行指令的操作,所有算术逻辑运算指令(除读、存储及转移指令外)的源操作数和目的操作数都放在通用寄存器中,这样指令运算的速度就更快。CPU一般使用读指令和存储指令在通用寄存器组与片内存储器间进行数据交换,在进行数据交换时,由两个指令的数据寻址单元提供数据存储的地址。
1.3指令执行过程分析
DSP6x系列CPU的指令执行过程都是按3级流水线模式。流水线的每一级由不同数量的执行节拍组成。一般“取指”级有4个节拍;“译码”级有2个节拍;“执行”级执行节拍数不是固定的,不同指令有不同的节拍数。每个指令执行的节拍数量的差别主要在“执行”级。
“取指”指令的4个节拍分别是:PG、PS、PW、PR。“译码”指令的2个节拍分别是:DP和DC。在“译码”级中,在DP节拍期间,1个取值包的8条指令可根据并行执行的需要,分成若干个执行包。
在“执行”指令中,定点计算和浮点计算的所占的流水线节拍数量是不同的,前者最多占5个节拍,而后者最多则可占有10个节拍。
二、DSP6x嵌入式CPU模拟器总体设计
2.1架构设计
嵌入式CPU模拟器在设计上采用模块化的结构设计。其系统架构设计如图1所示。
从DSP6x的体系架构上来分析,DSP62x、DSP64x和DSP67x的体系结构是一致的,包括处理器流水线、算术运算单元、内存、寄存器等。在设计时,采用向下兼容的模式,DSP67x兼容DSP64x,DSP64x又兼容dsp62x。
2.2组成与功能
嵌入式CPU模拟器主要由目标码文件解析、内存模拟、指令集模拟解析、算术运算单元模拟、总线模拟、流水线模拟、寄存器模拟、外设接口仿真等功能模块组成。
1.目标码文件解析
DSP6x处理器的目标码格式为COFF文件格式。模拟器读取目标码文件中的数据到模拟器仿真内存中,读取的数据包括代码段的数据、数据段的数据、向量表段的数据等。
2.内存模拟
按照DSP6x处理器的内存分布来动态创建内存空间。
3.指令集模拟解析
模拟器模拟DSP6x系列的180多条指令,包括存储类、算术类、逻辑类、搬移类、程序转移类等类别的指令。模拟解析每种类别的指令在不同的运算功能单元上运行。
4.算术运算单元模拟
模拟器模拟DSP6x架构CPU的6个算术运算单元ALU、2个乘法器和1个地址产生器等。模拟这6个算术运算单元ALU和2个乘法器在1个CPU周期内同时执行8条指令的运算过程。
5.寄存器模拟
模拟器模拟DSP6x处理器的A和B两个通用寄存器组,以及通用内核寄存器。模拟其利用通用接口函数,对通用寄存器组和特殊功能寄存器进行访问和位操作的运行过程。
6.总线模拟
模拟器模拟DSP6x处理器的程序总线和数据总线。模拟总线的位数为32位。程序总线和数据总线运行过程采用并行模拟的技术进行模拟。
7.流水线模拟
模拟器模拟DSP6x的“取指、译码、执行”3级流水线的工作过程,并根据3级流水线各级的实际工作节拍,模拟指令在各级的CPU工作节拍。
8.外设接口仿真
模拟器模拟外设接口。在外设接口模块中,包含接口仿真所需要的接口函数以及时序控制与调度模块,来完成外设仿真的实时性。
2.3 运行流程设计
在嵌入式CPU模拟器运行流程中,首先导入源代码进行交叉编译,交叉编译器编译后的二进制目标码导入到嵌入式CPU模拟内存中,然后通过嵌入式代码指令集执行。在执行过程中,当访问特定端口地址时,响应绑定的外设仿真函数,最后外设仿真函数的接口数据源与仿真测试环境构建进行数据交互,完成整个嵌入式软件测试的运行流程。
2.4外部接口设计
在嵌入式软件外部接口中,嵌入式CPU模拟器与外设接口的访问都是通过外部接口寄存器进行的,每个外部接口的寄存器与具体地址空间一一对应。访问外部接口寄存器,就是访问特殊的地址空间。通过设定地址空间绑定函数,关联外设与外设仿真接口函数,实现外部接口仿真。
根据上述嵌入式软件外部接口仿真过程,设计外部初始化接口和外部参考时钟接口。在外部初始化接口中,根据外设寄存器的端口地址,把外设关联到相应的外设仿真函数中,实现IO、AD/DA、串口、CAN、1553B等外设与仿真外设库的关联。外部参考时钟实现外部接口设备的时序仿真与控制。寄存器读写接口实现相关的内存、寄存器的读写功能。
在嵌入式软件外部接口中,还设计了寄存器读写接口、内存读写接口、中断事件触发接口、数据传递接口、内核处理器的控制接口等。内核处理器的控制接口包括启动接口、停止接口、继续执行接口和复位接口。
三、结束语
在通用计算机平台上,模拟并运行嵌入式软件,是提高嵌入式软件开发与测试效率的通用方法,不同嵌入式系统模拟的技术不同,但是关键技术都是嵌入式CPU对指令执行过程的模拟。本文重点研究了嵌入式CPU模拟的技术方案,限于篇幅的限制,其具体实现的细节这里就不再类似。有兴趣的读者可以查阅本作者其他类似论文。
参 考 文 献
[1]蔡建平,关于嵌入式应用开发技术 单片机与嵌入式系统应用 2001年第1期
[2](美)奥沙纳(Oshana,R),(美)雷林(Kraeling,M.)主编;单波等译.嵌入式系统软件工程:方法、实用技术及应用[M].北京:清华大学出版社,2016
[3](美)施部.克.威(V,S.K.)著,伍微譯.嵌入式系统原理、设计及开发[M].北京:清华大学出版社,2012
[4]文玉亮(导师:宋彬)H.264编码算法的DSP优化与实现,《西安电子科技大学硕士论文》—2008-01-01
[5]董培(导师:沈玉荪)H.264编码器在DSP和智能手机平台上的优化实现,《北京工业大学硕士论文》—2008-03-01