Professional Documents
Culture Documents
3 高性能X-DSP指令流水线... 件设计实现与软硬件协同验证 李睿婷
3 高性能X-DSP指令流水线... 件设计实现与软硬件协同验证 李睿婷
UDC 密级 公 开
工程硕士学位论文
与软硬件协同验证
硕士生姓名 李睿婷
学 科 领 域 软件工程
研 究 方 向 高性能微处理器设计
指 导 教 师 刘衡竹 教授
国防科学技术大学研究生院
二〇一四年三月
Design and Implementation of Instruction
Pipeline and Hardware/Software
Co-verification
Candidate:Li Ruiting
Advisor:Prof. Liu Hengzhu
A thesis
Submitted in partial fulfillment of the requirements
for the professional degree of Master of Engineering
in Software Engineering
Graduate School of National University of Defense Technology
Changsha,Hunan,P.R.China
March,2014
国防科学技术大学研究生院工程硕士学位论文
目 录
摘 要 ................................................................................................................. i
Abstract ............................................................................................................... ii
第一章 绪论 ...................................................................................................... 1
1.1 课题背景及意义 ............................................................................................. 1
1.1.1 研究背景 ................................................................................................ 1
1.1.2 课题意义 ................................................................................................ 3
1.2 流水线技术研究 ............................................................................................. 3
1.2.1 流水线综述 ............................................................................................ 3
1.2.2 流水线的优化技术 ................................................................................ 6
1.3 本文的主要内容 ............................................................................................. 8
1.4 文章的组织结构 ............................................................................................. 9
致 谢 .............................................................................................................. 62
参考文献 ........................................................................................................... 64
作者在学期间取得的学术成果 ........................................................................... 68
第 III 页
国防科学技术大学研究生院工程硕士学位论文
表 目 录
第 IV 页
国防科学技术大学研究生院工程硕士学位论文
图 目 录
第 VI 页
国防科学技术大学研究生院工程硕士学位论文
摘 要
关键词:数字信号处理;流水线技术;超长指令字;指令派发;指令流控;
软硬件协同验证;PLI 接口技术
第 i 页
国防科学技术大学研究生院工程硕士学位论文
Abstract
X-DSP processor is a high-performance 64-bit floating-point vector multi-cores
DSP designed by the Institude of Microelectronics, National University of Defense
Technology independently. Under 40nm technology, the frequency can achieve 1GHz
by adopting the VLIW architecture with a 40-bit/80-bit variable-length RISC instruction set
and a 32-bit/64-bit fixed-point/ floating-point operation. A maximum of eleven instructions
can be issued in every clock cycle.
Based on the research work of X-DSP processor, this dissertation analyzes the
pipeline technology firstly, and then realizes the instruction dispatch unit and pipeline
control unit which have been verified by using the proposed HW/SW co-verification.
The main innovations and contributions are listed as follows:
1) After analyzing the architecture, the instruction format and the pipeline of the
X-DSP processor, this dissertation proposes the design principles of the instruction
dispatch unit and pipeline control unit in the instruction pipeline components;
2) Under the VLIW structure, the instruction dispatch unit is designed, which
allows dispatching the instruction across the border of the instruction package, and
supports L1P bypass and emulation/test from ET;
3) Based on the analysis of the characteristics of the X-DSP’s branch slot and the
support of simulation, instruction control unit has been proposed to control the
instruction stream;
4) According to the logic design of instruction dispatch unit and pipeline control
unit, this dissertation verifies these functions ,and executes the coverage analysis and
logic synthesis;
5) To overcome the disadvantages of conventional FPFA prototype, a new
PLI-based debugging and verification technology is proposed, which utilizes PLI
interface to accomplish nested invoking between C and Verilog codes and adopts
data-sharing mechanism to accomplish the communication between different processes.
Based on HW/SW co-design, the instruction pipeline of the X-DSP is verified. The
results show that this principle can realize debugging and the function are fully verified
during the design process.
第 ii 页
国防科学技术大学研究生院工程硕士学位论文
第一章 绪论
1.1 课题背景及意义
1.1.1 研究背景
第 2 页
国防科学技术大学研究生院工程硕士学位论文
2) 采用流水线技术,对处理器内部的资源消耗有所增加,例如逻辑单元、寄
存器个数、存储器个数;
3) 流水线级数增加,性能指标不一定成正比增加,应该注意两者之间的利弊
权衡。
1.1.2 课题意义
1.2 流水线技术研究
1.2.1 流水线综述
所谓流水线技术(Pipeline Technology),是指将一个重复的时序过程分解成为
若干个子过程,而每个子过程都可有效地在其专用的功能段上与其他子过程同时
执行。这样分段的指令执行模式,有效的提高了处理器的指令级并行性,因此,
流水线技术,通常在高性能的、需要经常进行大规模运算的复杂处理器系统中得
第 3 页
国防科学技术大学研究生院工程硕士学位论文
数据通路 寄
存
器
CLK
(A) 常规数据通路
输入 输出
寄 数据 寄 数据 寄
存 通路Ⅰ 存 通路Ⅱ 存
CLK 器 器 器
(B) 采用流水线技术数据通路
图 1.1 采用流水线技术的数据通路
如图 1.1 所示,是采用流水线技术前后数据通路的对比图。流水线技术的基本
原理是:对每一步的运算结果进行锁存,在时钟节拍的控制下,逐步完成运算的
全过程[28]。如图 1.1(A)所示,输入信号经过一段数据运算后,直接在时钟周期
的控制下,一拍锁存输出,一次只能处理一组输入数据。图 1.1(B)中采用了流
水线技术,在数据通路之间插入寄存器,锁存输出,虽然每组输入值需要经过 3
个节拍才能得到执行结果,但每个节拍都有一组新值输入到下一级的运算电路,
每级运算电路上的数据并行运算,系统工作速率即为时钟频率[26]。与图 1.1 的流水
线示意图相对应的流水线时空图,如图 1.2 所示。
Clock Cycles
CPU Type 1 2 3 4 5 6 7 8 9
Non-Pipelined F1 D1 E1 F2 D2 E2 F3 D3 E3
Pipelined F1 D1 E1
F2 D2 E2
F3 D3 E3
Pipeline Full
图 1.2 流水线时空图
如图 1.2 所示,不采用流水线技术时,每条指令执行完成需要 3 个时钟周期,
第 4 页
国防科学技术大学研究生院工程硕士学位论文
完成如上图所示的三条指令需要 9 个时钟周期。但是,如果采用了流水线技术,
执行完三条指令总共只需要 5 个周期,这是因为,当一条指令的进入执行(E1)
站时,第二条指令可以同时处于译码(D2)站,第三条指令也同时位于取指(F3)
站,此时就实现了满流水线状态(Pipeline Full)[30]。由此可见,流水线技术是增
大指令级并行、提升处理器主频十分有效的方法。
早期,传统的 8 位微处理器普遍采用 3 级指令流水线,如图 1.3 所示的流水线
结构,指令流水线划分为三个阶段:取指、译码和执行。
执行部件 EXE
程 指
取 译 结
序 令
指 码 运算 果
存 译 读取 写入
寄 寄 逻辑 锁
储 码 READ WRT
存 存 ALU 存
器 器
器 器 器
ROM DEC
图 1.3 3 级流水线结构图
这种流水线结构的优点是:功能划分清晰、容易理解,流水线两侧组合模块
功能界限明确;缺点是:模块间的规模、路径延时很难匹配均衡,通常来说,执
行模块的功能复杂、逻辑集中,导致路径延时明显,占用了流水线上其它两个阶
段的时序余量[31]。
对于流水线结构的改进,衍生出典型的 5 级流水线结构,如图 1.4 所示,整个
指令流水线划分为 5 个阶段:取指、解码、读取、运算和写回。
程 指 中 结
取 译
序 令 间 果
指 码 运算
存 译 读取 中 结 写入 锁
寄 寄 逻辑
储 码 READ 间 果 WRT 存
存 存 ALU
器 器 结 器
器 器
ROM DEC 果
第 5 页
国防科学技术大学研究生院工程硕士学位论文
1.2.2 流水线的优化技术
在微处理器的设计过程中,随着性能需求的不断提升,处理器对指令流水线
效率的要求也越来越高,因此,对于流水线的优化已然成为微处理器研究领域的
焦点。目前主流的流水线优化技术有:寄存器均衡、操作队列复用、精确例外处
理、流水线调度、Tomasulo 算法、寄存器重命名、Cache 技术等[28]。
1.2.2.1 寄存器均衡
寄存器均衡(Retiming)是现代微处理器设计领域广泛采用的流水线优化技术
[33]
。对于结构、算法复杂的数字信号处理,寄存器均衡技术是以单个功能模块为
单位,在各个功能块之间插入寄存器组,从而把之前的长延时路径分割为若干段
子路径。采用 Retiming,使得模块的时序特性由单个功能块的路径延时所决定,
因此,与 Retiming 之前的处理器性能相比,最高工作频率可获得成倍增加,倍数
取决于流水线级数[34]。
以 8 位除法器为例,分析寄存器均衡技术对流水线时序性能的改善。如图 1.5、
1.6 所示,分别是指令流水线在采用 Retiming 技术前后的除法器结构框图。
Zero 商
移 移 移
位 位 位
比 比 …… 比
被除数 较 减 较 减 较 减 余数
法 法 共八组 法
器 器 器
除数
结 商
Zero 移 移 结
果 果
位 位
寄
比
存 …… 比 寄
被除数 较 减 较 减 存 余数
器 共八组 器
法 法
器 器
除数
CLK
第 6 页
国防科学技术大学研究生院工程硕士学位论文
1.2.2.2 操作队列复用
“龙芯一号”是由中国科学院计算技术研究所研发的拥有自主知识产权的高性
能通用微处理器,集成 32 位超标量处理器内核,支持 MIPS 32 指令集,通过采用
基于操作队列复用的 5 级流水线结构,结合寄存器重命名机制,来实现更好的保
证例外现场的精确性。
在微处理器的流水线设计过程中,比较常见的两个问题即是:例外处理和相
关解决。“龙芯一号”微处理器巧妙地把例外处理与指令流水线紧密地耦合在一起,
在数据通路的设计中,让例外结果与正常结果并行,不区分二者在执行过程中的
区别,只有在指令结束阶段才对例外结果进行特殊处理[36]。不仅如此,“龙芯一号”
把转移指令的猜测错误机制作为一种特殊例外,并且利用例外处理的取消来保持
现场精确逻辑。通过这种处理机制,不仅达到简化设计的目的,同时也改善了流
水线上例外处理的瓶颈,还可以让位于转移指令后的猜测执行指令,尽可能的往
下执行[38][37]。
如图 1.7 所示,是“龙芯一号”微处理器操作队列复用的指令流水线结构图[38]。
第 7 页
国防科学技术大学研究生院工程硕士学位论文
结果总线模块
发射总线:Valid,OP,Src1,Src2,Qid,Imm,Qj,Vj,Qk,Vk,FQj,FVj,FQk,FVk…
Qj,Vj,Qk,Vk FQj,FVj,FQk,FVk
结果总线:Valid,Qid,Value,…
Valid,QP,Qid,Imm
通用寄存器 浮点寄存器
Valid,OP,Dest,Src1,Src2,Qid,Imm,Qid,Res1,WB1,Res2,WB2
Commit总线:Valid,OP,Dest,Qid,Value,…
操作队列
译码总线:Valid,OP,Src1,Src2,Dest,Imm …
译码模块
Valid,Inst,…
取指总线 IR PC
取指模块
图 1.7 操作队列服用的指令流水线结构
除此之外,流水线设计过程中客观存在的相关性,一直都是影响流水线性能
的关键所在。程序在执行过程中,流水线中一旦出现相关,必然会阻碍指令流水
线的顺利执行,因此,如果不能很好的解决相关性问题,不但会影响处理器的性
能,也可能直接导致执行结果的错误[39]。
总体来说,在当前主流的高性能 DSP 中,大多都采用流水线技术以提高微处
理器性能,但是面对仍然客观存在的问题,证明在流水线技术发展的道路上我们
还有很长的路要继续探索[40]。
1.3 本文的主要内容
目前主流的流水线优化技术,指出本课题的研究意义与主要工作内容;
2) 介绍 X-DSP 处理器的内核结构特征,分析 X-DSP 指令集并针对其指令流
水线做详细研究;
3) 针对指令派发部件的功能需求,实现可跨取指包边界的、最大支持 11 指
令并行发射的指令派发部件,支持仿真调试部件(Emulation Test,ET)对流水线
的控制功能,并对关键功能点进行系统级验证;
4) 设计并实现指令流控部件功能,介绍其总体设计结构及 X-DSP 的分支延迟
槽特征,支持仿真调试部件通过读写访问译码、执行三站以实现软件断点的功能,
并对关键功能点进行系统级验证;
5) 通过分析传统 FPGA 验证方案的不足,提出对 X-DSP 流水线功能的验证
与调试不再采用 FPGA 原型验证,探索并尝试新方法——基于 PLI 技术新型软硬
件协同的调试/验证方案,通过 PLI 接口实现 C 编程与 Veirlog 的嵌套调用、采用
数据共享机制实现不同进程间的通信。在设计并实现该验证模型的基础上,对流
水线上关键的调试功能进行验证实践。
1.4 文章的组织结构
64B
标量处理单元 标向量共 向量处理单元(VPU)
(SPU) AM
8B 享寄存器 128B Shuffle
256B VMC
取指 指令 (SVR) 运算阵列
单元 SPE V V V
流控 V V V 256B
256B广播 P P P 存储阵列
SM P P P
…… E E E
E E E
L1P SMC 1 1 1
L1D 0 1 2
3 4 5
ET DMA
128B
第 10 页
国防科学技术大学研究生院工程硕士学位论文
量访存单元为大宽度的向量运算提供高效的数据供给及搬移支持;ET 部件提供仿
真/调试功能。
如图 2.1 所示,Matrix 2 内核的主体部分及其功能,包括以下几个方面:
1) 一级程序 Cache(L1P): L1P 接收取指(Fetch)和派发部件(DP)的缺
失请求,通过 DNAC(DSP Node Access Controller,节点访问控制器)向外部存储
空间请求指令包,粒度为 64B,并发送给 Fetch 或 DP。程序顺序执行时, L1P 为
Fetch 提供顺序取指包,但在派发过程中遇到 L1P 旁路请求时,L1P 会优先处理来
自 DP 的取指包旁路请求。
2) 取指部件(Fetch):在指令流控的作用下,按照程序产生的地址,包括顺
序地址、分支地址、中断/异常地址,完成指令获取。Fetch 将从 L1P 中获得的 64B
指令包发送给派发单元。顺序地址是当前地址生成站自加 64B(即 0x40),按 512
位对齐,也就是一个取指包的大小。
3) 指令派发(DP):DP 接收到指令包,根据执行包并行位和长度位信息,
提取即将执行的指令,并分别发送到相应的执行单元:SPU、VPU、SM、AM。
Matrix 2 内核采用 VLIW 结构,支持 40/80 位可变长执行包,最大支持 11 条标/向
指令混合并行派发。在节约了指令空间的同时,提高了编程的灵活性。
4) 标量处理单元(SPU):包括指令流控单元、标量执行单元以及标量访存
单元。其中,最主要的标量执行单元(SPE)是指令执行的计算引擎,负责运算数
据的串行处理。SPE 接收派发部件的标量运算类指令,译码后送到对应的功能运
算单元,其内部集成 3 个运算部件,分别是 SMAC1、SMAC2 和 SIEU,用于支持
标量定点/浮点运算。2 个 SMAC 单元同构,支持单/双精度定点/浮点乘加运算。IEU
支持定点运算,包括除法操作。SPE 内包含 64 个 64 位局部通用寄存器。
5) 向量处理单元(VPU):VPU 是可扩展向量运算簇,由 16 个同构 VPE 及
混洗部件构成。 VPE 内部集成 4 个运算部件,分别是 VMAC1、VMAC2、VMAC3
和 IEU,用于支持向量定点/浮点运算,不支持硬件除法操作。混洗单元主要用于
向量部件不同 PE 之间的数据交互,可按半字或字粒度进行混洗。
6) 标量访存单元(SM):主要实现标量数据访存。其中,SMC 实现标量访
存指令译码、地址计算、数据访问存及数据写回等访存流水站控制; 一级数据
Cache(L1D)实现标量数据的缓存和访问控制。支持 64KB Cache 与 SRAM 两种
存储器模式。SM 还缓存和管理来自其他 Matrix 2 单核上的作废(Flush)请求,实
现 L1D 按地址范围作废,以通过软件维护多核的数据一致性。
7) 向量访存单元(AM): AM 是片上阵列存储器,实现 16 路 SIMD 宽度的
向量数据访问,支持两条向量存储指令和 DMA 的并行访问操作,为 VPU 提供较
高的访存带宽。向量存储指令支持连续 16 个半字、字和双字访问,按字和双字粒
第 11 页
国防科学技术大学研究生院工程硕士学位论文
度对齐。
8) 仿真/调试部件(ET):ET 接收 PCIE(外部主机)或者 JTAG 的仿真请求,
对 DSP 芯片进行调试。ET 完成三大仿真调试功能:资源访问、流水控制和性能统
计。支持对芯片整个存储空间、体系结构寄存器的读写访问,以及对
memory-mapped 配置寄存器的访问;支持流水线控制,包括基本的停止、运行和
单步、软件断点、硬件断点、同步停止、同步运行和同步单步;支持事件统计,
包括执行周期、Cache 失效次数等表征程序性能的统计。
9) 直接存储器访问(DMA):DMA 是内核极其重要的数据传输通道,接收
SPU 配置的传输参数,启动对特定存储资源的访问,数据传输包含读操作过程和
写操作过程。DMA 访存的存储资源包括:核内 AM、核内 SM、本地全局 Cache
和挂接在片上互联网络的其他所有存储资源(远程全局 Cache 等)。DMA 支持一
维、二维传输及矩阵转置传输。
第 12 页
国防科学技术大学研究生院工程硕士学位论文
表 2.1 指令公共编码域说明
标识 位宽 意义 编码或值
000:无条件
001:寄存器 0
010:寄存器 1
011:寄存器 2
Req 3 条件寄存器编号
100:寄存器 3
101:寄存器 4
110:寄存器 5
111:寄存器 6
0:当条件寄存器为非 0 执行
Z 1 条件判断
1:当条件寄存器为 0 执行
01:80 位指令
L 2 长度位
非 01:40 位指令
V 1 标量/向量指令 0:标量指令 1:向量指令
本条指令是否与下 0:本条指令不与下一条指令并行
P 1
一条指令并行执行 1:本条指令与下一条指令并行
注:当{Req,Z}为 0001 时,表示无条件操作;为 0000 时,表示软件断点指令
2.2.2 执行包与取指包结构分析
图 2.3 执行包的基本格式
X-DSP 处理器中,每个执行包按 40 位对齐,包括标量指令与向量指令。一个
执行包如果同时包含 40 位、80 位指令,则 80 位指令集中在前,40 位指令在后,
这需要一定的编译器支持。此外,一个执行包至多包含 4 条 80 位指令,并且,一
个执行包大小不超过 480 bits。由于,X-DSP 包含 5 个标量部件和 6 个向量部件。
因此,一个执行包可包含 1 到 11 条指令,其长度为 5 到 60 个字节。执行包的构
成为 x*80+y*40 格式,其中 x,y 均大于 0 并且满足:1)x<=4;2)y<=11;3)x+y<=11;
4)x*80+y*40<=480。满足以上条件的可并行执行的最大执行包如图 2.4 所示,每
种情况下,允许在不超过执行包最大范围内减少指令并行条数。
第 13 页
国防科学技术大学研究生院工程硕士学位论文
39 3 2 1 0 39 3 2 1 0 39 3 2 1 0
XXXX_XXXX_X 0 1 1 XXXX_XXXX_X 0 1 1 XXXX_XXXX_X 0 1 1
XXXX_XXXX_X XXXX_XXXX_X XXXX_XXXX_X
XXXX_XXXX_X 0 1 1 XXXX_XXXX_X 0 1 1 XXXX_XXXX_X 0 1 1
2*80bit
XXXX_XXXX_X XXXX_XXXX_X 3*80bit XXXX_XXXX_X
XXXX_XXXX_X 0 1 1
4*80bit XXXX_XXXX_X 0 1 1 XXXX_XXXX_X 0 0 1
XXXX_XXXX_X XXXX_XXXX_X XXXX_XXXX_X 0 0 1
XXXX_XXXX_X 0 1 1 XXXX_XXXX_X 0 0 1 XXXX_XXXX_X 0 0 1
XXXX_XXXX_X XXXX_XXXX_X 0 0 1 XXXX_XXXX_X 0 0 1 8*40bit
XXXX_XXXX_X 0 0 1 XXXX_XXXX_X 0 0 1 6*40bit XXXX_XXXX_X 0 0 1
XXXX_XXXX_X 0 0 1 XXXX_XXXX_X 0 0 1 XXXX_XXXX_X 0 0 1
XXXX_XXXX_X 0 0 1
4*40bit XXXX_XXXX_X 0 0 1 XXXX_XXXX_X 0 0 1
XXXX_XXXX_X 0 0 0 XXXX_XXXX_X 0 0 0 XXXX_XXXX_X 0 0 0
L V P L V P L V P
a.4条80b指令,最多8条指令并行 b.3条80b指令,最多9条指令并行 c.2条80b指令,最多10条指令并行
39 3 2 1 0 39 3 2 1 0
XXXX_XXXX_X 0 1 1 XXXX_XXXX_X 0 0 1
XXXX_XXXX_X 1*80bit XXXX_XXXX_X 0 0 1
XXXX_XXXX_X 0 0 1 XXXX_XXXX_X 0 0 1
XXXX_XXXX_X 0 0 1 XXXX_XXXX_X 0 0 1
XXXX_XXXX_X 0 0 1 XXXX_XXXX_X 0 0 1
XXXX_XXXX_X 0 0 1 XXXX_XXXX_X 0 0 1 11*40bit
XXXX_XXXX_X 0 0 1 10*40bit XXXX_XXXX_X 0 0 1
XXXX_XXXX_X 0 0 1 XXXX_XXXX_X 0 0 1
XXXX_XXXX_X 0 0 1 XXXX_XXXX_X 0 0 1
XXXX_XXXX_X 0 0 1 XXXX_XXXX_X 0 0 1
XXXX_XXXX_X 0 0 1 XXXX_XXXX_X 0 0 1
XXXX_XXXX_X 0 0 0 XXXX_XXXX_X 0 0 0
L V P L V P
d.1条80b指令,最多11条指令并行 e.无80b指令,最多11条指令并行
图 2.4 允许最大并行的执行包类型
如上图所示,是一个最大执行包中指令的位置关系。而当取指包中包涵多个
执行包时,指令位置关系如图 2.5 所示,图中的符号含义如下:Inst0_80_low 表示
第一条 80 位指令的低 40 位,Inst0_80_high 表示第一条 80 位指令的高 40 位;Inst0_40
表示第一条 40 位指令,以此类推。下图列举了两个连续取指包中的指令位置关系,
用白色和灰色来区分相邻的两个执行包,并且,执行包 2 即为跨取指包边界的执
行包,其完整的派发机制将在第三章中作详细介绍。
40位 40位
Inst0_80_low Inst1_80_high
跨边
Inst0_80_high Inst2_80_low
界
Inst0_40 执行包0 Inst2_80_high 执行
Inst1_40 Inst0_40 包2
Inst2_40 Inst1_40
Inst0_40 Inst0_80_low
Inst1_40 执行包1 Inst0_80_high
Inst2_40 Inst1_80_high 执行
Inst0_80_low Inst1_80_low 包3
跨边界
Inst0_80_high Inst2_80_high
执行包2
Inst1_80_low Inst2_80_high
图 2.5 执行包在取指包中的位置关系
计算机中任何指令的处理都可以分为若干个子操作,每个子操作由不同的单
元来完成,对每个单元来说,每个周期都可进入一条新的指令,这样在同一时间
第 14 页
国防科学技术大学研究生院工程硕士学位论文
内,在不同单元中可处理多条指令,这种工作方式即称为“流水线”[42]。本节主要
结合指令流水线技术的基本概念与原理,分析 X-DSP 处理器的流水线特征。
X-DSP 最多可使 11 条指令同时通过流水线的每个节拍,从而大大提高了处理
器的吞吐量。其指令流水线可以分为取指,派发,译码,执行四个阶段,每个阶
段的功能不同,时序不同。如图 2.6 所示,取指阶段分程序地址产生(PG)、指
令等待(PW)、指令获取(IF)三站,派发阶段分 FD、DP 两站,译码阶段分 DC1、
DC2 两站,执行阶段根据功能单元的不同执行节拍从 E1 到 E7 站不等。
取指 派发 译码 执行
PG PW IF FD DP DC1 DC2 E1 E2 E3 E4 E5 E6 E7
IF
PG PW IF
顺序地址
自加0x40
IF_CompTag
IF_CompOffset IF_CompAddr IF_MissAddr
L1P_Miss L1P_FP
L1P_IFFPValid
L1P_IFFPRecover
Tag ==? Valid
D SET
Q
CLR Q
Tag ==?
FP
FP
L1P
图 2.7 取指部件三级流水线示意图
2)指令派发:分两站:FD、DP。在流水线中的功能:在 FD 站,指令派发接
收 IF 或者一级指令 Cache(L1P)的取指包,通过不同移位深度控制顺序取指包、
L1P 取指包、分支取指包和内部缓冲包的移位和拼接,生成 1024 位站内双缓冲(两
第 15 页
国防科学技术大学研究生院工程硕士学位论文
FD DP
Sel
分支取指包
站 480bit 指
内 令
L1P取指包 移 M 派 发
指 选
位 U 指
令 择
控 X 令
双 网
顺序取指包 制 4 位
缓 络
域
冲
分
内部缓冲包 析
图 2.8 指令派发部件两级流水线示意图
3)译码两站:本文主要讨论指令流控部件在译码两站的功能。针对指令流控,
DC1 除了部分配合仿真调试功能的 ET 读写操作以外,无其它逻辑行为,以优化时
序为主要目的;DC2 实现逻辑功能:在各个功能部件中,解析指令编码,为执行
站准备数据。
4)执行站接受从寄存器、累加器或者存储体内的数据,并按照译码的索引进
行运算。执行阶段根据指令的不同执行节也不同,其节拍数从 1~7 不等,如定点
流水线的执行阶段最多分成 3 拍(E1~E3),浮点流水线执行阶段最多分成 7 拍
(E1~E7)。
综上,如图 2.9 所示,是 X-DSP 的指令流水线时空图。当流水线中填充满了
连续的指令包时,流水线无间断的执行指令,各个功能单元都得到有效利用,流
水线效率最高,如图中 Pipeline Full 所标识。
Clock
N 1 2 3 4 5 6 7 8 9 …… 14 15 16 17 18 19 …
N+1 PG PW IF FD DP DC1 DC2 E1 E2 …… E7
… …
Pipeline Full
2.4 指令流水线部件设计的需求分析
1) 指令派发部件与取指部件的指令包数据带宽:512bit/clock;
2) 指令派发部件与 L1P 指令包数据带宽:512bit/clock;
3) 指令派发部件与处理 80 位指令的执行单元,发射指令的数据带宽:
78bit/clock;
4) 指令派发部件与处理 40 位指令的执行单元,发射指令的数据带宽:
38bit/clock;
5) 指令流控部件接受来自派发部件的分支指令,数据带宽为:38bit/clock。
2.5 本章小结
第 18 页
国防科学技术大学研究生院工程硕士学位论文
第三章 指令派发部件的设计实现与功能验证
3.1 指令派发部件概要分析
3.1.1 指令派发功能概述
P_information Cache_Shift 向量
模块 模块 Judge *** Unit
向量存储体 访存
2 单元
图 3.1 指令派发部件与内核其他部件的位置关系
指令派发部件的主要功能包括以下几点:
1) 判断是否有新的取指包到达 FD 站,如果有,则根据取指包来源(包括分
支取指包,顺序取指包,以及 L1P 取指包)对取指包进行相应的操作,并结合 FD
内部缓冲的情况,形成 FD 站内新的缓冲队列;如果没有,则根据当前站内缓冲的
指令,进行相应的移位操作,形成新的指令缓冲队列;
2) 对指令缓冲内的指令进行分析。根据指令派发所关注的有效编码域:并行
位和 Type 位,将指令派发到相应的功能单元;
3) 维护执行包 PC 值。流水线上的关键信号 DP_PC,随执行包指令一起站出
第 19 页
国防科学技术大学研究生院工程硕士学位论文
到译码站;
4) 在指令缺失时,派发部件暂停流水线以维护程序执行的一致性,即通过流
水线全局控制信号 DP_Stall,阻塞指令派发及各个功能部件的译码和执行;
5) 同时支持指令存储的大头模式和小头模式。指令以 40 位对其,在大头模
式下需要 40 位指令(80 位指令按两个 40 位指令处理)中所有字节逆序处理(0->4,
1->3,2->2,3->1,4->0),小头模式不变;
6) 支持 ET 对流水线的控制作用,如软件断点、硬件断点的设置、恢复与取
消等。
3.1.2 与派发相关的指令域分析
X-DSP 的指令格式,使用并行位、标/向量位、长度位、功能单元标识位辅助
指令派发部件进行指令的派发。汇编激励通过配套汇编器将其转化为二进制的指
令编码。在 2.2 小节,已经列出了 40/80 位指令编码格式及公共编码域含义,本小
节以便于指令派发的目的,对指令位域做了相关规整,如图 3.2 所示,并且分别列
出了 40/80 位指令的 Type 位信息汇总,如表 3.1、3.2 所示。
39 36 7 6 5 4 3 2 1 0
第 20 页
国防科学技术大学研究生院工程硕士学位论文
39 36 7 6 5 4 3 2 1 0
Reg Z xxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx Type P
xxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx
除此之外,均为 40 位指令类型。该段程序汇编成相应二进制指令码后,在执行包
中的存储形式如图 3.4 所示。
40bit 40bit
…… VMOVI.M1 1 1
SADD 0 1
执行包1 SADD.M1 0 1 VMOVI.M2 1 1
SADD.M2 0 1
VADD 1 0 VMOVI 1 1
VMOVI.M1 1 1 VLDW 1 1 执行包3
VLDW 1 1
VMOVI.M2 1 1 SLDW 0 1
执行包2 SADD 0 1
SMOVI 0 1 SADD.M1 0 1
VSUB 1 1 SSUB.M2 0 0
SLDW 0 0 ……
S/V P S/V P
图 3.4 执行包中指令的存储格式
3.2 指令派发部件总体设计
3.2.1 总体设计结构
图 3.5 指令派发总体设计结构
第 22 页
国防科学技术大学研究生院工程硕士学位论文
3.2.2 指令派发窗的形成机制
在指令派发部件中重要的一步即是指令派发窗的形成,而如何生成指令派发
窗取决于站内双缓冲,这就要求 DP 能够识别三种不同形式的外部取指包,在与之
相对应的偏移参数的控制下,完成移位操作,最终形成指令派发窗。
如图 3.6 所示,是指令派发窗口示意图,即位于指令双缓冲队列头部的 480 位
指令编码,也是一个周期内可以并行派发的最大执行包。
指令派发窗口(480bit)
Cache1(512bit) Cache0(512bit)
有效指令数
图 3.6 指令派发窗口示意图
下面,根据以下三种情况分别说明不同形式取指包的移位情况。
1) 顺序取指包完全移位
顺序取指包完全移位,是指到达派发部件的新的顺序取指包最大移位为 512
位的完全移位情况。如图 3.7 所示,是顺序取指包 IF_FP,偏移参数为:
CachePositionMinus = {1'b0, ~CachePosition_Last[6],CachePosition_Last[5:0]}的
移位情况,其中,CachePosition_Last 是 1024 位双缓冲队列中无效指令的字节数,
而 CachePositionMinus 参数控制 IF_FP 的最大偏移量为 512 位。
IF_FP(512bit)
指令派发窗口
Cache1 Cache0
CachePositionMinus
右移
IF_FP(512bit) 待派发指令
图 3.7 顺序取指包完全移位
第 23 页
国防科学技术大学研究生院工程硕士学位论文
2) 分支/旁路不完全移位
分支/旁路的不完全移位,是指到达指令派发部件的新取指包最大移位绝对小
于一个取指包大小(512 位)的不完全移位情况。
X-DSP 采用分支延迟槽技术,无论分支成功与否,分支指令后的 6 条指令都
会被执行(关于分支延迟槽会在第四章详细介绍)。当分支执行包到达指令派发
部件,并且当拍要派发的指令不是跨边界取指包时,其移位情况如图 3.8 所示,分
支取指包 BR_FP,偏移参数为分支目标地址。
分支目标地址
(目标指令在取指包内偏移地址)
BR_FP(512bit)
填补位
指令派发窗口
Cache1 Cache0
待派发指令
指令派发窗口
右移
Cache1 Cache0
待派发指令
图 3.8 分支取指包不完全移位
此外,L1P 旁路取指包也是最大移位不超过 512 位的不完全移位。当出现两条
连续的分支指令,并且第一个分支目标指令跨边界时,派发部件因不能接受第二
个分支目标而旁路请求 L1P,其移位过程如图 3.9 所示,L1P 取指包 L1P_FP,偏
移 参 数 为 : CachePosition_L1Pshift = {1'b0,CachePosition_IF[5:0]}; 其 中 ,
CachePosition_IF 是 1024 位 双 缓 冲 队 列 中 无 效 指 令 的 字 节 数 , 而
CachePosition_L1Pshift[6:0]参数控制 L1P_FP 的最大偏移量绝对小于 512 位。
分支目标地址1
(目标指令在取指包内偏移地址)
BR_FP1 (512bit)
填补位
指令派发窗口
Cache1 Cache0
待派发指令
指令派发窗口
右移
Cache1 Cache0
待派发不完全执行包
(A)
第 24 页
国防科学技术大学研究生院工程硕士学位论文
分支目标地址2
(目标指令在取指包内偏移地址)
BR_FP2 (512bit)
填补位
L1P_FP(512bit) 跨边界执行包
CachePosition_L1Pshift
BUF2
Cache1 Cache0
待派发完全执行包
右移
Cache1 Cache0
(B)
分支目标地址2
(目标指令在取指包内偏移地址)
BR_FP2 (512bit)
填补位
指令派发窗口
Cache1 Cache0
指令派发窗口
右移
Cache1 Cache0
待派发指令
(C)
图 3.9 旁路取指包不完全移位
3) 站内缓冲自移位
站内缓冲自移位,是指派发部件并没有接收到来自外部的新取指包,而是由
于站内缓冲中本身存在未派发完的指令,还可以在多个时钟周期内继续派发指令,
而不引起流水线暂停。该种移位的最大偏移量仍然不超过 512 位,如图 3.10 所示,
没有接收新的取指包,偏移参数为 ShiftNum(当拍派发的执行包字节数),其所
控制的最大偏移量绝对小于 512 位。
指令派发窗口
Cache1 Cache0
剩余指令 待派发指令
剩余指令
右移
Cache1
指令派发窗口
图 3.10 站内缓冲自移位
综上所述,无论是哪一种移位方式,在经过移位拼接后,都形成了指令派发
窗口。在指令派发窗中的 480 位指令,能否被成功发射取决于指令的并行信息与
选择网络。
第 25 页
国防科学技术大学研究生院工程硕士学位论文
3.2.3 候选指令的选择策略
候选指令,指不考虑指令的并行信息,通过各个功能部件从指令派发窗中选
择出本单元的有效指令。在选择过程中,如遇到编码错误,派发部件发送异常报
告。被成功选择出来的正确指令,也不一定会在本周期内被派发,还依赖于并行
信息的判断。
由于指令有 40/80 位不同长度,所以,指令的选择派发也必须同时考虑这两种
指令长度的指令。指令的选择在 DP 站内进行,其中,标/向量的 IEU 单元、MAC1/2/3
单元共七个单元中,由于同时支持 40 位指令和 80 位指令,所以,在这些部件中
的指令选择同时包含了 40 /80 位指令的选择。其他部件,即标/向量访存、分支部
件的指令选择,则只需要考虑 40 位指令的选择派发。
80 位指令的派发:如图 3.11 所示,80 位指令只存在于派发窗口的 0~7 的位置。
只要判断 0,2,4,6 位置的指令编码是否有自己部件的指令即可。
40 位指令的派发:40 位指令可能存在于派发窗口中的任何位置,所以,需要
对所有位置上的指令进行本部件编码的判断选择。这里,需要注意的是:1)40 位
指令选择开始前,需要通过对长度位的判断,屏蔽掉 80 位指令的编码;2)指令
标志位有些是固定全 0 的编码,需要在屏蔽时加以区分。
valid0 word0
valid1 word1
{80{valid[n]}} & word[n]
valid2 word2 Candidate_Inst80
valid3 word3
Valid80
hvalid0 hword0
hvalid1 hword1 Inst
hvalid2 hword2 Valid40
hvalid3 hword3
hvalid4 hword4 {40{hvalid[n]}} & hword[n]
hvalid5 hword5 Candidate_Inst40
hvalid6 hword6
hvalid7 hword7
hvalid8 hword8
hvalid9 hword9
hvalid10 hword10
hvalid11 hword11
图 3.11 候选指令的选择示意图
3.2.4 指令并行发射的结构分析
指令中的最低位为指令的并行位,表示该条指令是否和下一条指令在同一周
期内派发。如果该位为 0,表示不与下一条指令同时派发;如果为 1,表示与下一
条指令同时派发。对指令派发窗中的指令进行并行位和指令长度的分析,得到一
个针对指令派发窗中指令是否能当拍派发的掩码。如 inst80[4:0]中的每一位分别表
第 26 页
国防科学技术大学研究生院工程硕士学位论文
第 27 页
国防科学技术大学研究生院工程硕士学位论文
3.2.5 指令派发的最终判定
在 3.2.3 小节中指出候选指令不一定会被派发。这是因为,处于指令派发窗中
的指令都会作为候选指令,被选择网络进行选择,但是对于最终的派发,需确保
每个功能部件同拍只有一条该部件的指令,并且通过并行位判断后该指令属于当
拍需要被派发的指令。
如图 3.13 所示情况,是指令的选择网络示意图。在一个指令派发窗中有三个
执行包 EP1~EP3,如果第一个执行包 EP1 中的指令不包含有功能部件 1(假设为
SMAC1 单元指令)的指令,而 EP2 中 Inst0_40 是一条 SMAC1 指令,EP3 中 Inst0_80
也是一条 SMAC1 的指令,则通过指令选择,EP2 中处于 hword5(图 3.12)中的
40 位 SMAC1 指令会被选择出来,由于功能单元一拍只能选择一条本单元指令,
因此处于 word8/9 的 Inst0_80 SMAC1 不会被选择。但此时,这条选择出来的
Inst0_40 SMAC1 当拍不能被派发。
40bits
0 Inst0_80_low
1 Inst0_80_high
2 Inst0_40 EP1 无SMAC1
单元指令
3 Inst1_40
4 Inst2_40
5 Inst0_40 被选择出来
Unit1
6 Inst1_40 EP2 的SMAC1单
元40位指令
7 Inst2_40
8 Inst0_80_low
未被选择出
9 Inst0_80_high 的SMAC1单
EP3
10 Inst1_80_low 元80位指令
11 Inst1_80_high
图 3.13 指令的选择网络
除此之外,当指令派发窗中的执行包不完整,即执行包跨边界时,选择出来
的指令也不能当拍发射。下面,就指令最终是否能被派发,分两种情况来判定:
一是,当指令派发窗中至少有一个完整的 EP 等待派发;二是,指令派发窗中候选
指令所在的执行包跨边界。
完整 EP 待派发
在 3.2.4 中,通过对指令并行位的分析,得到一个包含指令并行信息的屏蔽表
Inst80[3:0]和 Inst40[11:0],用以屏蔽错误的候选指令。判断时对每个功能单元指令
的选择派发都做如下操作:一是,判断 80 位并行信息表中,80 位候选指令所处位
置的并行位是否为 1,若为 1,则将该 80 位候选指令进行派发;二是,判断 40 位
并行信息表中,40 位候选指令所处的位置的并行位是否为 1,若为 1,则将该 40
位候选指令进行派发;否则认为该功能部件本周期没有需要派发的指令。
第 28 页
国防科学技术大学研究生院工程硕士学位论文
}
0 Inst80[0]=1 0 0
1 Inst40[1]=0 1 1
无SMAC1
1 Inst80[1]=0 2 Inst40[2]=1 2 1
单元指令
3 Inst40[3]=1 3 1
Inst80[2]=0 4 Inst40[4]=1 4 1
=
2
+ 5 Inst40[5]=0 5 0
3 Inst80[3]=0 6 Inst40[6]=0 6 0
7 Inst40[7]=0 7 0
8 Inst40[8]=0 8 0
9 Inst40[9]=0 9 0
10 Inst40[10]=0 10 0
11 Inst40[11]=0 11 0
图 3.14 指令并行派发屏蔽表的生成
执行包跨边界
由于一个取指包大小为 512bit,而指令是以 80/40bit 为单位,所以必然会出现
取指包结束时某条指令无法以 40 位对齐情况,也就是说指令派发窗中待派发的执
行包跨边界,即执行包不完整,此时,被选择出来的候选指令不能在当拍派发,
而要等到下一个取指包到达,完成缓冲队列移位拼接(见 3.2.2 所述)之后,才能
派发该执行包。因此,在这种情况下,指令的最终派发,除了指令派发窗的候选
指令选择,还决定于并行执行指令包的边界(Boundry)信息表。如图 3.15 所示,
指令派发窗的剩余指令不完整,如图中灰色部分为剩余指令。
39 31 23 15 7 0 屏蔽表
boundry0 0 0
boundry1 1 0
boundry2 2 0
boundry3 3 1
boundry4 4 0
boundry5 5 0
boundry6 6 0
boundry7 7 0
boundry8 8 0
boundry9 9 0
boundry10 10 0
boundry11 11 0
40bits
图 3.15 执行包边界屏蔽表的生成
如上图所示,boundry[3]=1,说明指令边界在派发窗的第三个位置。此时,当
拍选择出来的指令均不可派发,触发全局流水线暂停信号 DP_Stall。
综上所述,指令在被派发时,首先形成指令派发窗口,候选指令通过选择网
第 29 页
国防科学技术大学研究生院工程硕士学位论文
络,再经过指令是否能够派发的最终判定,才能决定本周期执行包是否可以派发
到各功能部件的译码站。至此,指令派发部件完成了一个时钟周期的派发任务。
3.3 指令派发部件对仿真调试的支持
3.3.1 支持 ET 读访问
ET 部件[44]是芯片调试仿真的入口,其主要功能与工作原理将会在第五章详细
介绍,本小节只讨论指令派发部件对 ET 的硬件支持。
指令派发(DP)是指令流水线上的重要组成,而仿真调试部件(ET)工作时,
控制整个流水线的状态并允许对流水线各站进行读写访问。如表 3.4 所示,是
X-DSP 指令派发部件与 ET 的端口列表。
表 3.4 DP 与 ET 的接口列表
接口信号 方向 位宽(bit) 意义
ET_DataCPU Input 64’b ET 对派发站的写数据
ET_WriteDP1 Input 1’b ET 写派发一站有效信号
ET_ AddrDP1 Input 4’b ET 写派发一站的地址
ET_WriteDP2 Input 1’b ET 写派发二站有效信号
ET_WriteDC1 Input 1’b ET 写译码一站有效信号
PC1_ET Output 38’b DP 给 ET 的派发一站首地址
CachePosition_ET Output 8’b DP 给 ET 站内缓冲无效字节数
PC2_ET Output 38’b DP 给 ET 的派发二站站首地址
ET 部件对于流水线的读,主要体现在两个方面:一是访问内核体系结构寄存
器;二是获取流水线各站首地址,以用来支持上层软件的仿真调试功能。而指令
派发支持 ET 读操作,主要体现在 ET 通过获取指令在流水线上的 PC 值(FD 站
PC1_ET,DP 站 PC2_ET)及其无效字节数 CachePosition_ET,如表 3.4 中 PC1_ET、
PC2_ET,信号直连,直接输出给 ET,通信协议比较简单。下面,我们主要介绍一
下 DP 部件在支持 ET 写操作方面的重要作用。
3.3.2 支持 ET 写访问
指令派发部件在流水线上占用两拍时序,ET 对指令派发的写操作,分以下两
站分别讨论:
1) ET 写派发第一站(FD)
ET 对 FD 的写操作主要体现在对软件断点的设置与取消。表 2.1,指出了 ET
的断点标识位 4’b{Reg,Z},ET 在写软件断点指令时,会将该断点标志位写入 FD
站的站内双缓冲,由于 ET 与 DP 的数据带宽是 64 位(表 3.4 中 ET_DataCPU),
第 30 页
国防科学技术大学研究生院工程硕士学位论文
左移ET_ AddrDP1
000 ·
···
·· 000 ET_DateCPU 000 ·
···
·· 000
(A)ET_DataCPU自移位
1111 ·
···
·· 1111 64'b0
左移ET_ AddrDP1
1111 ·
···
·· 1111 64'b0 1111 ·
···
·· 1111
}位与
cache1 cache0
(B)缓冲队列掩码的生成
000 ·
···
·· 000 ET_DateCPU 000 ·
···
·· 000
}位或
cache1 64'b0 cache0
(C)ET写操作站内缓冲的生成
图 3.16 ET 写派发一站站内缓冲
经过上图所示的移位过程,就可以生成 DP 内部支持 ET 软件断点指令的双缓
冲队列,从而实现软件断点在 DP 站内的设置与取消。
2) ET 写派发第二站(DP)
ET 对 DP 站的写操作同样体现在对软件断点指令的设置和取消,与 FD 站不
同的是,该软件断点指令只能位于执行包第一条指令。因此,无论当前要派发的
指令是 40 位还是 80 位,并行度如何,只需要将 ET 的 ET_DateCPU[39:36] (断
点标志位)写入到 DP 站中指令派发窗的[39:36]位置,而不需考虑指令的其它位域。
如图 3.17 所示。
第 31 页
国防科学技术大学研究生院工程硕士学位论文
ET_DateCPU[39:36]
ET_WriteDP2
39
36
… … … …
EP
指令派发窗口(480bit)
图 3.17 ET 写派发二战指令派发窗
3.3.3 软件断点的检测机制
指令派发部件除了支持 ET 的读写访问外,在派发第二站完成对软件断点指令
检测的功能:对位于执行包的第一条指令,检测该指令的高四位是否为全 0。
断点指令的检测,与写操作在派发二站的行为相似,断点标志位必位于执行
包第一条指令的高[39:36]。如图 3.18 所示,只需检测该四位编码,如果全为 0,
即触发软件断点,在时钟上升沿将软件断点有效信号随该执行包一起锁存输出。
39 36 ~|word0[39:36] & inst80_T[0]
或 软件断点
停信号
EP
~|hword0[39:36] & inst40_T[0]
… …
图 3.18 软件断点的检测
3.4 功能验证与覆盖率分析
3.4.1 功能验证点
针对 X-DSP 处理器的指令派发部件的验证,离不开控制信号对流水线的作用,
在模块级的验证极为有限,且无法高效的覆盖众多控制信号之间的影响,所以,
我们通常采用基于模拟的系统级功能验证。
X-DSP 所采用的系统级验证环境,主要是基于 Cadence 公司 Linux 平台的
NC_Sim 模拟器,设计者只要编写适当的汇编测试激励,再通过汇编工具转化为二
进制激励码,读入仿真环境,即可实现功能验证。
在实现了指令派发部件的各功能之后,本小节主要是在模拟环境中,对其逻
第 32 页
国防科学技术大学研究生院工程硕士学位论文
3.4.2 验证结果与分析
第 34 页
国防科学技术大学研究生院工程硕士学位论文
表 3.7 软件断点设置的验证激励
测试程序反汇编代码:
96: 1000000040 smovi24.L 0x1,R0
9b: 104001c03c smov.M1 R0,R1
a0: 108005c05c smov.M2 R1,R2 //硬件断点指令
a5: 10c0000042 vmovi24.L 0x1,VR3
aa: 11000dc03e vmov.M1 VR3,VR4
af: 114011c05e vmov.M2 VR4,VR5
b4: 118015c07e vmov.M3 VR5,VR6 //软件断点指令
b9: 106001669c sstw R1,*AR8++[1]
be: 1044016a9e vstw VR1,*AR1++[1]
调用调试命令 task:
ET_Write(64'h30_0020_5020,64'h1); //HBPER
ET_Write(64'h30_0020_5000,64'h20_0000_00a0); //HWBP
ET_Pipe(run);
ET_Pipe(halt);
ET_Read(64'h30_0020_9040); //获取 FD 站首地址
ET_Read(64'h30_0020_9041); //获取缓冲无效字节数
ET_Write(64'h30_0020_9001,64'h9e106001669c0180);//DP 栈软件断点
ET_Pipe(run);
假 设 断 点 指 令 在 派 发 一 站 , 首 先 我 们 读 取 了 FD 站 首 地 址
(ET_Read(64'h30_0020_9040))与无效字节数(ET_Read(64'h30_0020_9041))。
如图 3.20,从波形中可以看出,此时,FD 站的首地址是’h20_0000_000af,无效字
节数是’h6f,这样就可以确定断点指令在缓冲中的位置 DPIR1(第二个 64 位指令
寄存器),在 ET 中的映射地址位 64'h30_0020_9001,然后改写指令的高四位
( ET_Write(64'h30_0020_9001,64'h9e106001669c0180) ) , 就 在 DP_PC=
38’h20_0000_00b4 的指令设置软件断点,这样一下次程序运行(ET_Pipe(run))时,
停在 DP_PC =38’h20_0000_00b4 的断点位置。
图 3.20 软件断点设置的验证波形
此外,还需注意的是,在该验证环境中,因为 ET 部件的特殊性,为了让程序
停下来,提供设置软件断点的机会,我们让程序首先触发了硬件断点而暂停流水
线,然后在设置软件断点。
第 35 页
国防科学技术大学研究生院工程硕士学位论文
像这样, ET 相关功能的验证过程极为复杂,并且,需要人为计算各个读写地
址与设置软件断点的时机。在第五章中,我们介绍了 FPGA 的验证方法与基于 PLI
接口的新型验证方法,后者可以有效地解决对 ET 验证不便的问题。
3.4.3 覆盖率分析
图 3.21 指令派发部件覆盖率
由上图可以看出,总体模块 Dispatch 的 block 与 expression 覆盖率均已达到
100%、toggle 覆盖率达到 83%。通常情况下,对 toggle 的覆盖率不做严格的要求,
因为某些多位信号的某几位本身就不会频繁翻转,例如 DP_PC=38’h20_00000180。
对于图 3.21 的覆盖率分析如下:
1) 在 DP 模块中,对于同一部件的不同长度指令在执行包中的位置分布,因
手工调整指令位置的难度而没用充分遍历。这部分遍历验证的工作量较大,并且,
受限于汇编器的汇编算法,如某些指令在汇编时会发生顺序改变,不能对这些指
令进行灵活的位置调整;
2) 在 IF_DP 模块中,部分语句本身具有一定相关性,使得某些表达式满足的
时候,总会出现部分表达式无法覆盖的情况;
3) 此外,由于代码风格,也存在一定覆盖率漏洞。例如: if…else…语句不
完整,因为在 always 块的起始位置为变量设置了初值,不需要再进行 else 赋值,
因此而无法覆盖到 else 语句[45]。
3.5 逻辑综合
逻辑综合,是为了使处理器满足用户需求,在特定的时序约束下,将 RTL 级
硬件描述转化为门级网表的过程。
第 36 页
国防科学技术大学研究生院工程硕士学位论文
综合过程并非一次综合结果就可满足时序需求,往往需要设计者根据综合报告
查看时序违反,针对各种指标进行代码优化、约束调整,然后重新综合,不断重
复迭代这一过称,直到最终消除时序违反,达到设计目标指数。
X-DSP 采用的综合环境,主要是基于目前 ASIC 设计领域主流的 EDA 厂商
Synopsys 的 Design Compiler(DC)工具,在线负载模型下进行综合。40nm 工艺
下,满足 1GHz 的主频。最终得到的综合结果如表 3.8 所示:
表 3.8 指令派发部件综合结果
逻辑门数(个) 面积(um2) 静态功耗(nW) 动态功耗(nW)
Dispatch 71208 128991 2316319.601 3254835.735
IF_DP 模块 58342 104842 1904200.193 2900205.257
DP 模块 12866 24149 412119.408 354630.478
本文实现的指令派发部件,支持 40/80 位标/向量混合指令集,支持跨边界派发、
L1P 旁路取指,因此,能有效的压缩代码体积,减少指令流水线的空转周期,同时
也降低了指令缺失所引起的开销。
3.6 本章小结
第 37 页
国防科学技术大学研究生院工程硕士学位论文
第四章 指令流控部件的设计实现与功能验证
X-DSP 中指令流控部件主要任务是联合取指部件(IF)、指令派发部件(DP)、
中断(Int)/异常(Exp)部件一起实现对指令流的控制作用。流控部件属于执行
单元,除 SNOP/SWAIT 不固定执行周期指令外,其余指令均为单周期指令,在流
水线中位于译码、执行阶段。在译码一站,除了支持 ET 的读写访问,主要以优化
时序为目的,核心逻辑主要在译码二站和执行站完成。指令流控部件结构简单、
指令数目不多,但却对指令流的控制发挥着重要作用。
4.1 指令流控部件概要分析
4.1.1 指令流控功能概述
程序在执行过程中,正常情况下,指令顺序进入流水线,在取指部件的地址
生成(PG)站产生取指地址,然后依次线性增加,产生连续的取指请求。但是,
当程序中出现非顺序的程序结构时,如跳转、中断、异常等,线性的指令流会被
打断,优先跳转或插入一段被指定的程序块[46]。
在 X-DSP 中,指令流控单元响应非顺序的程序块,通常简称为分支部件(BR),
核心逻辑功能包含两站流水线,一站译码(DC 站)和一站执行(E1 站)。DC 站
主要负责译码指令派发部件发送到 BR 的分支指令;E1 站根据得到的指令类型来
选择源操作数(可能是立即数或者寄存器类型),然后完成相应指令的执行。分
支部件位于 X-DSP 单核标量控制(Scalar Control,缩写 SC)中,其所处位置及与
SC 中其它各部件的数据交互如图 4.1 所示。
标 量 控 制
(Scalar Control)
地址产生
取 流控单元 SPE
指令等待
指 (BR)
指令获取 标量寄存器文件
IF_Fush (SRF)
512b 译 执
DP_Stall
中断处理
指令派发(DP) 38b 码 行
BR_Inst
DP_Stall SM_Bsy 异常处理
SM_Bsy
标量存储(SM)
BR_SNOP
图 4.1 指令流控单元在内核中的位置
第 38 页
国防科学技术大学研究生院工程硕士学位论文
指令流控部件的主要功能包括以下几点:
1) 译码站主要是对指令域进行分析,将识别的指令类型和立即数发送到功能
单元,将得到的源操作数地址发往寄存器文件。
2) 处理单周期跳转指令,生成分支目标地址 BR_Addr,在分支有效时,取指
部件将该地址插入地址缓冲中,然后向 L1P 优先请求该地址所在的 512 位指令包。
3) 处理 SNOP、SWAIT 非固定周期指令,生成 BR_SNOP 流水线阻塞信号,
维护 SNOP 计数器。
4) 处理单周期中断指令和中断返回指令,发送中断号或中断返回地址到中断
处理单元。
5) 分支部件对于异常的处理,分为两部分:一是在指令译码时,检测到无效
指令编码,则触发异常;二是单周期异常指令和异常返回指令,发送异常号或异
常返回地址到异常处理单元。
此外,还需要注意的是,在 2.3 小节分析的 X-DSP 的指令流水线中,译码站
分为 DC1 站和 DC2 站,而本小节的指令流控部件的设计中译码只占用一站流水线,
这是因为:为了优化时序,译码加站(DC1),除了在控制信号控制下锁存,主要
的逻辑设计都在 DC2 实现。仿真调试部件对译码两站的读写操作会在 4.3 小节中
详细分析。
4.1.2 分支指令编码
图 4.2 BR 部件寄存器/短立即数类型指令格式
39 36 35 6 4 3 2 1 0
Reg Z Imm29 OP 1 1 0 V P
图 4.3 BR 部件长立即数类型指令格式
针对上述 BR 部件的指令格式,结合表 2.1 中对指令公共编码域的归纳和说明。
分支指令的编码设计如表 4.1 所示。
第 39 页
国防科学技术大学研究生院工程硕士学位论文
表 4.1 BR 部件 40 位指令操作码汇总
指令名称 助记符 操作数 数据类型 操作码
空转 SNOP 指令 SNOP Src1 短立即数 001_0000_000
中断指令 SINT Src1 短立即数 010_0000_000
空转 SWAIT 指令 SWAIT / / 011_0000_000
中断返回指令 IRET / / 000_0000_000
异常指令 SEP Src1 短立即数 000_1000_000
异常返回指令 ERET / / 001_1000_000
空转 SNOP 指令 SNOP Src1 寄存器类型 100_0000_000
跳转指令 SBR Src1 寄存器类型 101_0000_000
跳转指令 BRVZ Src1 寄存器类型 110_0000_000
跳转指令 BRVNZ Src1 寄存器类型 111_0000_000
跳转指令 SBR Imm29 长立即数 00
跳转指令 BRVZ Imm29 长立即数 01
跳转指令 BRVNZ Imm29 长立即数 10
分支部件的指令数量较少,但在控制指令流方面起到了十分关键的作用,主
要表现在:跳转指令对程序流的控制作用;空转指令对流水线的阻塞作用;中断/
异常指令,对程序中服务子程序的响应作用。在表 4.2 中,列举了一段包含分支指
令的汇编代码,以此简要说明其作用。
表 4.2 分支指令汇编代码示例
汇编代码 1 指令长度 汇编代码 2 指令长度
SADD 1,R5,R5 40bit SBR Loop1 40bit
| SADD.M1 1,R6,R6 40bit VMOVI 1,VR0 80bit
| VSUB VR5,VR6,VR7 40bit VMOV.M1 VR0,VR1 40bit
| SBR Loop0 40bit VMOV.M2 VR0,VR2 40bit
SNOP 6 40bit VLDW *+AR1[0],VR3 40bit
Loop0: SNOP 1 40bit
SMOVI 1, R0 80bit SLDW *+AR8[0],R4 40bit
| VMOVI.M1 1,VR6 80bit VLDW *+AR1[0],VR4 40bit
| STW R1,*AR8++ 40bit Loop1:
| VMOVI.M2 1,VR5 80bit SADD 1,R5,R5 40bit
注:“|”表示本条指令与上一条指令并行
在表 4.2 的汇编代码 1 中,跳转指令 SBR 后紧跟六拍空转指令,该指令位于
SBR 的分支延迟槽中,可以被顺利执行,SNOP 6 恰好填充六拍流水线,随后跳
转至目标地址 Loop0,完成分支功能。汇编代码 2 与之类似,所不同的是,跳转指
令 SBR 后第五拍是一条空转指令 SNOP,其作用只是填充一拍流水线;第七拍还存
在一条向量访存指令 VLDW。其执行过程是:当前六条指令被顺利执行(其中第五
拍插入一个气泡),然后跳转到分支目标地址 Loop1,而 VLDW *+AR1[0],VR4 指令
第 40 页
国防科学技术大学研究生院工程硕士学位论文
4.2 指令流控部件总体设计
4.2.1 总体设计结构
除去用来走线、以优化时序的译码加站外,X-DSP 处理器的指令流控单元总
体上划分为译码站和执行站。前者主要负责译码到达分支部件的有效指令,分析
指令位域;后者则根据指令类型 BR_Type、指令有效 BR_valid 以及寄存器文件返
回的操作数来控制指令完成其功能,其中,除了 SNOP/SWAIT 不固定执行周期,
其余均为单周期指令。
如图 4.4 所示,是指令流控单元总体结构图。其数据流过程,大致可分为两路:
一路是立即数类型操作数,经译码将指令类型 BR_Type、指令有效 BR_valid 及立
即数站入执行站,分一拍或多拍完成指令;一路是寄存器类型操作数,译码后通
过读寄存器有效 BR_RdRF、寄存器地址 BR_RdAddr 访问标量寄存器文件(SRF),
下一拍接收操作数,完成一拍或多拍指令。
控制信号:
DC E1
DP_Stall/ET_Stall
/AM_Bsy/SM_Bsy
条件判断域
{Reg,Z}
中断选择
中断及返回指令
指令类型域
BRInst[39:2] BR_Type
译 异常及返回指令
异常选择
码 译码站有效
DC_BRValid 空转SNOP信号
BRValid 模 空转NOP/SWAIT指令
块 访 操
分支目标地址
问 作 跳转BR指令
寄 数
存 返
器 回
寄存器文件
图 4.4 指令流控部件总体设计结构
指令流控单元,指令数量少、逻辑功能简单,其重点在于配合取指、指令派
发、中断异常部件以实现对指令流的控制作用。
DSP 应用不断追求更高性能、更低功耗的应用场合,为了配合其较高的硬件
实时要求,通常在 VLIW 体系结构处理器中不采用动态分支预测技术[47],而是采
第 41 页
国防科学技术大学研究生院工程硕士学位论文
用分支延迟槽技术处理程序中出现的分支,以便其可以更好的提高处理器速度[48]。
它通过编译器的参与,可以降低硬件设计的复杂度,提高分支处理效率。
X-DSP 处理器也采用了分支延迟槽技术,每条分支指令后面会固定执行 6 条
不影响分支结构的其它指令,然后再执行分支目标。这样,就产生了一种特殊情
况:如果分支目标指令已到达指令派发部件,同时分支延迟槽内当拍仍然有需要
被派发的跨边界执行包,并且该执行包所在的第二个取指包缺失,就会引起派发
部件直接请求一级指令 Cache(L1P),即 3.2.2 小节中的旁路取指。如图 4.5 所示,
为 X-DSP 分支延迟槽示意图。
PG PW IF FD DP DC1 DC2 E1
n+7 SADD
第 42 页
国防科学技术大学研究生院工程硕士学位论文
因此,在编写汇编验证激励的时,可以充分利用这六拍的分支延迟,在分支
延迟槽中插入六条有效指令,提高分支延迟槽利用率,同时也提升程序的执行效
率。此外,上层程序也可以依赖编译器来充分利用分支延迟槽。
4.3 对仿真调试的支持
号,连续锁存两拍,触发 ET_Stall,从而暂停全局流水线。
4.4 功能验证与覆盖率分析
4.4.1 功能验证点
针对指令流控单元的逻辑功能,本小节在系统级对其进行功能验证。验证环
境、方法与 3.4.1 小节的指令派发部件验证环境一致(基于 Linux 平台 NC_Sim 模
拟器)。
如表 4.4 所示,列举了指令流空部件系统级验证的一级功能点、二级功能点。
表 4.4 指令流控部件功能验证点
序号 一级功能点描述 二级功能点描述
1 基本的分支部件指令 数据类型为短立即数类型
数据类型为长立即数类型
数据类型为寄存器类型
2 空转 NOP 指令 单周期 NOP 指令位于取指包不同位置
多周期 NOP 指令位于取指包不同位置
NOP 指令对其他并行指令的影响
3 被 中 断 的 空 转 被分支到达信号打断
NOP/WAIT 指令 被清空流水线信号打断
4 分支到 NOP 指令 分支目标指令是单周期无并行 NOP 指令
分支目标指令是多周期无并行 NOP 指令
分支目标指令是包含单周期 NOP 指令的并行执行包
分支目标指令是包含多周期 NOP 指令的并行执行包
5 分支循环 分支目标地址包含分支指令
6 分支延迟槽 分支延迟槽中分别填充 1/2/3/4/5/6 条分支指令
分支目标地址在该分支指令的延迟槽中,且分支目标
地址中不包含分支指令
分支目标地址在该分支指令的延迟槽中,且分支目标
地址中包含分支指令
分支延迟槽中单/多周期 NOP 指令或 WAIT 指令
7 异常报告 指令编码错误造成的异常
8 条件执行 指令的条件执行
9 各控制信号对分支部 IF_Flush、 IH_Flush 对指令派发的控制作用
件的影响 AM_Bsy、SM_Bsy 对指令派发的控制作用
SNOP 指令对指令派发的控制作用
10 与 ET 相关 流控单元三站内对软件断点的相关操作
第 44 页
国防科学技术大学研究生院工程硕士学位论文
4.4.2 验证结果与分析
第 45 页
国防科学技术大学研究生院工程硕士学位论文
调用调试命令 task:
ET_Read(64'h30_0020_9040); //获取 FD 站首地址
ET_Read(64'h30_0020_9041); //获取缓冲无效字节数
ET_Write(64'h30_0020_9001,64'h9e106001669c0180); //软件断点指令。
ET_Pipe(run);
ET_Pipe(halt);
ET_Write(64'h30_0020_d000,64'h01669c118015c07e); //断点指令恢复
ET_Pipe(run);
对于断点指令的恢复,首先设置断点指令在 DP_PC=38’h20_0000_00b4,然后
运行程序(ET_Pipe(run)),此处,还要执行一个暂停命令(ET_Pipe(halt)),是
因为 ET 对于流水线的操作都是在流水线暂停的状态下完成的。当检测到断点指令
之 后 , 在 DC2 站 进 行 对 改 写 为 断 点 指 令 的 高 四 位 进 行 写 回
(ET_Write(64'h30_0020_d000,64'h01669c118015c07e)),这样,在下一个运行命
令(ET_Pipe(run))之后,程序就会正常的运行下去,并且流入执行 1 站的指令是
源程序中的正确指令。其波形如图 4.8 所示。
图 4.8 软件断点恢复的验证波形
此外,与 3.4 小节软件断点的设置相同,在基于模拟的验证环境对 ET 的功能
验证极为不便,会在下一章提出更优的调试/验证环境来取代该方法。
4.4.3 覆盖率分析
图 4.9 指令流控部件的覆盖率
由上图可以看出,总体模块 BR 只是流控部件 BR_DC、BR_E1 的实例化顶层
第 46 页
国防科学技术大学研究生院工程硕士学位论文
4.5 逻辑综合
4.6 本章小结
第 47 页
国防科学技术大学研究生院工程硕士学位论文
第五章 软硬件协同验证模型的设计与实现
由第三章、第四章对指令派发/流控部件相关流水线调试功能的验证过程可以
看出,在系统级采用基于 NC_Sim 模拟的方法对流水线调试功能无法展开全面验
证。传统对流水线的调试一般采用 FPGA 原型验证[49],但该方法本身存在错误定
位困难、源代码修改不便、验证迭代周期长的缺点。此外,由于 X-DSP 处理器复
杂的芯片结构、庞大的硬件代码,通常的 FPGA 已经无法承载。因此,对于 X-DSP
指令流水线系统级的验证/调试,本文采用新型基于 PLI 接口技术的软硬件协同验
证方法。本章主要基于 PLI10.2 协议[50],采用 PLI 接口实现 C 语言与 Verilog 的嵌
套调用,通过数据共享机制实现不同进程间的通信,从而实现调试软件与硬件仿
真环境之间的数据交互,最终实现对 X-DSP 指令流水线的调试和 RTL 级代码的维
护。
5.1 传统系统级验证模型分析
PCIE DNAC 核外
存储
SPI GC DDR
DSP_CORE
P 共 D
J 存
C 享 M 映射
TA 储 AM SM
I 调 A 寄存器
G 器
E 试
通
通 通 仿真
路 寄
路 道 调试 存 SRF CRF VRF MRF
部件 器
(ET)
JTAG 外设
配置
配置
寄存器
总线
图 5.1 ET 资源访问通路
第 48 页
国防科学技术大学研究生院工程硕士学位论文
从传统的验证方法学来看[53],基于模拟的验证方法仍然处于主流地位。如图
5.2 所示,是传统 FPGA 原型验证[55]原理图,FPGA 测试子板通过 JTAG 仿真器与
调试主机相连。调试芯片时,主机中调试软件调用底层软件驱动函数,向 JTAG
第 49 页
国防科学技术大学研究生院工程硕士学位论文
调 J FPGA
U T
试 调 外
底 S
软 A 试 部
层 B SDRAM
件 G 逻 接
函 接 接 辑 口
数 口 口
图 5.2 FPGA 原型验证原理图
传统的 FPGA 原型验证,其优点在于可重复编程、能挂接真实的外围 I/O 逻
辑、运行速度快等[56]。尽管如此,FPGA 在系统级的验证仍然存在一些制约,这也
是其不再适用于 X-DSP 系统级流水线调试验证的主要因素,体现在以下两个方面:
其一, X-DSP 复杂的 12 核全芯片结构、庞大的代码量导致通常使用的 FPGA 已
经无法承载;其二,FPGA 繁琐的代码回归、程序加载以及不可见性都是制约其发
展的主要因素,越来越多的设计者希望看到调试界面与被调试者的交互过程,更
方便、直观的定位错误。因此,为了攻克验证 X-DSP 指令流水线调试功能的难关,
本文提出一种新型基于 PLI 技术的软硬件协同验证方案。
5.2 新型系统级验证模型的设计基础
5.2.1 新型系统级验证模型的需求分析
第 50 页
国防科学技术大学研究生院工程硕士学位论文
5.2.2 新型系统级验证模型的结构原理
C 集
语 成 .
言 开
底 发
层 .
环
驱
动 境
NC_Sim模拟器
C
共享数据栈 语
言
启
PLI数据通路 动
文
件
第 51 页
国防科学技术大学研究生院工程硕士学位论文
Verilog 在硬件设计领域中的广泛应用[45],更好的体现了硬件描述语言所具有
的时序概念,它不仅可以描述硬件电路的功能,还可以描述其时序特性。C 语言没
有时序的概念,但利用 C 语言简洁、灵活的特点[57],可以更方便的实现在 Verilog
中较为复杂的控制逻辑。
为了结合 Verilog 语言的硬件描述能力与 C 语言的灵活性,一种便于二者交互
的接口协议——PLI 应运而生,该接口协议由各大 EDA 工具厂商支持[58]。
使用硬件语言描述的模块,在不同的 Verilog 仿真器内部有其不同的表示形式。
而 PLI 技术可以提供设计者一个抽象的层次,这样,设计者本身不需要过多的理
解仿真器的内部数据结构,允许通过一个对所有仿真器都统一的接口来访问内部
数据[59]。因此,采用 PLI 接口编写的应用程序独立于具体的仿真器,应用程序也
具有较高的可移植性。
此外,Verilog PLI 是通过 C 函数库实现的,因此它继承了 C 语言的优点:可
以动态载入寄存器,灵活地处理数组和存储器,过程控制能力强;可以灵活地处
理数据流和控制流,便于高层建模[60]。
本文提出的系统级指令流水线验证/调试模型中,即采用 PLI 接口来实现,不
同进程间的通信,从而将仿真调试界面与 NC_Sim 模拟器连接起来,这样,在模
拟器中仿真的 RTL 级硬件描述就可以直接接收来自用户界面发送的调试命令,再
将数据直接反映在界面上,供程序员查看。
5.3 软硬件协同验证的总体设计
5.3.1 总体设计结构
集 成 开 发 环 境
(I D E) PLI数据通道 仿真平台
调试驱动函数 共享数据栈
ET串行输入
输入队列
调 试 读写 (INPUTQUEUE) 调试仿 FT-2000B
真部件
RTL硬件描述
输出队列 (ET)
运 停 单 断 寄 存 (OUTPUTQUEUE)
行 止 步 点 存 储 ET串行输出
器 器
图 5.4 软硬件协同验证总体设计结构图
其中,集成开发环境(IDE)主要为处理器提供以下驱动函数与功能支持。
驱动函数
1) 初始化:long YHFT_INIT(long nDSP);
初始化 IDE 与仿真器相交互的共享数据栈,并完成芯片的复位操作。
2) 复位:long YHFT_ RESET (long nDSP);
完成受控芯片的复位操作。
3) 运行:long YHFT_RUN(long nDSP);
完成芯片从调试状态到程序正常执行状态的转化。
4) 暂停:long YHFT_STOP(long nDSP);
实现暂停程序执行的功能,使芯片进入调试状态。
5) 单步:long YHFT_STEP(long nDSP);
实现内核流水线的单步功能。
6) 强制运行:long YHFT_RUN_F(long nDSP);
实现在芯片非正常死锁情况下,强制运行流水线的功能。
7) 状态检测:long YHFT_STAT(long nDSP);
获取内核流水线的当前状态。
8) 退出:long YHFT_QUIT(long nDSP);
关闭 IDE 与模拟器的通信链路。
9) 设置软件断点:long YHFT_SETSWBP(long nDSP,long ExAddr);
实现软件断点的设置功能。ExAddr,表示需要设置断点的执行包首地址。
10) 取消软件断点:long YHFT_CLEARSWBP(long nDSP,long ExAddr);
实现软件断点的取消功能。ExAddr,表示需要取消断点的执行包首地址。
11) 读寄存器:
long YHFT_READREG(long nDSP,long RegAddr);
读取内核体系结构寄存器数据。RegAddr,表示被访问寄存器的地址。
第 53 页
国防科学技术大学研究生院工程硕士学位论文
12) 写寄存器:
long YHFT_WRITEREG(long nDSP,long RegAddr,long pRegValue);
改写内核体系结构寄存器数据。RegAddr,表示被访问寄存器的地址;
pRegValue,表示需要写入目标寄存器的数据。
13) 读内存:
long YHFT_READMEM(long nDSP,long ReadAddr,long ReadLen,
long *pReadBuf);
读取内核指定首地址与空间长度的内存区的一组数据。ReadAddr,表示被访
问存储空间的起始地址;ReadLen,表示自起始地址开始的连续读存储区域的长度;
*pReadBuf,表示读内存空间数据组的缓存指针。
14) 写内存:
long YHFT_WRITEMEM(long nDSP,long dwWriteAddr,long WriteLen,
long *pWriteBuf);
改写内核指定首地址与空间长度的内存区的一组数据。dwWriteAddr,表示访
问存储空间的起始地址;WriteLen,表示表示自起始地址开始的连续写存储区域的
长度;*pWriteBuf,表示写取内存空间数据组的缓存指针
以上函数中,相同的参数 nDSP,表示片内 DSP 0~11 的内核编号。此外,X-DSP
采用全局编址,对存储空间的读写访问实则是通过循环调用读写寄存器函数来实
现的。
功能支持
基于以上的驱动函数,该集成开发环境支持以下功能:
1) 支持共享内存的通信协议;
2) 支持指令流水线控制:运行、停止、单步、复位、强制运行、同时运行、
同时停止以及同时复位;
3) 支持断点调试功能:硬件断点与软件断点的设置与取消;
4) 读写寄存器与存储空间。
5.3.2 工作原理
第 54 页
国防科学技术大学研究生院工程硕士学位论文
5.3.3 数据共享机制
第 55 页
国防科学技术大学研究生院工程硕士学位论文
共享内存
INPUTQUEUE
写 读
集 全
成 芯
开 片
发 模
环 拟
境 读 写 环
境
OUTPUTQUEUE
深度:32
图 5.5 共享数据交互示意图
理论上说,新型软硬件协同的验证环境下所采用的共享内存机制,其地位如
同 FPGA 原型验证中的 JTAG 仿真器,不同的是,我们将两个设备(调试主机与
被调试主板)之间不可见的数据通信“黑盒子”,转化成了两个软件(调试软件与
NC_Sim 仿真平台)之间数据结构可见的共享区域。
5.4 流水线功能的验证实践
5.4.1 流水线控制功能
第 56 页
国防科学技术大学研究生院工程硕士学位论文
图 5.6 流水线控制的功能验证
如上图所示,对于接收到外部的调试命令,我们可以直接通过 JIR_P0(指令
寄存器)来观察。接受到第一条复位命令:rst_n 为低电平,流水线被复位,DP_PC
从首地址 20_00000000 开始取值;第二条单步命令:流水线向下走一个单步,经
过一条 80 位指令,DP_PC 便从 20_00000000 指向程序的第二条指令,地址为
20_0000000A;第三条运行命令,流水线被释放,程序经过一段密集的执行,在接
收到暂停指令之后,停在了 DP_PC=38’h20_0000036B 处。自此,全部完成了四条
用户想要执行的调试命令。
5.4.2 读写寄存器功能
图 5.7 读写寄存器的功能验证
从图 5.7 中可以看出,访问 SPI 空间,是 ET 通过 DMA 通道完成的。再接收
到读命令(JIR_P0=78’h3ff4_00000020_00000008),触发 ET_DMA_Addr(读地址)
和 ET_DMA_Rd ( 读 使 能 ) , 然 后 将 DMA_ET_Data ( 读 返 回 数 据 ) 在
DMA_ET_DataRdy(数据有效信号)的控制写入 RSAC_DataToJIR(数据返回寄存
器)。再通过数据共享堆栈,返回用户界面,供程序员查看结果是否正确。
第 57 页
国防科学技术大学研究生院工程硕士学位论文
5.4.3 性能统计功能
在调试界面上,对内核的性能的统计只需要选中程序员想要关注的性能参数
(5.1.1 小结中列举)、与之对应的使能参数,这两个参数的传递是通过写操作(数
据 78’h3fe0_xxxxxxxx_xxxxxxxx,地址 78’h3ff3_xxxxxxxx_xxxxxxxx)完成的,数
据流过程与 5.4.1 小结描述的过程一致。最终,在程序停止后,程序员就可以在调
试界面上观察到想要得到的性能参数(通过发送读命令完成)。模拟器监测波形
如图 5.8 所示。
图 5.8 性能统计的功能验证
如上图所示,以对分支命中次数的统计为例,在用户界面上触发事件计数寄
存器(EVSR0 为 1)、事件选择寄存器使能(EVER0 为 1)。当 ET_stall 为 0,流
水线放开时,事件计数寄存器(EVCR0)将统计分支命中的信号(CPU_BrtkET_tmp)
的次数,最终在程序停下(ET_stall 为 1),将统计结果返回用户界面,供程序员
查看。
5.4.4 软件断点的设置与取消
软件断点设置与取消,也属于 ET 对流水线的控制作用,为了对比第三、第四
章中基于模拟的方法对软件断点的功能验证,在本小节中单独讨论。在本章实现
的系统级验证环境中,程序员可以直接在调试界面上,通过点击断点的设置/取消,
向内核发送设置/取消软件断点的命令,该过程实则是通过对流水线的多次读写访
问完成的。模拟器检测波形如图 5.9 所示。
图 5.9 软件断点设置与取消的功能验证
第 58 页
国防科学技术大学研究生院工程硕士学位论文
5.5 本章小结
第 59 页
国防科学技术大学研究生院工程硕士学位论文
第六章 结束语
6.1 本文总结
6.2 工作展望
第 61 页
国防科学技术大学研究生院工程硕士学位论文
致 谢
致谢伊始,人人都会这样开头,光阴荏苒、时光飞逝、三年时间转瞬即逝,
或者,在这论文完成之际、在这学业结束之时……,可我要说,因为你们,三年的
时间让我成长、让我蜕变,请收下我感恩的言语!
三年,说长不长,说短也不短。从一开始,就以一种卑微的姿态跌跌撞撞闯
入科大生活,不安的心理直到一点点融入科大的学习生活环境之后,才开始慢慢
消散。这里,我不得不跟我的导师——刘衡竹教授,说一声:谢谢。要不是刘老
师的鼓励与肯定,我也不能这么快的适应一个从来没有接触过的军校生活。记得
研一选课时,刘老师给我分析每门课程的重难点以及未来的发展,研二进项目组
时,又与我商讨不同项目的进度与侧重点,更不能忘的是老师一句:有事直接打
电话。老师在生活中、工作中对我点点滴滴的关怀与指导,让我感觉到家一样的
温暖;渊博的专业学识、严谨的治学风格、和蔼的智者形象,都是老师标签一样
的风采,也是我人生标榜的楷模,终生受益。诚挚的祝愿刘老师及家人幸福安康!
褪去了初来咋到时的稚气,一年之后,我也进入了项目组,遇到心思细腻的
万江华老师。初次的匆匆一见,不日我便惊讶于年纪轻轻的万老师竟然已挑起项
目负责人的重担。我细细的观察,每次遇到问题,老师总能巧妙的解决,峰回路
转、柳暗花明。我想说,站不到巨人的肩膀,是因为巨人在成长。万老师固有的
渊博知识、沉稳的处事作风以及谦虚谨慎的工作态度,无一不是我以后漫漫学习
路上的榜样,学无止尽。衷心的祝愿万老师及家人一切顺利!
每一个团队往往都凝聚着强大的潜能,就像那首歌里唱的,团结就是力量。
在我们实验室的大家庭里,有谨言慎行的万老师,有兢业负责的彭老师,也有巾
帼不让须眉的陈老师,还有我总以为叫师兄会更为亲切却已然带上教师光环的有
为青年陈胜刚老师、雷元武老师、刘胜老师、王耀华老师、马胜老师,是你们带
领着我们在项目组里经历了人生中最后的两年校园生活,迎我们来,即将送我们
走。感谢每一位老师对我在学业上的教导,工作上的指导,以后的生活,我会继
续向你们看齐,牢牢记住在你们的指引下我成长的足迹,祝你们一切安好!
或许是我运气好,亦或是无形的眷顾,总让我巧遇贵人,这便是我在实验室
的亲密小伙伴——王慧丽师姐。起初,我不安的怀疑一个初出茅庐的姑娘、一个
不谙世事的丫头,能把老师分配的任务合格的完成么?事实证明,我多虑了。稍
有接触,就发现师姐的工作能力、聪明才智并不亚于同级众多的师兄,工作中遇
到问题,师姐总是耐心、反复的讲解,帮我分析原因;生活中出现烦恼,又会不
断开导我、鼓励我,这一切,我看在眼里,记在心里。真心真意的谢谢师姐,祝
师姐青春永驻!
第 62 页
国防科学技术大学研究生院工程硕士学位论文
此外,还要感谢的就是同师门的师兄弟和师姐了:阳柳师姐、张波涛师兄、
刘冬培师兄、周理师兄、张剑锋师兄、陈挺师兄、唐敏、丰一流、郭东升、马志
超、孙海明、张弛、张宇飞师弟、刘海彬师弟、沈广振师弟、汪本章师弟等等,
我们来自五湖四海,能在科大相聚、同门,若不是有缘,恐怕我们也不过是茫茫
人海中的陌路人!人生中的每一段缘分都值得珍惜,希望以后我们无论身处何方,
依然能收到彼此节日的问候、偶尔相聚的邀请,祝愿我们每一人都会有美好的未
来、远大的前途。
再次,要感谢的当属实验室的师兄们:曾思师兄、田甜师兄、彭浩师兄、陈
俊杰师兄、谷鑫师兄,以及已经毕业离校的邓宇师兄、成兴华师兄、张闯师兄、
宋国荣师兄,是你们对我的帮组与关心,让我一点一点退去了懵懂,开始明白,
很多事情只有自己亲自去做去尝试,才能真正领悟到“获得”二字的价值。离别之际,
无论你们在哪里,我们相隔多远,祝愿你们都能工作顺利、生活幸福!
除此以外,我还要感谢503室11级的小伙伴们:彭陈、邓子椰、赵芮、林宗华、
徐恩、孙寅龙、化迎召、许奥利、燕世林、杨柳、葛磊磊、张帅,在项目组的两
年里,我们一起讨论工作,一起笑谈人生,一起聚,一起玩,朝夕相处的日子里
我们建立了深厚的友谊,无疑是我以后人生路上的宝贵财富。祝愿你们所有人都
能心想事成!
还应该感谢的是:让我有在这里经历三年美好时光的科大、学校领导、学院
领导、六队贺毅政委、蔡巍队长、郑国辉副队长,以及全体11级的同学们,感谢
你们的教导、关怀与陪伴。人生多一段经历就多一段精彩,真心祝愿你们一帆风
顺!
当然,还要感谢的是三年来与我朝夕相伴的舍友们:郝培培同学、刘晓燕同
学、丁艳平同学,是你们的陪伴,让我的研究生生活多一分安心与温暖,少一分
惶恐与孤单。在这里,借此机会,也顺便祝福即将攻读博士学位的郝培培同学学
业有成!未来,不管我们走向何方,拥有怎样的人生,都祝福大家能一路坦途、
越过越好!
最后,我最要感谢的是我的家人:爸爸,妈妈,哥哥,嫂嫂,是你们对我的
关心、呵护、鼓励与支持一直温暖着我、陪伴着我一路走到今天。人都说,血浓
于水,只这一句就道清了你们多年不求回报的付出。在以后的人生路上,我会带
着这份沉甸甸的恩情,一路勇往直前!由衷的祝愿我的家人幸福、平安!
感谢身边的每一个人,提到的、来不及一一列举的,无论是挚友还是过客,
都真诚道一声:谢谢,愿您一生平安、幸福快乐!
第 63 页
国防科学技术大学研究生院工程硕士学位论文
参考文献
[1] Eyre Jennifer, Jeff Bier. The Evolution of DSP Processors[J]. IEEE Signal
Processing Magazine, 2000,17(2):43-61.
[2] Fisher Joseph A.. Very Long Instruction Word architectures and the ELI-512[M].
ACM, 1983.
[3] Schlansker Michael S. and Ramakrishna Rau B.. EPIC: An Architecture for
Instruction-Level Parallel Processors [M]. Hewlett-Packard Laboratories,2000.
[4] Singh C. Processor Design with DSP Enhancements for Wireless Applications[J].
2012.
[5] Ramacher U.. Software-defined radio prospects for multistandard mobile
phones[J]. IEEE Computer,Oct. 2007,40(10):62~69.
[6] Eyre J. The digital signal processor derby[J]. Spectrum,IEEE. 2001,38(6):62-68.
[7] 曾义芳, 编著. DSP基础知识及系列芯片[M]. 北京航空航天大学出版社.
2006.10.
[8] Instruments Texas. T MS320C54X DSP Reference Set. Volume 1:CPU and
Peripherals[J]. TI Report number SPRU131E,1998.
[9] 张雄伟, 曹铁勇. DSP 芯片的原理与开发应用[J]. 电子工业出版社. 北京.
2000:269-293.
[10] Dahnoun N. Digital signal processing implementation using the TMS320C6000
DSP platform[M]. Addison-Wesley Longman Publishing Co.,Inc.,2000.
[11] 魏晓云, 陈杰, 曾云. DSP 技术的最新发展及其应用现状[J]. 半导体技术.
2003, 28(9):18-21.
[12] 余巧燕. 数字信号处理器的流水结构设计及验证研究[D]. 学位论文. 浙江大
学. 2005.
[13] Eymery F, Rey P. Immunocytolocalization of CDSP 32 and CDSP 34,two
chloroplastic drought-induced stress proteins in<i> solanum tuberosum</i>
plants[J]. Plant Physiology and Biochemistry,1999,37(4):305-312.
[14] Jing X U E, Yong-qiang B A I, Zheng-hong D,et al. DFT techniques in DSP Chip
Core NDSP25[J]. 2004,17(3).
[15] Shuming C, Zhentao L, Jianghua W, et al. Reserch and development of high
performance YHFT digital signal processor[J]. Journal of Computer Research and
Development. 2006,6:007.
[16] 张朝华. 一种16位数字信号处理器内核的研究与设计[D]. 学位论文. 上海交
通大学. 2008.
[17] Joupi N. P. Wall, D. W.. Available instruction-level parallelism for superscalar
and super-pipelined machines[C]. In Proceedings of the 3rd International
第 64 页
国防科学技术大学研究生院工程硕士学位论文
第 65 页
国防科学技术大学研究生院工程硕士学位论文
[49] Ciaran MacNamee, Donal Heffernan. Emerging on-chip debugging techniques for
real-time embedded systems[J]. COMPUTER & CONTROL ENGINEERING
JOURNAL DECEMBER. 2000.
[50] Srtherland. S. The Verilog PLI Handbook(Second Edition): a user’s guide
and comprehensive reference on the Verilog programming language interface[M].
Springer,2002.
[51] Maier K D. On-chip Debug support for Embedded Systems-on-chip[J]. In
Proceedings of the 2003 International Symposium on Circuits and Systems
(ISCAS `03), 2003(5):565-568.
[52] 王慧丽. 支持仿真/调试技术的指令派发部件的设计与实现[D]. 学位论文. 国
防科技大学. 2012.3.
[53] [美]克里斯·斯皮尔(著), 张春, 麦宋平, 赵益新(译). SyetemVerilog验证测试
平台编写指南[M]. 科学出版社. 2012:330-362.
[54] 李睿婷, 万江华, 刘衡竹, 王慧丽. 一种基于PLI技术的系统级验证方法[C].
中国计算机学会第十七届计算机工程与工艺学术年会. 长沙:国防科技大学出
版社. 2013:378-382.
[55] Hopkins A B T, Mcdonald-Maier K D. Debug support for complex
systems-on-chip: A review[J]. IEEE Proceedings-Computers and digital
Techniques. 2006, 153(4):197-207.
[56] Hwang J, Milne B, Shirazi N, et al. System level tools for DSP in FPGAs[C]//
Field-Progammable Logic and Applications. Spinger Berlin Heidelberg.
2001:534-543.
[57] 谭浩强. C++程序设计. 清华大学出版社[M]. 2011:158-193.
[58] Cadence. PLI1.0 User Guide and Reference[Z]. 2011:141-364.
[59] Mittra, Swapnajit, ed. Principles of Verilog PLI, Springer. 1999.
[60] Sutherland S. The Verilog PLI Is Dead(maybe) Long Live The System Verilog
DPI[J]. Proc.Synopsys Users Grop(SNUG), San Jose. 2004.
[61] Stevens W.Richard (著), 杨继张(译). UNIX网络编程[M]. 清华大学出版社.
2000: 451-496.
第 67 页
国防科学技术大学研究生院工程硕士学位论文
作者在学期间取得的学术成果
第 68 页