You are on page 1of 79

分类号 TP303 学号 GS11062227

UDC 密级 公 开

工程硕士学位论文

高性能 X-DSP 指令流水线部件设计实现

与软硬件协同验证

硕士生姓名 李睿婷

学 科 领 域 软件工程

研 究 方 向 高性能微处理器设计

指 导 教 师 刘衡竹 教授

国防科学技术大学研究生院

二〇一四年三月
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

第二章 X-DSP 处理器体系结构分析 ............................................................... 10


2.1 X-DSP 单核 Matrix 2 体系结构 ................................................................... 10
2.2 X-DSP 指令集............................................................................................... 12
2.2.1 X-DSP 指令基本格式.......................................................................... 12
2.2.2 执行包与取指包结构分析 .................................................................. 13
2.3 X-DSP 指令流水线....................................................................................... 14
2.4 指令流水线部件设计的需求分析 ............................................................... 17
2.5 本章小结 ....................................................................................................... 18

第三章 指令派发部件的设计实现与功能验证 .................................................. 19


3.1 指令派发部件概要分析 ............................................................................... 19
3.1.1 指令派发功能概述 .............................................................................. 19
3.1.2 与派发相关的指令域分析 .................................................................. 20
3.2 指令派发部件总体设计 ............................................................................... 22
3.2.1 总体设计结构 ...................................................................................... 22
3.2.2 指令派发窗的形成机制 ...................................................................... 23
3.2.3 候选指令的选择策略 .......................................................................... 26
3.2.4 指令并行发射的结构分析 .................................................................. 26
3.2.5 指令派发的最终判定 .......................................................................... 28
3.3 指令派发部件对仿真调试的支持 ............................................................... 30
3.3.1 支持 ET 读访问 ................................................................................... 30
第 I 页
国防科学技术大学研究生院工程硕士学位论文

3.3.2 支持 ET 写访问 ................................................................................... 30


3.3.3 软件断点的检测机制 .......................................................................... 32
3.4 功能验证与覆盖率分析 ............................................................................... 32
3.4.1 功能验证点 .......................................................................................... 32
3.4.2 验证结果与分析 .................................................................................. 33
3.4.3 覆盖率分析 .......................................................................................... 36
3.5 逻辑综合 ....................................................................................................... 36
3.6 本章小结 ....................................................................................................... 37

第四章 指令流控部件的设计实现与功能验证 .................................................. 38


4.1 指令流控部件概要分析 ............................................................................... 38
4.1.1 指令流控功能概述 .............................................................................. 38
4.1.2 分支指令编码 ...................................................................................... 39
4.2 指令流控部件总体设计 ............................................................................... 41
4.2.1 总体设计结构 ...................................................................................... 41
4.2.2 X-DSP 的分支延迟槽.......................................................................... 41
4.3 对仿真调试的支持 ....................................................................................... 43
4.4 功能验证与覆盖率分析 ............................................................................... 44
4.4.1 功能验证点 .......................................................................................... 44
4.4.2 验证结果与分析 .................................................................................. 45
4.4.3 覆盖率分析 .......................................................................................... 46
4.5 逻辑综合 ....................................................................................................... 47
4.6 本章小结 ....................................................................................................... 47

第五章 软硬件协同验证模型的设计与实现 ..................................................... 48


5.1 传统系统级验证模型分析 ........................................................................... 48
5.1.1 基于 JTAG 的仿真调试方案 .............................................................. 48
5.1.2 FPGA 原型验证原理分析 ................................................................... 49
5.2 新型系统级验证模型的设计基础 ............................................................... 50
5.2.1 新型系统级验证模型的需求分析 ...................................................... 50
5.2.2 新型系统级验证模型的结构原理 ...................................................... 51
5.2.3 PLI 接口技术简述 ............................................................................... 52
5.3 软硬件协同验证的总体设计 ....................................................................... 52
5.3.1 总体设计结构 ...................................................................................... 52
5.3.2 工作原理 .............................................................................................. 54
5.3.3 数据共享机制 ...................................................................................... 55
第 II 页
国防科学技术大学研究生院工程硕士学位论文

5.4 流水线功能的验证实践 ............................................................................... 56


5.4.1 流水线控制功能 .................................................................................. 56
5.4.2 读写寄存器功能 .................................................................................. 57
5.4.3 性能统计功能 ...................................................................................... 58
5.4.4 软件断点的设置与取消 ...................................................................... 58
5.5 本章小结 ....................................................................................................... 59

第六章 结束语 ................................................................................................ 60


6.1 本文总结 ....................................................................................................... 60
6.2 工作展望 ....................................................................................................... 61

致 谢 .............................................................................................................. 62

参考文献 ........................................................................................................... 64

作者在学期间取得的学术成果 ........................................................................... 68

第 III 页
国防科学技术大学研究生院工程硕士学位论文

表 目 录

表 1.1 16 位加法器流水线性能比较 ........................................................................... 2


表 1.2 8 位乘法器流水线性能比较 ............................................................................. 2
表 2.1 指令公共编码域说明 ...................................................................................... 13
表 3.1 40 位指令 Type 位(Inst[7:1])汇总 .................................................................. 20
表 3.2 80 位指令 Type 位(Inst[5:1])汇总 .................................................................. 21
表 3.3 并行指令汇编代码示例 .................................................................................. 21
表 3.4 DP 与 ET 的接口列表 ..................................................................................... 30
表 3.5 指令派发部件功能验证点 .............................................................................. 33
表 3.6 L1P 旁路取指的验证激励 .............................................................................. 34
表 3.7 软件断点设置的验证激励 .............................................................................. 35
表 3.8 指令派发部件综合结果 .................................................................................. 37
表 4.1 BR 部件 40 位指令操作码汇总 ...................................................................... 40
表 4.2 分支指令汇编代码示例 .................................................................................. 40
表 4.3 BR 与 ET 的接口列表 ..................................................................................... 43
表 4.4 指令流控部件功能验证点 .............................................................................. 44
表 4.5 分支到达打断阻塞流水线信号的验证激励 .................................................. 45
表 4.6 软件断点恢复的验证激励 .............................................................................. 45
表 4.7 指令流控部件综合结果 .................................................................................. 47

第 IV 页
国防科学技术大学研究生院工程硕士学位论文

图 目 录

图 1.1 采用流水线技术的数据通路 ............................................................................ 4


图 1.2 流水线时空图 .................................................................................................... 4
图 1.3 3 级流水线结构图 ............................................................................................. 5
图 1.4 改进后的 5 级流水线结构图 ............................................................................ 5
图 1.5 Retiming 前除法器结构框图 ............................................................................ 6
图 1.6 Retiming 后除法器结构框图 ............................................................................ 6
图 1.7 操作队列服用的指令流水线结构 .................................................................... 8
图 2.1 X-DSP 内核 Matrix 2 总体结构...................................................................... 10
图 2.2 X-DSP 基本指令格式 ..................................................................................... 12
图 2.3 执行包的基本格式 .......................................................................................... 13
图 2.4 允许最大并行的执行包类型 .......................................................................... 14
图 2.5 执行包在取指包中的位置关系 ...................................................................... 14
图 2.6 X-DSP 内核流水线结构示意图 ..................................................................... 15
图 2.7 取指部件三级流水线示意图 .......................................................................... 15
图 2.8 指令派发部件两级流水线示意图 .................................................................. 16
图 2.9 X-DSP 内核指令流水线时空图 ..................................................................... 16
图 3.1 指令派发部件与内核其他部件的位置关系 .................................................. 19
图 3.2 规整后的 40 位指令编码 ................................................................................ 20
图 3.3 规整后的 80 位指令编码 ................................................................................ 21
图 3.4 执行包中指令的存储格式 .............................................................................. 22
图 3.5 指令派发总体设计结构 .................................................................................. 22
图 3.6 指令派发窗口示意图 ...................................................................................... 23
图 3.7 顺序取指包完全移位 ...................................................................................... 23
图 3.8 分支取指包不完全移位 .................................................................................. 24
图 3.9 旁路取指包不完全移位 .................................................................................. 25
图 3.10 站内缓冲自移位 .............................................................................................. 25
图 3.11 候选指令的选择示意图 .................................................................................. 26
图 3.12 指令派发窗中 40/80bit 指令的位置关系 ....................................................... 27
图 3.13 指令的选择网络 .............................................................................................. 28
图 3.14 指令并行派发屏蔽表的生成 .......................................................................... 29
图 3.15 执行包边界屏蔽表的生成 .............................................................................. 29
图 3.16 ET 写派发一站站内缓冲 ................................................................................ 31
第 V 页
国防科学技术大学研究生院工程硕士学位论文

图 3.17 ET 写派发二战指令派发窗 ............................................................................ 32


图 3.18 软件断点的检测 .............................................................................................. 32
图 3.19 L1P 旁路取指的验证波形 .............................................................................. 34
图 3.20 软件断点设置的验证波形 .............................................................................. 35
图 3.21 指令派发部件覆盖率 ...................................................................................... 36
图 4.1 指令流控单元在内核中的位置 ...................................................................... 38
图 4.2 BR 部件寄存器/短立即数类型指令格式....................................................... 39
图 4.3 BR 部件长立即数类型指令格式 .................................................................... 39
图 4.4 指令流控部件总体设计结构 .......................................................................... 41
图 4.5 X-DSP 分支延迟槽示意图 ............................................................................. 42
图 4.6 X-DSP 分支延迟槽的指令流图 ..................................................................... 42
图 4.7 NOP 被分支到达打断的验证波形 ................................................................. 45
图 4.8 软件断点恢复的验证波形 .............................................................................. 46
图 4.9 指令流控部件的覆盖率 .................................................................................. 46
图 5.1 ET 资源访问通路 ............................................................................................ 48
图 5.2 FPGA 原型验证原理图 ................................................................................... 50
图 5.3 基于 PLI 技术的新型软硬件协同验证原理图 .............................................. 51
图 5.4 软硬件协同验证总体设计结构图 .................................................................. 53
图 5.5 共享数据交互示意图 ...................................................................................... 56
图 5.6 流水线控制的功能验证 .................................................................................. 57
图 5.7 读写寄存器的功能验证 .................................................................................. 57
图 5.8 性能统计的功能验证 ...................................................................................... 58
图 5.9 软件断点设置与取消的功能验证 .................................................................. 58

第 VI 页
国防科学技术大学研究生院工程硕士学位论文

摘 要

X-DSP 处理器是由国防科技大学微电子所自主研发的一款高性能 64 位浮点向


量多核 DSP 芯片,40nm 工艺下,实现主频 1GHz 的设计目标,采用 VLIW 结构,
40/80 位变长指令集,支持 32/64 位定点/浮点运算,最大可支持 11 条标/向量指令
混合并行发射。
本文以高性能 X-DSP 处理器的开发与研制为背景,深入分析流水线技术,设
计实现了指令流水线上的指令派发与指令流控部件,并基于所提出的软硬件协同
验证平台对系统级指令流水线的功能进行验证。本文主要的创新点与工作内容包
括以下几点:
1) 详细分析 X-DSP 处理器内核结构、指令格式与流水线结构特征,进而提出
指令流水线部件中指令派发与流控部件的设计需求;
2) 基于超长指令字(VLIW)结构,设计并实现可跨取指包边界派发指令的
指令派发部件,支持 L1P 旁路取指与仿真调试部件(ET)对流水线的控制功能;
3) 深入分析 X-DSP 分支延迟槽特征,结合对调试仿真的支持,设计并实现指
令流控部件,完成对指令流的控制作用;
4) 针对指令派发与指令流控部件的逻辑设计,在指令流水线系统级分别对其
逻辑功能进行验证,并完成覆盖率分析与逻辑综合;
5) 分析传统 FPGA 原型验证的基本原理与不足之处,提出一种基于 PLI 接口
的新型调试/验证方案:利用 PLI 接口实现 C 函数与 Verilog 的嵌套调用、采用数
据共享机制实现不同进程间的通信。在软硬件协同支持下,对 X-DSP 的指令流水
线进行验证实践,实验结果表明该方案使得在设计阶段便可对调试接口以及流水
线功能进行更为充分的验证。

关键词:数字信号处理;流水线技术;超长指令字;指令派发;指令流控;
软硬件协同验证;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.

Key Words : DSP, Pipeline Technology, VLIW, Instruction Dispatch,


Instruction Pipeline Control, Software/Hardware Co-verification, PLI Interface
Technology

第 ii 页
国防科学技术大学研究生院工程硕士学位论文

第一章 绪论

数字信号处理器(Digital signal Processor,DSP),是面向数字信号处理的嵌


入式专用微处理器,它拥有强大的算术运算能力,主要用于实时、快速的实现各
种数字信号的处理及其复杂的控制算法[1]。目前,高性能 DSP 均采用超长指令字
( Very Long Instruction Words , VLIW ) 架 构 [2] , 更 有 利 于 实 现 指 令 级 并 行
(Instruction Level Parallelism,ILP)以完成大量的重复性数据处理[3]。随着信息
化产业的不断发展,对高性能 DSP 的需求量迅速增长,在实时的信号处理中,它
通常具有稳定性、可靠性、可重复性等诸多优势。因此,高性能 DSP 已经广泛应
用于各个领域,例如:图像处理、人工智能、医疗器械、航空航海、石油勘探、
气候环境研究等等[4]。本章主要以 X-DSP 课题背景为基础,介绍 DSP 研发领域的
国内外现状,及指令流水线技术在高性能 DSP 中的广泛应用。

1.1 课题背景及意义

1.1.1 研究背景

集成电路与半导体技术的飞速发展,带动 DSP 经历多次重大变革,时至今日,


DSP 已经成为数字化微处理器的核心[1]。在 3G/4G 移动通信、数字消费类电子产
品,以及石油勘探、气候研究等尖端科技领域,更加强调通信带宽与实时处理的
效率,这对核心处理器的性能提出了更高要求[5]。
自上世纪 80 年代,DSP 芯片在微处理器领域的发展突飞猛进[6],从运算速度
来看,一次乘加运算(MAC)的耗时已经从开始的 400ns 下降到了 10ns 以下(如
TI 公司的 TMS32054X、TMS320C62X/67X),对数据的处理能力更是提高了几十
倍[7][8]。
从商业化的信息产业来看,欧美等科技大国仍然保持着国际领先地位[9],例如:
Pentek 公司的 4293,该处理器使用 8 片 TI 公司 300 MHz 的 TMS320C6203 芯
片,具有 19200 MIPS 的处理能力,与此同时,还集成了 8 片 32 MB 的 SDRAM,
提升存储空间、加快访存速度,最终该处理器的数据吞吐率最大可达 600 MB/s[10]。
我国在 IT 行业起步晚、起点低,与欧美等科技大国仍然存在一定距离。但是
近年来,国家对电子、通信、互联网行业的扶持[1],以及诸多科研工作者夜以继日
的努力,我国在 DSP 处理器里研发领域也已经有了一定的研发基础,不断涌现具
有自主知识产权的 DSP 处理器 IP 核设计[11],例如,中科院微电子所承担的“国家
863 计划”,由湖南大学参与设计的、16 位嵌入式定点高性能 DSP 处理器
CDSP[13] ; 浙 江 大 学 信 息 与 通 信 工 程 研 究 所 SOC RD 小 组 自 主 研 发 的
第 1 页
国防科学技术大学研究生院工程硕士学位论文

MediaDSP1601 处理器,是专门用于多媒体处理的 16 位定点 DSP 处理器[12];西北


工业大学航空微电子中心自主设计的基于超标量体系结构的 NDSP25 处理器,不
但提出了流水线控制单元的优化设计,还将控制状态机的状态数目大大缩减,从
而节省了电路面积,提高处理器速度[14];此外,还有由国防科技大学计算机学院
自主研制的“银河飞腾”系列高性能浮点 DSP(简称 YHFT-DSP/700),融合八流出
VLIW 结 构 、 压 缩 的 变 长 指 令 包 技 术 、 二 级 片 上 存 储 系 统 以 及 同 时 多 线 程
YHFT-DSP/SMT 等技术,实现最终将 DSP 性能提高 40%的设计目标[15]。这些凝聚
了科研工作者诸多心血与青春的研究成果,一定程度上填补了我国在自主开发
DSP 处理器领域的空缺,同时也为今后的研究设计积累了宝贵经验[16]。
在这些不断涌现的高性能 DSP 处理器中,为了确保性能需求,设计过程中主
要采用流水线技术[17]。虽然,流水线技术是从 Intel 的 80486 开始的,但它已经成
为现代微处理器的核心技术,更在 DSP 的设计中得到广泛的应用[18]。多级流水线,
极大的提高了指令级并行,能更好的适应 DSP 处理复杂运算的前提[19]。如表 1.1、
1.2 所示,分别以 16 位加法器和 8 位乘法器为例,分析流水线对处理器性能的影
响[20]。
表 1.1 16 位加法器流水线性能比较
流水线级数 0 1 2 3 4 5 6 7
16/4608 16/4608 33/4608 51/4608 70/4608 90/4608 111/4608 133/4608
逻辑单元数
(<1%) (<1%) (<1%) (1.1%) (1.5%) (<2%) (2.4%) (2.9%)
寄存器数 0 16 33 51 70 90 111 133
最高频率
71 122 329 338 380 380 380 380
(MHZ)
表 1.2 8 位乘法器流水线性能比较
流水线级数 0 1 2 3 4 5 6 7
1/4608 1/4608 1/4608 17/4608 33/4608 8/4608 2/4608 52/4608
逻辑单元数
(<1%) (<1%) (<1%) (<1%) (<1%) (<1%) (<1%) (<1%)
寄存器数 0 0 0 16 31 4 1 2
Embeded
1/26 1/26 1/26 1/26 1/26 1/26 1/26 1/26
Multipher9_bits
(4%) (4%) (4%) (4%) (4%) (4%) (4%) (4%)
element
0/ 0/ 0/ 0/ 0/ 48/ 32/ 48/
Memory
119808 119808 119808 119808 119808 119808 119808 119808
Bits
(0%) (0%) (0%) (0%) (0%) (<1%) (<1%) (<1%)
最高频率
192 140 216 216 216 216 216 216
(MHZ)
由表 1.1 、1.2 的比较结果,我们可以得到以下结论[21][22]:
1) 采用流水线技术后,工作频率普遍有所增高,这体现了流水线技术的优势;

第 2 页
国防科学技术大学研究生院工程硕士学位论文

2) 采用流水线技术,对处理器内部的资源消耗有所增加,例如逻辑单元、寄
存器个数、存储器个数;
3) 流水线级数增加,性能指标不一定成正比增加,应该注意两者之间的利弊
权衡。

1.1.2 课题意义

目前,国内高性能 DSP 的研发领域,国防科技大学以丰富的科研经验、强大


的科研阵容以及宏厚的科研实力成为国内该领域极具代表性的团队之一[23]。2013
年 6 月,由国防科技大学与浪潮公司共同研发的“天河二号”在国际超级计算机大会
上成功登上科技顶峰,这是在继“天河一号”之后,再一次在国际巨型机领域荣获世
界第一[24]。
本课题所研制的 X-DSP,是国防科技大学计算机学院自主研发、具有自主知
识产权的高性能 DSP,
融入了一系列高性能 DSP 研发的核心技术。除此之外,X-DSP
还配套设计了辅助芯片开发的集成环境,包括汇编器、链接器、编译器和仿真调
试软件等等。
X-DSP 是结合 VLIW 架构和 SIMD 技术[25]的高性能 64 位浮点向量多核 DSP,
它是在 YHFT-Matrix 系列高性能 DSP 的基础上,进行指令流水线优化、寄存器访
问技术改进、运算部件结构调整,以实现预期的性能指标。
在课题的研发过程中,本人主要负责指令流水线上的指令派发部件、指令流
控部件的设计与验证,并设计实现基于 PLI(Programming Language Interface,编
程语言接口)接口技术的新型软硬件协同验证环境。课题的研究目的在于,如何
进一步提高指令流水线的效率以及对仿真调试结构的支持,具体包括以下几点:
1) 如何对基于 VLIW 结构高性能 DSP 的指令流水线进行优化[26];
2) 如何实现流水线部件对主频需求的新挑战;
3) 如何实现对不适于 FPGA 验证的大规模、超大规模集成电路设计的微处理
器进行仿真调试[27]。

1.2 流水线技术研究

1.2.1 流水线综述

所谓流水线技术(Pipeline Technology),是指将一个重复的时序过程分解成为
若干个子过程,而每个子过程都可有效地在其专用的功能段上与其他子过程同时
执行。这样分段的指令执行模式,有效的提高了处理器的指令级并行性,因此,
流水线技术,通常在高性能的、需要经常进行大规模运算的复杂处理器系统中得
第 3 页
国防科学技术大学研究生院工程硕士学位论文

到广泛应用[28]。如图 1.1 所示,是常规数据通路与采用流水线技术的数据通路对比


示意图[29]。
输入 输出

数据通路 寄


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 果

第一级:取指 第二级:译码 第三级:读取 第四级:运算 第五级:写回

图 1.4 改进后的 5 级流水线结构图


如上图所示,对 3 级流水线结构图中的执行阶段进行流水线细化,将图 1.4 中
一级锁存的执行阶段分解为读取、运算和执行 3 个子阶段。这样,顺序的完成这
五个过程,就构成了完整的 5 级指令流水线。改进后的流水线结构,不仅使得模
块间具有较为明显的功能界限,也能均衡逻辑规模与路径延迟,提高处理器的并
行性,符合流水线划分以提高工作效率的初衷[31][32]。

第 5 页
国防科学技术大学研究生院工程硕士学位论文

1.2.2 流水线的优化技术

在微处理器的设计过程中,随着性能需求的不断提升,处理器对指令流水线
效率的要求也越来越高,因此,对于流水线的优化已然成为微处理器研究领域的
焦点。目前主流的流水线优化技术有:寄存器均衡、操作队列复用、精确例外处
理、流水线调度、Tomasulo 算法、寄存器重命名、Cache 技术等[28]。

1.2.2.1 寄存器均衡
寄存器均衡(Retiming)是现代微处理器设计领域广泛采用的流水线优化技术
[33]
。对于结构、算法复杂的数字信号处理,寄存器均衡技术是以单个功能模块为
单位,在各个功能块之间插入寄存器组,从而把之前的长延时路径分割为若干段
子路径。采用 Retiming,使得模块的时序特性由单个功能块的路径延时所决定,
因此,与 Retiming 之前的处理器性能相比,最高工作频率可获得成倍增加,倍数
取决于流水线级数[34]。
以 8 位除法器为例,分析寄存器均衡技术对流水线时序性能的改善。如图 1.5、
1.6 所示,分别是指令流水线在采用 Retiming 技术前后的除法器结构框图。

Zero 商
移 移 移
位 位 位
比 比 …… 比
被除数 较 减 较 减 较 减 余数
法 法 共八组 法
器 器 器

除数

图 1.5 Retiming 前除法器结构框图

结 商
Zero 移 移 结
果 果
位 位


存 …… 比 寄
被除数 较 减 较 减 存 余数
器 共八组 器
法 法
器 器

除数
CLK

图 1.6 Retiming 后除法器结构框图


如图 1.5、1.6 所示,假设整条路径延时为 Div8_Delay,每个功能单元的延时
为 Unit_Delay,则可以得出一下结论:

第 6 页
国防科学技术大学研究生院工程硕士学位论文

 实时 Retiming 技术前 8 位除法器的路径延时为:


Div8_Delay  Unit_Delay0  Unit_Delay1 Unit_Delay2  Unit_Delay3
 Unit_Delay4  Unit_Delay5  Unit_Delay6  Unit_Delay7
 8 * Unit_Delay ;
 实时 Retiming 技术后 8 位除法器的路径延时为:
Div8_Delay  Max ( Unit_Delay0, Unit_Delay1, Unit_Delay2, Unit_Delay3,
Unit_Delay4 , Unit_Delay5, Unit_Delay6, Unit_Delay7 )
 Unit_Delay ;
由此可见,采用 Retiming 技术,通过在各个功能模块之间插入 8 级寄存器组,
使得原来的单周期除法指令变为 8 周期完成,除法器的路径延时从而缩小了 8 倍,
因而,整个除法器模块的频率特性也近似提高了 8 倍。这便是该 8 位除法器的 8
级流水线结构[35]。
因此,寄存器均衡技术,实质上是通过插入流水线寄存器组,将长延时的路
径分割,在优化流水线结构的同时,提升了处理器的工作频率,也消除了处理器
时序特性的瓶颈。

1.2.2.2 操作队列复用
“龙芯一号”是由中国科学院计算技术研究所研发的拥有自主知识产权的高性
能通用微处理器,集成 32 位超标量处理器内核,支持 MIPS 32 指令集,通过采用
基于操作队列复用的 5 级流水线结构,结合寄存器重命名机制,来实现更好的保
证例外现场的精确性。
在微处理器的流水线设计过程中,比较常见的两个问题即是:例外处理和相
关解决。“龙芯一号”微处理器巧妙地把例外处理与指令流水线紧密地耦合在一起,
在数据通路的设计中,让例外结果与正常结果并行,不区分二者在执行过程中的
区别,只有在指令结束阶段才对例外结果进行特殊处理[36]。不仅如此,“龙芯一号”
把转移指令的猜测错误机制作为一种特殊例外,并且利用例外处理的取消来保持
现场精确逻辑。通过这种处理机制,不仅达到简化设计的目的,同时也改善了流
水线上例外处理的瓶颈,还可以让位于转移指令后的猜测执行指令,尽可能的往
下执行[38][37]。
如图 1.7 所示,是“龙芯一号”微处理器操作队列复用的指令流水线结构图[38]。

第 7 页
国防科学技术大学研究生院工程硕士学位论文

结果总线模块

访存总线 地址运算 …… ALU ALU


及访存接口
B OP Qj Vj Qk Vk Qid B OP Qj Vj Qk Vk Qid B OP Qj Vj Qk Vk Qid

保留站 保留站 保留站

发射总线: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,…

State OP Src1 Src2 Dest Imm/Res …

操作队列

译码总线:Valid,OP,Src1,Src2,Dest,Imm …
译码模块
Valid,Inst,…
取指总线 IR PC
取指模块

图 1.7 操作队列服用的指令流水线结构
除此之外,流水线设计过程中客观存在的相关性,一直都是影响流水线性能
的关键所在。程序在执行过程中,流水线中一旦出现相关,必然会阻碍指令流水
线的顺利执行,因此,如果不能很好的解决相关性问题,不但会影响处理器的性
能,也可能直接导致执行结果的错误[39]。
总体来说,在当前主流的高性能 DSP 中,大多都采用流水线技术以提高微处
理器性能,但是面对仍然客观存在的问题,证明在流水线技术发展的道路上我们
还有很长的路要继续探索[40]。

1.3 本文的主要内容

本文主要是以高性能 64 位浮点向量多核 DSP 为课题背景,研究 X-DSP 处理


器中的指令流水线部件[41],着重在于指令派发部件、指令流控部件的设计与实现,
并设计实现了基于 PLI 技术的新型软硬件协同仿真调试环境。本文的主要内容包
括以下几点:
1) 以课题背景为基础,分析高性能 DSP 流水线技术的研究背景、基本原理及
第 8 页
国防科学技术大学研究生院工程硕士学位论文

目前主流的流水线优化技术,指出本课题的研究意义与主要工作内容;
2) 介绍 X-DSP 处理器的内核结构特征,分析 X-DSP 指令集并针对其指令流
水线做详细研究;
3) 针对指令派发部件的功能需求,实现可跨取指包边界的、最大支持 11 指
令并行发射的指令派发部件,支持仿真调试部件(Emulation Test,ET)对流水线
的控制功能,并对关键功能点进行系统级验证;
4) 设计并实现指令流控部件功能,介绍其总体设计结构及 X-DSP 的分支延迟
槽特征,支持仿真调试部件通过读写访问译码、执行三站以实现软件断点的功能,
并对关键功能点进行系统级验证;
5) 通过分析传统 FPGA 验证方案的不足,提出对 X-DSP 流水线功能的验证
与调试不再采用 FPGA 原型验证,探索并尝试新方法——基于 PLI 技术新型软硬
件协同的调试/验证方案,通过 PLI 接口实现 C 编程与 Veirlog 的嵌套调用、采用
数据共享机制实现不同进程间的通信。在设计并实现该验证模型的基础上,对流
水线上关键的调试功能进行验证实践。

1.4 文章的组织结构

本文以 X-DSP 为背景,主要实现指令流水线中指令派发部件、流控部件的逻


辑功能,并完成新型软硬件协同的调试/验证环境,从而实现对流水线功能的调试
验证。全文共分为六章。
第一章 绪论。介绍课题研究背景及主流高性能 DSP 的流水线技术及其优化
技术,并指出本课题的项目背景与研究意义以及本文的工作内容。
第二章 X-DSP 处理器体系结构分析。介绍 X-DSP 的内核结构特征,详细分
析指令集、指令流水线结构,并在此基础上,提出流水线部件的设计需求。
第三章 指令派发部件的设计实现与功能验证。对指令派发部件进行概要分
析,介绍总体设计结构、对仿真调试的支持,并完成功能验证、覆盖率分析与逻
辑综合。
第四章 指令流控部件的设计实现与功能验证。对指令流控部件进行概要分
析,介绍总体设计结构,分析流控部件对流水线的控制作用以及 X-DSP 的分支延
迟槽结构,并完成功能验证、覆盖率分析与逻辑综合。
第五章 软硬件协同验证模型的设计与实现。为改善传统 FPGA 原型验证的不
足,探索尝试基于 PLI 技术的新型调试/验证方案,设计并实现对流水线的调试/验
证功能。
第六章 结束语。对本课题研究内容的总结与工作展望。
最后一部分是致谢、参考文献及作者在学期间取得的学术成果。
第 9 页
国防科学技术大学研究生院工程硕士学位论文

第二章 X-DSP 处理器体系结构分析

X-DSP 处理器是多核高性能 DSP,整体由 6 个 DSP 超节点、1 个 CPU 节点、


1 个 IO 节点、全局 Cache、核间同步、5 个 MCU 及 IO 设备构成。其中,每个超
节点包含:两个 Matrix 2(单核名称,以下均如此简称)内核;全局 Cache(GC)
采用分布式 Cache,由多个子体(SubGC)构成,每两个 SubGC 连接一个 MCU;
核间同步采用分布式组织,由多个子体构成。本章主要介绍 X-DSP 内核 Matrix 2
结构、指令集格式及其指令流水线特征。

2.1 X-DSP 单核 Matrix 2 体系结构

X-DSP 处理器,每个 DSP 超节点包括 2 个 Matrix 2 内核,如图 2.1 所示,是


X-DSP 的单核 Matrix 2 整体结构。
指令派发(DP)

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

图 2.1 X-DSP 内核 Matrix 2 总体结构


Matrix 2 包含片内一级程序 Cache(L1P)、取指部件(Fetch)、指令派发部
件(DP)、标量处理单元(SPU)、向量处理单元(VPU)、标量访存单元(SM)、
向量访存单元(AM)、标/向量寄存器文件、DMA、仿真/调试部件(ET)及众多
外设资源。
对外,内核 L1P、L1D 及 DMA 向外发出数据读写请求、外设配置总线控制器
向外部发出配置请求,其中 L1P 和 L1D 请求在核内首先进行仲裁选择。ET 可接
受来自外部(JTAG 或 PCIE)的调试请求,并驱动 DMA 和外设配置总线控制器
分别进行数据和配置访问。
对内,取指派发部件可以同时向标量、向量单元派发指令;标量单元负责串
行任务的处理、对向量单元执行的控制,向量单元负责处理密集的并行任务;向

第 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 支持一
维、二维传输及矩阵转置传输。

2.2 X-DSP 指令集

2.2.1 X-DSP 指令基本格式

X-DSP 指令集是基于 VLIW 体系结构的可变长指令集,,支持 40/80 位标/向


量指令混合并行发射,而不需要指令集的模式切换。如图 2.2,是 X-DSP 指令基本
格式。
39 36 3 2 1 0
Reg Z xxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx V P
L
39 36 35 29 5 3 2 1 0
Reg Z Dst Imm24 U 0 1 V P
Imm40

图 2.2 X-DSP 基本指令格式


如上图所示,X-DSP 指令集的特点主要包括以下几点:
1) 最大支持 11 发射 VLIW 指令(标量 5 条+向量 6 条);
2) 支持 64 个 64 位寄存器(7 位寄存器编码,保留一位作为扩展);
3) 除几种特殊指令:长立即数 MOV 指令、向量访存指令、SNOP 指令、SWAIT
指令以及中断/异常返回指令 SIRET/SERET,其它指令均支持条件执行。
4) Load/Store 指令中基址寄存器和偏移寄存器均采用专用寄存器:基址寄存
器内容以字节为单位;偏移寄存器和常数偏移单位均和访存粒度相同。若出现不
对齐的 Load/Store 访问,硬件自动完成对齐,并报非对齐异常。
5) 派发和条件执行相关的各指令域编码说明,如表 2.1 所示:

第 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 执行包与取指包结构分析

处理器每次从外存中取出一个 512 位的取指包(简称 FP)。一组连续的可并


行执行的指令组成一个执行包(简称 EP)。一个取指包可包含多个执行包,两个
执行包之间无气泡,执行包边界由指令的并行位决定。一个执行包可同时包含多
条满足条件的 40b/80b 指令,指令长度由长度位确定。执行包基本格式如图 2.3 所
示:
L V 0 L V P …… L V P

指令1 指令2 指令n

图 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 执行包在取指包中的位置关系

2.3 X-DSP 指令流水线

计算机中任何指令的处理都可以分为若干个子操作,每个子操作由不同的单
元来完成,对每个单元来说,每个周期都可进入一条新的指令,这样在同一时间

第 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

图 2.6 X-DSP 内核流水线结构示意图


下面,按照 X-DSP 指令流水线的四个阶段(取指、派发、译码、执行),分
别介绍其时序特征与主要功能:
1) 取指:分三站:PG、PW、IF。在流水线中的功能:在 PG 站产生下一个
将要进入流水线的取指包地址,包括顺序地址、分支地址、中断地址、异常地址,
并发送程序地址请求到一级指令 Cache(L1P);PW 站访问程序存储空间、等待
L1P 返回 512b 指令包;IF 站将相应的取指包送到指令派发部件。其三站流水线结
构如图 2.7 所示。
分 中 异
支 断 常
地 地 地 地址产生站读tag体的有效 将从tag中读取的地址与请 如果不命中,则通过该
址 址 址 信号和偏移 求地址进行比较 信号暂停取指流水线

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 页
国防科学技术大学研究生院工程硕士学位论文

个取指包大小);在 DP 站,分析位于站内双缓冲头部的 480 位指令派发窗中的指


令类型,在控制信号(DP_Stall、ET_Stall、AM_Bsy、SM_Bsy、BR_SNOP)的作用
下将指令派发到各功能部件的译码站。其两站流水线结构如图 2.8 所示。

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

N+2 PG PW IF FD DP DC1 DC2 E1 E2 …… E7

N+3 PG PW IF FD DP DC1 DC2 E1 E2 …… E7


… …

… …

N+10 PG PW IF FD DP DC1 DC2 E1 E2 …


N+11 PG PW IF FD DP DC1 DC2 E1

Pipeline Full

图 2.9 X-DSP 内核指令流水线时空图


第 16 页
国防科学技术大学研究生院工程硕士学位论文

指令流水线是微处理器内核的重要概念,本文在介绍了 X-DSP 的内核 Matrix 2


体系结构、指令集、指令流水线之后,以基本流水线为基础,重点介绍工作在流
水线派发阶段、译码/执行阶段的两个功能部件的设计实现,即指令派发部件与指
令流控部件。此外,内核流水线的另一个重要功能是支持仿真调试部件(ET)对
内核的调试作用,体现在 ET 的三大功能[43]:流水线控制、资源访问和性能统计,
因此,在流水线上的各个部件还应该支持 ET 对流水线的访问。这方面,会在后续
第三、四、五章中具体说明。

2.4 指令流水线部件设计的需求分析

在明确 X-DSP 处理器的指令流水线结构之后,本文重点在于指令流水线部件


的设计实现上,即指令派发部件和指令流控部件,它们分处于流水线的派发阶段
与译码/执行阶段。流水线上的控制信号交错复杂,控制整个指令流水线的行为与
状态,从而影响功能单元的指令执行。因此,明确指令派发部件与指令流控部件
的设计目标与需求是进一步开展工作的基础,主要包括以下几个方面:
1) 实现指令派发部件向各个执行单元译码站并行发射指令的功能,其中,执
行单元包括:SMAC1(标量乘加单元 1)、SMAC2(标量乘加单元 2)、SIEU(标
量定点执行单元)、SLS(标量访存单元)、SBR(指令流控单元)、VMAC1(向
量乘加单元 1)、VMAC2(向量乘加单元 2)、VMAC3(向量乘加单元 3)、VIEU
(向量定点执行单元)、VLS1(向量访存单元 1)、VLS2(向量访存单元 2),
共十一个执行单元;
2) 指令派发部件需支持 40/80 位指令、标/向量指令的混合并行发射,最大并
行度为 11 条指令,这些指令需满足标准取指包/执行包基本格式(见 2.2.2 小结);
3) 实现 VLIW 结构指令集下跨取指包边界的指令执行包并行派发机制;
4) 特殊情况下,指令派发部件支持向一级指令 cache(L1P)的旁路取指请求,
从而绕过取指(Fetch),直接从 L1P 获得所需要的指令包,以提高取指效率;
5) 指令派发部件支持仿真调试部件对内核的调试功能,主要体现在对指令派
发部件所处流水线(派发一站、派发二站)上的读写访问;
6) 实现指令流控单元对指令流的控制作用,主要体现在对分支指令、中断/
异常程序目标地址的响应作用;
7) 判定指令流控部件中非固定周期空转指令,从而实现其对流水线空转的控
制作用;
8) 指令流控部件支持仿真调试部件对内核的调试功能,主要体现在其所在流
水线(译码一站、译码二站、执行一站)上的读写访问功能。
针对上述设计需求,指令派发/流控与其它部件主要的数据通信参数如下:
第 17 页
国防科学技术大学研究生院工程硕士学位论文

1) 指令派发部件与取指部件的指令包数据带宽:512bit/clock;
2) 指令派发部件与 L1P 指令包数据带宽:512bit/clock;
3) 指令派发部件与处理 80 位指令的执行单元,发射指令的数据带宽:
78bit/clock;
4) 指令派发部件与处理 40 位指令的执行单元,发射指令的数据带宽:
38bit/clock;
5) 指令流控部件接受来自派发部件的分支指令,数据带宽为:38bit/clock。

2.5 本章小结

本章首先介绍了 X-DSP 处理器的单核 Matrix 2 结构,并对其主要的功能部件


进行了简要说明;详细分析了指令集特征与执行包和取指包结构特点,说明 X-DSP
所允许的执行包存在形式;分析 X-DSP 的指令流水线,并对其流水过程做详细说
明;分析各个流水段的功能部件,并示意 Pipeline Full 的流水线状态;提出指令派
发、流控部件对 ET 仿真调试功能的支持;针对 X-DSP 流水线特征,分析本文所
设计的流水线部件——指令派发部件、流控部件的设计需求与数据通信参数。

第 18 页
国防科学技术大学研究生院工程硕士学位论文

第三章 指令派发部件的设计实现与功能验证

X-DSP 的指令派发分两站流水:第一站 FD、第二站 DP。主要完成的功能是,


接收来自取指部件(IF)或者一级指令 Cache(L1P)的 512 位取指包,并在相应
偏移参数的控制下,结合各个指令的并行位(P 位)、长度位(L 位)以及指令类
型域(Type 域),将满足并行执行要求的一组指令(一个执行包),分别截取每
条的低两位(并行位和标/向量位)后,派发到相应功能部件的指令译码站。

3.1 指令派发部件概要分析

3.1.1 指令派发功能概述

X-DSP 中的指令派发部件包含两站流水线,FD 和 DP。FD 站主要负责与取指


部件和 L1P 进行通信,完成取指包的整合;DP 站主要负责将 FD 站整合后的指令
派发到各功能单元,进行译码执行。如图 3.1 所示,是指令派发部件在 X-DSP 单
核中与其他部件的关系。
512bit
取指 一级程序Cache 向量运算单元(VPE0)
(Fetch) (L1P) ……
512bit V
512bit P
4
U
向量运算单元(VPE15)
Dispatch
顶 层
指令流控单元(SBR)
S
IF_DP模块 DP模块 标量运算单元(SPE) P
5 U
标量访存单元(SLS)
480bit 选择网络
……

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

Reg Z xxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx Type P

图 3.2 规整后的 40 位指令编码


表 3.1 40 位指令 Type 位(Inst[7:1])汇总
功能单元 Type 编码 功能单元 Type 编码
xx0_0000 xx0_0001
SIEU x00_0110 VIEU x00_0111
000_1110 000_1111
xx0_1000 xx0_1001
SMAC1 x01_0110 VMAC1 x01_0111
标 001_1110 向 001_1111
xx1_0000 xx1_0001
量 量
SMAC2 x10_0110 VMAC2 x10_0111
部 部
010_1110 010_1111
件 件
xx1_1001
/ / VMAC3 x11_0111
011_1111
xxx_0100 xx0_0101
SLS VLS0
100_1110 100_1111
xxx_1100 xx1_0101
SBR VLS1
101_1110 101_1111
注:/ 表示没有相应的功能部件

第 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

图 3.3 规整后的 80 位指令编码


表 3.2 80 位指令 Type 位(Inst[5:1])汇总
功能单元 Type 编码 功能单元 Type 编码

标 SIEU 0_0010 向 VIEU 0_0011


SMAC1 0_1010 VMAC1 0_1011
量 量
SMAC2 1_0010 VMAC2 1_0011
部 部
/ / VMAC3 1_1011
件 件
SBR ----- VLS0 -----
SLS ----- VLS1 -----
注:/ 表示没有相应的功能部件 ,-----表示该部件没有此类指令
由表 3.1、3.2 中可以看出,Matrix 2 内核包括以下 11 个功能单元:一个 SIUE
(标量定点单元)、两个同构的 SMAC(标量乘加单元)、一个 SBR(分支指令
执行单元)部件、一个 SLS(标量访存指令)以及一个 VIUE(向量定点单元)、
三个同构的 VMAC(向量乘加单元)、两个同构的 VLS(向量访存指令)。而每
个功能部件都由不同的功能单元编码所区别。
此外,为降低指令派发难度、提高派发效率,汇编器也会提供诸多支持。X-DSP
的配套汇编器规范了一个执行包的指令排列格式:同一个执行包中可以包含满足
要求的标/向量指令、40/80 位指令的任意组合(2.2.2 小结中的执行包格式);其
中,如果存在 80 位,则必位于执行包头部,40 位指令在其后,全 40 位执行包指
令与汇编代码指令位置一致。如表 3.3,列举了一段并行指令汇编代码。
表 3.3 并行指令汇编代码示例
汇编代码 1 指令长度 汇编代码 2 指令长度
SADD 1,R5,R5 40bit VMOVI 1,VR0 40bit
| SADD.M1 1,R6,R6 40bit | VMOVI.M1 1,VR1 80bit
| SADD.M2 R5, R6,R7 40bit | VMOVI.M2 1,VR2 80bit
| VADD 1,VR0,VR0 40bit | VLDW *+AR1[0] ,VR3 40bit
SMOVI 1, R0 40bit | VLDW *+AR1[0] ,VR4 40bit
| VMOVI.M1 1,VR6 80bit | SLDW *+AR8[0] ,R4 40bit
| VSUB VR5,VR6,VR7 40bit | SADD 1,R5,R5 40bit
| SLDW *+AR8[0],R0 40bit | SADD.M1 1,R6,R6 40bit
| VMOVI.M2 1,VR5 80bit | SSUB.M2 1,R7,R7 40bit
注:“|”表示本条指令与上一条指令并行
表 3.3 所列举的并行指令汇编代码的两个例子,符合执行包基本格式。其中,
标/向量 MAC 单元长立即数 MOVI 指令为 80 位指令;标/向量 IEU 单元 MOVI 指
令视立即数大小而定,若为 64 位立即数则该指令位 80 位指令,否则为 40 位指令;
第 21 页
国防科学技术大学研究生院工程硕士学位论文

除此之外,均为 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 总体设计结构

X-DSP 指令派发部件设计,可以分为 3 个阶段:第一,在 FD 站内,形成两倍


取指包大小的派发缓冲队列;第二,在 DP 站内,指令并行信息的分析和候选指令
的选择;第三最终判断选择出来的指令是否可以被派发。
X-DSP 支持指令的跨边界派发,这就需要 DP 内部存在可以容纳连续的两个取
指包的缓冲队列(1024 位)。如图 3.5 所示,是指令派发部件的两站流水线结构。

图 3.5 指令派发总体设计结构

第 22 页
国防科学技术大学研究生院工程硕士学位论文

如上图所示,首先,来自 IF 的 512 位取指包,派发第一站(FD),需根据旁


路、分支、中断等控制信号判断是否可以接收该取指包,如果可以接收则根据偏
移参数及内部缓冲,将指令包进行精确移位拼接后,存放在站内双缓冲中;然后
根据指令派发窗(站内缓冲头部 480 位指令序列)指令的并行信息及 Type 位编码,
识别下一拍允许派发的指令执行包。在派发第二站(DP)中,11 个功能单元判断
模块,分别从指令派发窗中选择出自己的指令,然后在指令选择屏蔽信息和控制
信号的作用下,将指令派发窗中头部的可执行包派发到各功能部件译码站。除此
之外,指令派发部件还支持 ET(调试仿真部件)的读写访问,配合其实现 ET 对
流水线控制作用。

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 页
国防科学技术大学研究生院工程硕士学位论文

示位于指令派发窗头部以 80 位对齐的 5 个位置的指令码是否是有效的 80 位指令,


inst40[12:0]表示指令派发窗中以 40 位对齐的 13 个位置是否是有效的 40 位指令。
40bits
3 2 1 0
0 word0/hword0
1 hword1
2 word1/hword2
3 hword3
4 word2/hword4
5 hword5
6 word3/hword6
7 hword7
8 word4/hword8
9 hword9
10 hword10
11 hword11
12 hword12

图 3.12 指令派发窗中 40/80bit 指令的位置关系


如图,为一个指令派发窗的基本格式。指令以 40 位对齐,低 2、3 位为长度
判断位,0 位为并行位。
 Inst80[4:0]的生成比较简单,只要分别对位于 0,2,4,6,8 位置的低 0
位及低 2、3 位进行判断即可。逻辑表达式归纳为如下:
inst80[0] = (L[1:0] == 2'b01)? 1'b1:1'b0;
Inst80[n] = ((L[4n+1:4n] == 2’b01) ? P[2n-2]: 1'b0) & inst80[n-1]; n>0
 Inst40[13:0]的生成逻辑与之类似,所不同的是前 8 个位置的偶数部分,可
能是 40 位指令也还可能是 80 位指令的前 40 位。因此,前 8 个位置的偶数部分需
排除 80 位指令的影响,奇数部分以及后 5 个位置必定是 40 位指令。其逻辑表达
式归纳如下:
inst40[0] = (L[1:0] == 2'b01)? 1'b0:1'b1;
inst40[2n+1] = P[2n] & inst40[2n]; n>0
inst40[2n] = ~(L[4n+1:4n] ) & (P[2n-1] & inst40[2n-1] | P[2n] & inst40[2n-2]);
n>1
此外,还需要注意的一点是,如图 3.11 所示,指令派发窗中(480 位),真
正需要的位置长度是 word0~word3 和 hword0~hword11, 而在图 3.12 中,不论是
80 位指令还是 40 位指令都比图 3.11 中多一条指令的位置,也就是增加了一级判
断(图 3.12 中的斜线部分),这是因为检测到当指令派发窗中最后一条指令仍然
和下一条指令并行时,需要报告异常。最后,通过上述的逻辑,我们得到了两个
数组 Inst80[4]和 Inst40[12],分别指示了 80 位指令和 40 位指令所处的位置。

第 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 页
国防科学技术大学研究生院工程硕士学位论文

如图 3.14 所示,从该图中我们可以看出,图 3.13 中被 SMAC1 单元选择出来


的错误候选指令在派发时都会被屏蔽掉,这样,SMAC1 部件就不会在当拍派发该
候选指令。
屏蔽表
Inst40[0]=0 1

}
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 写 FD 站的真实数据实则是断点标识位及其所在的 64 位数据。


如图 3.16 所示,要想将 ET 的 64 位写数据恰好写入 DP 双缓冲中的正确位置,
需经过以下三个步骤的移位。
000 ·
···
·· 000 ET_DateCPU

左移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

cache1 64'b0 cache0

(B)缓冲队列掩码的生成

000 ·
···
·· 000 ET_DateCPU 000 ·
···
·· 000

}位或
cache1 64'b0 cache0

cache1 ET_DateCPU 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.5 所示,列举了指令派发部件验证的一级功能点、


二级功能点。
表 3.5 指令派发部件功能验证点
序号 一级功能点描述 二级功能点描述
指令串行派发到各功能部 11 个功能部件接受来自指令派发部件的待执行
1
件 指令的正确性
40 位指令部分、全并行
2 指令派发的并行性 80 位指令部分、全并行
40、80 位指令混合部分、全并行
标量指令部分、全并行
3 标向量指令的派发 向量指令部分、全并行
标向量指令混合部分、全并行
跨取值包边界的执行包派 单条指令组成的执行包跨取指包边界
4
发 多条并行指令组成的执行包跨取指包边界
循环控制:分支目标指令也是分支指令
循环控制:分支目标地址在该指令的分支延迟槽
内,且分支目标地址中包含分支指令
分支延迟槽: 分支延迟槽中有多周期 NOP 指令
5 包含分支指令的派发
分支延迟槽: 分支延迟槽中有 SWAIT
分支延迟槽:6 个分支延迟槽中填满分支指令
(即连续的 7 条分支指令)
分支延迟槽:模拟软件流水
包含分支指令的跨边界执 分支目标执行包跨取指包边界
6
行包的派发 L1P 旁路取指
连续 SNOP n 指令不与其他指令并行派发
包含多周期 NOP 指令执
7 连续 SNOP n 与其他指令并行派发
行包的派发
SNOP n 指令在取指包中的不同位置
8 异常报告 指令编码错误造成的异常
IF_Flush、 IH_Flush 对指令派发的控制作用
各控制信号对派发部件的
9 AM_Bsy、SM_Bsy 对指令派发的控制作用
影响
SNOP 指令对指令派发的控制作用
10 与 ET 相关 指令派发两站内对软、硬件断点的相关操作

3.4.2 验证结果与分析

针对表 3.5 所示基本验证功能点,部分关键逻辑验证结果与分析如下:


1) L1P 旁路取指
如表 3.6,列举了一段汇编源代码(左侧)及其反汇编程序(右侧)。
第 33 页
国防科学技术大学研究生院工程硕士学位论文

表 3.6 L1P 旁路取指的验证激励


汇编代码 汇编代码
SBR loop0 4b: 1000000a18 sbr Address:5f <loop0>
SBR loop1 50: 1000004398 sbr Address:d7 <loop1>
SNOP 5 55: 10050080bc snop 5
SNOP 1 5a: 10010080bc snop 1
loop0 : 0000005f <loop0>:
SMOVI 1, R0 5f: 00000000011080000065 smovi.M2 0x1000001,R2
| SMOV.M1 R0, R1 69: 1000000041 | smovi24.L 0x1,R0
| SMOVI.M2 1, R2 6e: 104001c03d | smov.M1 R0,R1
| SSTW R1,*AR8++ 73: 106001669d | sstw R1,*AR8++[1]
| VMOVI 1, VR3 78: 10c0000043 | vmovi24.L 0x1,VR3
| VMOV.M1 VR3, VR4 7d: 11000dc03f | vmov.M1 VR3,VR4
| VMOV.M2 VR4, VR5 82: 114011c05f | vmov.M2 VR4,VR5
| VMOV.M3 VR5, VR6 87: 118015c07f | vmov.M3 VR5,VR6
|VSTW VR1,*AR1++ 8c: 1044016a9f | vstw VR1,*AR1++[1]
|VSTW VR2,*AR2++ 91: 1088016abf | vstw VR2,*AR2++[1]
| SNOP 1 96: 10010080bc | snop 1
如表 3.6 所示的汇编代码,在两个连续的分支指令之后,第一个分支目标
(loop0)地址是一个跨边界的并行执行包,这样就会导致,派发部件无法接收第
二个到达的分支目标,而是通过 L1P 旁路请求 loop 所在取指包地址顺序自加 0x40
的取指包。仿真结果如图 3.19 所示。

图 3.19 L1P 旁路取指的验证波形


2) 软件断点的设置
指令派发部件支持 ET 断点功能,在 NC_Sim 模拟器上验证相关功能点,是与
ET 一起配合进行的,调试命令从 ET 的 JTAG 标准输入端口 TDI 输入,需要提供
串行输入的相关命令的自定义任务 task。如表 3.7,列举了一段反汇编程序(上)
及外部输入的 task 调试命令(下)。

第 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 覆盖率分析

X-DSP 的覆盖率分析中,本文采用的是 Cadence 公司的 ICC 工具进行覆盖率


验证。在这种基于模拟的验证中,为了尽可能的覆盖到更多的功能点,往往需要
手工编写大量的测试激励。如图 3.21 所示,是指令派发部件的覆盖率验证结果。

图 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 本章小结

本章主要介绍 X-DSP 中指令派发部件的详细设计思路与功能验证,主要包括


以下几点:指令派发部件总体结构,包括指令派发窗的形成机制、候选指令的选
择策略、指令并行发射的结构分析以及指令派发的最终判定,从而高效完成一个
周期内指令级并行的派发任务;详细分析派发部件对仿真调试部件(ET)的硬件
支持;在 X-DSP 的系统级模拟环境中,针对派发部件的主要功能验证点,模拟验
证并分析结果;最后,完成在 ICC 工具下的覆盖率分析以及 DC 综合工具下的逻
辑综合;此外,本章在基于模拟的验证环境中,提出指令派发部件中与 ET 相关的
功能验证极为不便,第五章中本文提出更优的解决方案。

第 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 分支指令编码

在 2.2 小节中已经分析了 X-DSP 处理器的一般指令格式,它是包含 40 位和 80


位指令的可变长指令集。在分支部件中,没有 80 位指令,所有指令均为 40 位,
可细分为两种指令格式:一种是 40 位寄存器(或短立即数)类型指令,如图 4.2
所示;另一种是 40 位长立即数类型指令,如图 4.3 所示。
39 36 35 29 23 17 7 4 3 2 1 0

Reg Z 00_0000 Src1 00_0000 OP 1 0 1 1 1 1 V P

图 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 页
国防科学技术大学研究生院工程硕士学位论文

不会再被执行。这就是 X-DSP 体系结构中深度为六的分支延迟槽,这部分将在 4.2.2


小节中做详细分析。

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 指令流控部件总体设计结构
指令流控单元,指令数量少、逻辑功能简单,其重点在于配合取指、指令派
发、中断异常部件以实现对指令流的控制作用。

4.2.2 X-DSP 的分支延迟槽

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

Branch PG PW IF FD DP DC1 DC2 E1


Target

图 4.5 X-DSP 分支延迟槽示意图


如上图所示,分支指令的执行由分支部件在流水线的执行(E1)站完成,当
拍产生分支目标地址,直接进入取指流水线的 PG 站,此时,分支目标地址所对应
的目标执行包,还需要在流水线中经过 PW、IF、FD、DP、DC1、DC2 六拍才能
进入执行站,执行指令。这样,从分支地址的产生到分支目标指令的执行,还有
六拍的流水时间差,因此我们说分支延迟槽的深度为六。
以表 4.2 中的汇编程序 2 为例,其包含分支的指令流水线全过程如图 4.6 所示。
CLK
PG PW IF FD DP DC1 DC1 E1

n SADD SLDW SNOP VLDW VMOV.M2 VMOV.M1 VMOVI SBR

n+1 SADD SLDW SNOP VLDW VMOV.M2 VMOV.M1 VMOVI

n+2 SADD SLDW SNOP VLDW VMOV.M2 VMOV.M1

n+3 SADD SLDW SNOP VLDW VMOV.M2 指


n+4 SADD SLDW SNOP VLDW 令

n+5 SADD SLDW SNOP

n+6 SADD SLDW

n+7 SADD

图 4.6 X-DSP 分支延迟槽的指令流图


如上图所示,在 CLK= n 时刻在 E1 执行 SBR 指令,当拍将产生的分支目标地
址送入 PG 站,如表 4.2 中所列举的汇编程序 2 所示,分支目标地址是一条加法指
令 SADD 1,R5,R5。此后,需经过六个时钟周期(此处不考虑有其它控制信号的阻
塞作用),依次执行 VMOVI、VMOV.M1、VMOV.M2、VLDW、SNOP、SLDW
后,该加法指令才能流入执行站。

第 42 页
国防科学技术大学研究生院工程硕士学位论文

因此,在编写汇编验证激励的时,可以充分利用这六拍的分支延迟,在分支
延迟槽中插入六条有效指令,提高分支延迟槽利用率,同时也提升程序的执行效
率。此外,上层程序也可以依赖编译器来充分利用分支延迟槽。

4.3 对仿真调试的支持

在 X-DSP 体系结构中,指令流控部件在流水线中处于 DC1、DC2、E1 站,因


此,ET 对流水线的访问必然需要流控单元给予硬件支持。如表 4.3 所示,是指令
流控部件与调试仿真部件的接口列表。
表 4.3 BR 与 ET 的接口列表
接口信号 方向 位宽(bit) 意义
ET_DataCPU Input 64’b ET 对派发站的写数据
ET_WriteDC2 Input 1’b ET 写 DC2 站有效信号
ET_WriteE1 Input 1’b ET 写 E1 站有效信号
PC_DC1_ET Output 38’b 给 ET 的 DC1 站首地址
PC_DC2_ET Output 38’b 给 ET 的 DC2 站首地址
PC_E1_ET Output 38’b 给 ET 的 E1 站首地址
3.3 小节分析了 ET 部件对于流水线各站读写操作的基本含义,本小节着重于
指令流控单元的对 ET 的读写支持。
指令流控部件支持 ET 读操作,主要体现在,ET 获取 DC1、DC2、E1 站的指
令地址,如表 4.3 中 PC_DC1_ET、PC_DC2_ET、PC_E1_ET,信号直连,直接扇
出给 ET,通信协议比较简单。
指令流控部件支持 ET 写操作,主要体现在对软件断点指令的设置、取消、恢
复与触发,可分为以下三个方面;
1) DC1 站:软件断点指令如果在 DC1 站,设置与取消功能是在派发部件内
完成的,将要写入的 ET_DataCPU[39:36](若是设置,则写入全零;若是取消,则
写入正确指令高四位),直接写入派发部件候选指令的高四位,在上升沿到来时,
与被派发的指令一起站出。
2) DC2 站:软件断点指令如果在 DC2 站,设置时对该指令的断点指令标志
位不做改写,只上层软件控制记录该指令,在下一次程序运行时,只走单步操作;
由于 DC2 站断点指令没有被改写过,因此在取消时,也只上层软件控制清除标记,
下一次程序运行时,就可以顺利执行下去。除此之外,还有一种特殊情况:假设
较早时间之前设置两个连续的软件断点,当程序运行到第一个断点指令停下后,
此时如果要取消第二个断点指令,就必须对其断点标志(指令高四位)位进行写
回,因为此时该指令已被改写为断点指令。
3) 此外,对于断点指令的触发,是将在派发部件内检测到的断点指令有效信
第 43 页
国防科学技术大学研究生院工程硕士学位论文

号,连续锁存两拍,触发 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 验证结果与分析

针对表 4.4 所示基本验证功能点,部分关键逻辑验证结果与分析如下:


1) 多周期空转 NOP 指令被分支到达信号打断
如表 4.5 所示,列举了一段汇编源代码(左侧)及其反汇编程序(右侧)。
表 4.5 分支到达打断阻塞流水线信号的验证激励
汇编代码 汇编代码
SBR loop0 46: 1000000518 sbr Address:50 <loop0>
SNOP 8 4b: 10080080bc snop 8
Loop0: 00000050 <loop0>:
SMOVI 1, R0 50: 00000000001080000065 smovi.M2 0x1,R2
| SMOV.M1 R0, R1 5a: 1000000041 | smovi24.L 0x1,R0
| SMOVI.M2 1, R2 5f: 104001c03c | smov.M1 R0,R1
如图 4.7 所示,是表 4.4 中汇编代码的仿真结果,在 DP_PC=38’h20_00000050
时,前一条 SNOP 8 指令没有完全执行完,就被分支到达信号 DP_BranchArrival
在 BR_SNOP 信号有效 4 拍后打断。

图 4.7 NOP 被分支到达打断的验证波形


2) 软件断点的恢复
指令流控部件支持 ET 断点功能,在 NC_Sim 模拟器上验证相关 ET 的功能,
验证方法与 3.4 小节相似。如表 4.6,列举了一段反汇编程序(上)及外部输入的
task 调试命令(下)。
表 4.6 软件断点恢复的验证激励
测试程序反汇编代码:
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]
c3: 1088016a9e vstw VR2,*AR2++[1]

第 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 覆盖率分析

在 X-DSP 指令流控部件的覆盖率分析中,本文采用的是 Cadence 公司的 ICC


工具进行覆盖率验证。通过手工编写大量的测试激励,指令流控部件的覆盖率验
证结果如图 4.9 所示。

图 4.9 指令流控部件的覆盖率
由上图可以看出,总体模块 BR 只是流控部件 BR_DC、BR_E1 的实例化顶层
第 46 页
国防科学技术大学研究生院工程硕士学位论文

模块,没有逻辑表达,因此图中 block 与 expression 覆盖率不显示结果。BR 子模


块 BR_DC 和 BR_E1 的 block 覆盖率分别为 98%和 100%,expression 覆盖率分别
为 91%和 95%。toggle 覆盖率总体达到 80%,通常情况下,对不做严格的要求。
覆盖率分析的本质原因大致相同,结合 3.4 小结对指令派发部件的覆盖率分析,对
图 4.9 的覆盖率只做简要分析:语句本身存在的一定相关性,例如:case 语句中列
举完全条件,因此不会覆盖到 default 语句,以及 3.4 小结中的 if…else…语句的特
殊情况[45]。

4.5 逻辑综合

X-DSP 指令流控部件在 Design Compiler(DC)工具下进行综合,综合环境与


3.5 小结指令派发部件的综合环境一致。40nm 工艺下,满足 1GH 主频,最终得到
的综合结果如表 4.7 所示。
表 4.7 指令流控部件综合结果
逻辑门数(个) 面积(um2) 静态功耗(nW) 动态功耗(nW)
BR 1275 2628 43217.674 638439.218
BR_DC 模块 148 695 8919.112 341295.589
BR_E1 模块 1124 1930 34189.401 297143.629
指令流控部件着重在于对指令流的控制功能,逻辑规模小,不再做过多分析。

4.6 本章小结

本章首先介绍了 X-DSP 指令流控部件在 Matrix 2 内核中与其它部件的位置关


系及其设计结构;完成分支指令编码、归纳指令类型,并举例说明分支指令在指
令流水线中的控制作用;分析指令流控部件在两级流水线中的逻辑功能、分支延
迟槽的重要概念及其在 X-DSP 指令流水线中的执行过程;详细分析流控单元对仿
真调试(ET)的硬件支持,指出其对指令流水线控制的重要性;在 X-DSP 的系统
级模拟环境中,针对指令流控部件的主要功能验证点,模拟验证并分析结果;最
后,完成在 ICC 工具下的覆盖率分析以及 DC 综合工具下的逻辑综合;此外,本
章在基于模拟的验证环境中,提出指令流控部件中与 ET 相关的功能验证极为不
便,本文第五章中将提出更优的解决方案。

第 47 页
国防科学技术大学研究生院工程硕士学位论文

第五章 软硬件协同验证模型的设计与实现

由第三章、第四章对指令派发/流控部件相关流水线调试功能的验证过程可以
看出,在系统级采用基于 NC_Sim 模拟的方法对流水线调试功能无法展开全面验
证。传统对流水线的调试一般采用 FPGA 原型验证[49],但该方法本身存在错误定
位困难、源代码修改不便、验证迭代周期长的缺点。此外,由于 X-DSP 处理器复
杂的芯片结构、庞大的硬件代码,通常的 FPGA 已经无法承载。因此,对于 X-DSP
指令流水线系统级的验证/调试,本文采用新型基于 PLI 接口技术的软硬件协同验
证方法。本章主要基于 PLI10.2 协议[50],采用 PLI 接口实现 C 语言与 Verilog 的嵌
套调用,通过数据共享机制实现不同进程间的通信,从而实现调试软件与硬件仿
真环境之间的数据交互,最终实现对 X-DSP 指令流水线的调试和 RTL 级代码的维
护。

5.1 传统系统级验证模型分析

5.1.1 基于 JTAG 的仿真调试方案

联合测试行为组织(Joint Test Action Group,JTAG)的边界扫描结构已经成


为集成电路设计中的固有部分,而通过 JTAG 的仿真/调试通道(Emulation Test,
ET)实现对芯片的片上调试是主流、传统的系统级调试方法[51]。
在 X-DSP 中的仿真/调试部件(简称 ET)的主要功能是接收 JTAG 或者 PCIE
的仿真请求,对 DSP 芯片进行调试。基本框架如图 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 页
国防科学技术大学研究生院工程硕士学位论文

如上图所示,X-DSP 中,有两种调试模式:JTAG 模式和 PCIE 模式,其工作


原理如下所述:
1) JTAG 调试模式(如图 5.1 白色箭头与阴影箭头所示通路)
ET 通过来自仿真器的串行输入,接收调试指令,经过串并转换、异步时钟处
理、指令译码等操作,对 DSP 进行相应的操作:包括对流水线的控制、寄存器及
存储体的访问以及对关键事件的统计。
2) PCIE 调试模式下(如图 5.1 黑色箭头与阴影箭头所示通路)
外部设备总线(PCIE)通过 DSP 节点访问控制器(DNAC)向 ET 发送调试
命令,更新内部 IR/DR,经过译码等操作,对 DSP 进行相应的操作:包括对流水
线的控制、寄存器及存储体的访问以及对关键事件的统计。
以上两种调试模式,不管是通过哪一种调试模式,都是通过 ET 部件、结合软
硬件环境,从而实现对芯片的仿真调试,包括资源访问、流水线控制和性能统计
三大功能[52]。
1) 资源访问:ET 对芯片的资源访问,包括对芯片整个存储空间的读写访问,
对体系结构寄存器的读写访问,以及对 memory-mapped 配置寄存器的访问,从而
用户可以通过软件的调试界面直接实现对寄存器、存储器的改写操作,大大增加
了用户的可操作性,也便于快速、准确的定位出错原因;
2) 流水线控制:ET 对流水线的基本控制作用,包括运行(run)、停止(stop)、
单步(step)、软件断点、硬件断点;以及多核的同步运行、同步停止、同步单步。
运行是指,用户在调试界面上执行运行操作(点击 run 按钮),调用底层对用执行
函数,发送运行命令的数据包,通过仿真器 JTAG 端口或者 PCIE 通路传送给片上
ET 部件,从而触发相应的硬件设计,实现流水线的运行状态,其它调试命令的过
程与此类似;
3) 性能统计:指 ET 部件硬件上支持统计一些用户可能关心的、可以表征程
序性能的关键事件或信号。X-DSP 芯片中支持 ET 统计的事件包括:分支命中次数、
有效执行包个数、中断有效次数、异常有效次数、L1D 读写命中次数、L1D 读写
失效次数、L1P 读命中次数、L1P 读失效次数、DP 发出的暂停信号的周期数、VM
发出的暂停信号的周期数、SM 发出的暂停信号的周期数、程序处于 NOP(空转)
状态的周期数;

5.1.2 FPGA 原型验证原理分析

从传统的验证方法学来看[53],基于模拟的验证方法仍然处于主流地位。如图
5.2 所示,是传统 FPGA 原型验证[55]原理图,FPGA 测试子板通过 JTAG 仿真器与
调试主机相连。调试芯片时,主机中调试软件调用底层软件驱动函数,向 JTAG

第 49 页
国防科学技术大学研究生院工程硕士学位论文

仿真器发送调试命令,仿真器通过标准 JTAG 接口与芯片进行通信。调试命令经


ET 对芯片各功能部件进行调试,若发现功能有误,需要通过逻辑推理,诊断错误
原因,回归模拟验证将问题重现,然后对设计代码进行修改,并经再次综合后将
其烧入 FPGA。如此重复迭代操作,直到验证结果全部正确[54]。

调试主机 JTAG仿真器 测试子板

调 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 新型系统级验证模型的需求分析

X-DSP 处理器庞大的硬件描述与复杂的逻辑结构,导致通常的 FPGA 已无法


承载,因此,该处理器系统级指令流水线验证/调试方案,FPGA 原型验证不再适
用,需要开发新型验证/调试模型。主要以克服以下几个问题为设计目标:
1) 改变现有 FPGA 无法容纳 X-DSP 庞大硬件描述的现状,采用 PLI 接口技
术与共享内存的机制实现不同进程之间的通信:用户调试界面与全芯片的模拟
NC_Sim 环境,从而实现对 X-DSP 系统级指令流水线的调试、仿真与验证功能;
2) 改善由 FPGA 原型验证所带来的调试限制:错误定位不便,需要在模拟环
境中问题重现才可以在 RTL 级进行修正,此外,还需要在硬件模拟环境与烧入
FPGA 之间反复回归验证。新型验证/调试模型,尝试将不可见的调试对象转化成
真实可见的 RTL 级硬件描述,从而在发现问题后可以直接在 RTL 级进行代码维护。

第 50 页
国防科学技术大学研究生院工程硕士学位论文

5.2.2 新型系统级验证模型的结构原理

基于 5.2.1 小节,针对新型系统级验证模型的需求分析,本文提出一种基于 PLI


(Programming Language Interface,编程语言接口)接口技术的新型系统级验证/
调试方案,通过进程间通信实现不同应用软件(进程)之间的交互, 一方面是便
于用户调试的集成开发环境(IDE),一方面是可以仿真全芯片硬件行为的模拟器。
这样,我们就可以通过在集成开发环境中发送调试命令,直接传输给全芯片中 ET
的入口,而不再通过仿真器的 USB 口进行转化。
在这新型系统级指令流水线验证/调试环境中,除了 PLI 接口技术以外,还需
要一定的软件方面的支持。这样才能实现:在调试界面(IDE)上直接调试 RTL
级硬件逻辑,在 NC-Verilog 中查看波形文件,以达到功能验证的目的。其实质上,
就是两个进程——调试界面与 NC_Sim 模拟器,通过 PLI 接口与数据共享机制实
现的进程间通信。其数据通路如图 5.3 所示。

C 集
语 成 .
言 开
底 发
层 .


动 境

NC_Sim模拟器
C
共享数据栈 语


PLI数据通路 动

图 5.3 基于 PLI 技术的新型软硬件协同验证原理图


由图 5.2 和图 5.3 可以直观的看出,两种验证模型的最大区别在于:前者需通
过仿真器接收来自调试主机的调试命令,通过 FPGA 实现功能验证;而后者的调
试命令可以直接通过 PLI 数据通道在两个进程之间传递。这样,在系统级验证/调
试流水线功能,其调试对象就从之前的 FPGA“黑盒子”转变为可见的 RTL 级代码,
将其内部设计展现在用户面前,便于纠错与修正,提升系统级流水线功能验证的
完备性和可靠性。

第 51 页
国防科学技术大学研究生院工程硕士学位论文

由此可见,在二者的对比下,本文提出的基于 PLI 技术的指令流水线调试方


案,同时也可用于全芯片的调试,具备了现代大规模处理器在流水线功能验证与
全芯片仿真调试方面的先进性和优越性。关于 PLI 接口技术的相关概念,将在下
一小节进行分析介绍。

5.2.3 PLI 接口技术简述

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 总体设计结构

对于 X-DSP 新型系统级的验证/调试模型,采用基于 PLI 接口技术的软硬件协


同验证。其设计原理图,如图 5.4 所示。
集成开发环境 IDE 中,调试界面封装了多个调试函数,包括针对特定目标系
统的调试信息。驱动程序的调试功能主要依靠与其相连的共享内存区,将解析数
据包经过 PLI 数据通道传送给芯片的调试仿真入口,标准串行输入形成 ET
(Emulation Test,仿真调试)TDI 端口的调试命令码,发送给内核处理器[54]。
第 52 页
国防科学技术大学研究生院工程硕士学位论文

集 成 开 发 环 境
(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 工作原理

如图 5.4 描述了基于 PLI 技术、通过共享内存连接集成开发环境(IDE)与 X-DSP


仿真测试平台的软硬件协同验证环境。其工作原理分别以指令流水线控制和读写
寄存器或存储空间两类命令举例说明。
 以指令流水线控制命令 stop 为例,其工作原理如下:
1) 用户点击 IDE 界面 stop 选项,调用底层软件驱动函数,将调试命令 stop
数据包写入共享内存 INPUTQUEUE 缓冲队列;

第 54 页
国防科学技术大学研究生院工程硕士学位论文

2) stop 命令数据包对另一进程(NC_Sim 模拟器)可见。因此,来自片外的


激励通过 PLI 接口,识别命令,输入模拟器;
3) 调用命令码相应的 task 任务,从 ET 的 TDI 端口串行输入,ET 模块根据
激励产生相应动作,并最终使芯片内部流水线暂停。
 以读寄存器命令 ReadReq 为例,其工作原理大致与流水线控制命令相同
数 据 传 输 过 程 如 下 : 将 读 寄 存 器 命 令 ReadReq 数 据 包 写 入 共 享 内 存
INPUTQUEUE 缓冲队列,经 PLI 接口生成 ET 的 TDI 串行输入端口传入内核,内
核响应查看寄存器访问命令,再将读结果从 TDO 串行端口输出,经共享内存区
OUTPUTQUEUE 队列缓冲,最终返回给驱动函数,显示在 IDE 图形界面上,供程
序员查看对照结果[54]。
除了以上两种调试命令外,集成开发环境对指令流水线的调试作用还包括复
位、单步、运行、强制运行、读/写存储空间等功能,通过这些驱动函数,配合 ET
便可控制流水线状态,对内核指令流水线进行调试/验证。而每一个调试界面的软
件驱动包(C 语言描述)都有一个与之对应的用户自定义任务 task(Verilog 语言
描述),其作用是将调试命令的数据包转化为 ET 部件 TDI 端口的串行输入码[54]。
从上述的总体结构与工作原理不难看出,PLI 接口新技术的应用可以显著提升
对指令流水线以及全芯片的仿真、测试效率。总而言之,该系统级软硬件协同的
验证方案,不但使全芯片源代码维护更加方便直观,更能快速定位出错位置,提
高验证效率,也使得全芯片指令流水线的 RTL 级验证更加完善。

5.3.3 数据共享机制

在本文为 X-DSP 指令流水线功能调试设计实现的基于 PLI 技术的新型软硬件


协同验证环境中,不同进程间的数据共享机制是通过共享内存来实现的。
数据共享栈是 Linux 平台共享内存的一片区域,是内核为了在多个进程间交换
信息而留出的一块内存区[61]。每个要访问该段内存的进程都可以把它映射到自己
的地址空间。如果一个进程更新了段中的数据,那么其他进程立即会看到更新。
数据共享栈包括两个共享缓冲队列,在共享内存区形成两个位宽、深度一致
的 FIFO,用以实现 X-DSP 的集成开发环境(IDE)与全芯片的模拟环境(NC_Sim)
不同进程间的数据通信,传递调试解析数据包。如图 5.5 所示,两个 FIFO,读写
分离,确保数据通信准确、高效:一个为输入队列 INPUTQUEUE,用以将 IDE 的
调试命令传送给模拟器(IDE 写,内核读);另一个为输出队列 OUTPUTQUEUE,
用以将模拟器执行完调试命令的返回值送回 IDE 界面(内核写,IDE 读)[54]。如
图 5.5 所示,是两进程之间的进行数据通信示意图。

第 55 页
国防科学技术大学研究生院工程硕士学位论文

共享内存

INPUTQUEUE
写 读
集 全
成 芯
开 片
发 模
环 拟
境 读 写 环

OUTPUTQUEUE

深度:32

图 5.5 共享数据交互示意图
理论上说,新型软硬件协同的验证环境下所采用的共享内存机制,其地位如
同 FPGA 原型验证中的 JTAG 仿真器,不同的是,我们将两个设备(调试主机与
被调试主板)之间不可见的数据通信“黑盒子”,转化成了两个软件(调试软件与
NC_Sim 仿真平台)之间数据结构可见的共享区域。

5.4 流水线功能的验证实践

本小节在设计实现的新型软硬件协同验证环境中,对 X-DSP 处理器的指令流


水线调试功能进行验证实践,同时也与第三章、第四章中验证 ET 相关调试功能进
行对比。主要体现在 ET 的三大功能:流水线控制、寄存器访问、性能统计(软件
断点的设置与取消单独列出),从而说明该新型软硬件协同验证的优越性。此外,
还需注意,X-DSP 是多核处理器,在用户的调试界面上可以通过选项选择对哪个
内核发送调试命令。

5.4.1 流水线控制功能

在图 5.3 所示的用户界面(集成开发环境 IDE)上,依次点击复位、单步、运


行 、 暂 停 按 钮 , 便 会 依 次 发 送 复 位 命 令 ( 78'h143f_ffffffff_ffffffff ,
78'h147f_ffffffff_ffffffff ) 、 单 步 命 令 ( 78'h093f_ffffffff_ffffffff , 20'h020ea ,
78'h083f_ffffffff_ffffffff ) 、 单 步 命 令 ( 78'h093f_ffffffff_ffffffff , 20'h020f2 ,
78'h083f_ffffffff_ffffffff ) 暂 停 命 令 ( 78'h093f_ffffffff_ffffffff , 20'h020a8 ,
78'h083f_ffffffff_ffffffff)给共享数据堆栈,再通过 PLI 接口允许模拟器接收共享数
据,从 ET 的 TDI 端口输入内核,触发硬件机制,实现对流水线的控制。模拟器监
测波形如图 5.6 所示。

第 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.3 相对应,


也与 5.4.1 小结描述的过程一致。所不同的是,当用户点击了调试界面上的寄存器
发送寄存器读命令(78’h3ff4_xxxxxxxx_xxxxxxxx),上层软件控制批量返回单核
内相应的全部寄存器的值。模拟器监测波形如图 5.7 所示。

图 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 页
国防科学技术大学研究生院工程硕士学位论文

如上图所示,在用户调试界面上,将 PC=38’h20_00000087 的地址设置为软件


断点,上层软件判断断点指令在流水线中的位置(此图表示断点指令在 PW 站,
ET_WritePW 有效),调用写内存函数将断点 010080bc00010080 写入流水线 PW
站,即可完成设置。取消时与该过程一致,所不同的是,上层软件需控制断点指
令的写回,当下一次继续运行程序时,程序就不会在便不会在该软件断点处停下。
综上所述,从所列举的四点指令流水线的验证过程可以看出,该新型软硬件
协同验证/调试环境——采用 PLI 接口技术使得 C 函数与 Verilog 嵌套调用、数据
共享机制实现不同进程间通信,在系统级验证指令流水线方面极大的改善了第三、
四章采用的模拟验证方法的不足,同时,也弥补了 X-DSP 无法使用 FPGA 原型验
证进行全芯片调试的现状。因此,该新型软硬件协同验证方案对 X-DSP 指令流水
线以及全芯片的验证/调试具有重大意义。

5.5 本章小结

本章首先介绍了传统基于标准 JTAG 协议对内核进行仿真调试的 FPGA 原型


验证方法,并指出内核仿真调试通道 ET 的主要功能;介绍 PLI 接口技术,及基于
该技术的新型软硬件协同验证方案,与 FPGA 原型验证进行对比,分析新型验证
环境的先进性;详细阐述了新型验证方案的设计思路与实现方法,并举例说明工
作原理;在此基础上,结合用户调试界面与 Linux 平台 NC_Sim 模拟器,在系统级
对指令流水线进行验证实践,最终达到预期效果。实践证明,该方案对 X-DSP 系
统级指令流水线以及 RTL 级全芯片的调试、验证及源代码维护具有重大意义。

第 59 页
国防科学技术大学研究生院工程硕士学位论文

第六章 结束语

6.1 本文总结

本人在三年的硕士学习时期,参与了 X-DSP 高性能 64 位浮点向量多核处理器


的设计、验证工作。在项目组的两年时间里,主要负责 X-DSP 指令派发部件、流
控部件的设计与验证,以及芯片系统级的仿真调试。
X-DSP 定位高频、高性能 DSP,注重内核体系结构与流水线技术的创新。因
此,为了更大限度的提升处理器性能、减少存储器阻塞,本文主要从对流水线技
术的探讨入手,最终完成对流水线部件——指令派发/指令流控部件的设计,并实
现新型系统级软硬件协同的调试/验证方案。
现代微处理器对性能与功耗的要求越来越高,从而对处理器的体系结构、指
令级并行的研究也逐步深入。本文,首先介绍了国内外微处理器内核流水线结构
及其优化技术的研究背景与现状,列举了国内外部分典型的高性能 DSP 研究成果,
体现了我国在处理器设计领域虽然起步晚、起点低,但是通过一代代科研工作者
的不懈努力,最终也取得可喜成绩。对于 X-DSP 的开发工作,熟练掌握内核(Matrix
2)体系结构特点与流水线特征,是整个流水线部件设计的基础。
在主体的流水线部件设计部分,本文主要侧重于指令派发部件与指令流控部
件的设计与实现。根据众多设计者的研究经验,发现派发部件的性能往往制约了
处理器的执行效率,因为指令派发在流水线上的特殊位置,如何实现高效的指令
并发与对流水线上指令执行特殊情况的响应,是其基本的设计需求。因此,在设
计过程中,应特别注意这些功能的实现:指令跨取指包边界派发、向 L1P 旁路取
指以及对仿真调试的支持,此外,设计者能够写出高效的测试激励也是精确验证
处理器效率的关键因素。同样,指令流控部件对指令流的控制,主要是对导致程
序跳转的特殊情况的响应,例如,分支指令的触发、中断异常的处理等等,因其
在流水线上分处于译码、执行阶段,对仿真调试功能的支持也显得十分必要。
系统级指令流水线的调试验证,是流片前的必备过程。通常的系统级验证调
试,一般采用 FPGA 原型验证,但是,除开其本身存在的错误定位困难、源代码
修改不便、验证迭代周期长的缺点,X-DSP 庞大、复杂的硬件设计,主流 FPGA
的规模已经无法承载,为了克服 X-DSP 研制过程中的这一难题,本文探索研究新
型调试方案。在经过多次试验与尝试之后,采用基于 PLI 接口技术的新型调试/验
证方法,通过 PLI 接口实现 C 编程与 Veirlog 的结合、以数据共享的方式实现不同
进程间的数据交互,从而,使得调试界面与全芯片 RTL 级硬件描述的模拟环境间
接通信,最终达到验证系统级指令流水线的目的。
第 60 页
国防科学技术大学研究生院工程硕士学位论文

总之,在 X-DSP 的研制过程中,本人以端正的科研态度认真完成自身工作任


务。在学期即将结束之时,X-DSP 仍处于系统级验证、调试阶段,预祝,该项目
最终能在顺利实现预期设计目标的基础上,进一步取得更大突破。

6.2 工作展望

在本文撰写的同时,高性能 X-DSP 的研究工作还在不断深入、全芯片系统级


的验证与调试工作也在紧张的进行。虽然本课题在整个项目中取得一定成果,也
为课题进展作出一定贡献,但同时也存在不足之处,需在以后的工作中继续扬长
避短、不断进取。在今后的工作中,为了不断适应处理器的发展速度、性能的提
高以及新的技术挑战,应该着重注意以下几方面的研究工作:
1) 指令派发部件的设计,由于其所在流水线上的特殊位置,使得更多的控制
信号过于集中的在派发部件内产生,从而,对外部流水线的控制,及控制信号之
间的影响交错复杂,导致容易出现关键路径,影响处理器工作效率。因此,这种
关键的流水线控制信号之间的相互作用应该是以后研究探讨的一个重要方向;
2) 在 FPGA 原型验证中,需要仿真器连接调试主机与测试主板,如果发现功
能错误,只能通过逻辑推理进行定位,然后回归模拟验证的方法将问题重现,对
RTL 代码进行纠正,再重新烧入 FPGA 继续测试,这样不但耗费时间,并且推测
性的定位错误也很难提高工作效率。X-DSP 处理器的多核硬件结构,通常的 FPGA
已经无法承载。所以,面对集成电路设计规模不断增大的现状,我们需要探索新
的调试验证方案,可以适应更大规模的硬件设计,同时也便于设计者定位错误,
减少重复性工作;
3) 在本文第五章提出的新型系统级软硬件协同验证方案中,虽然优势可圈可
点:不再依赖于仿真器连接 FPGA 测试主板;调试对象也由一个不可见的“黑盒子”
转化成在模拟器上仿真的 RTL 级硬件描述;在调试界面上发现的问题,设计者可
以直接在模拟器中查找错误原因。但是,该方案也有一定不足,一是对数据共享
机制的读写控制复杂;二是共享区的稳定性还存在一定隐患。所以,在该验证模
型的完备性与稳定性上还有进一步深入探索的空间。
4) 最后,还应该注意的是,针对硬件设计的完成,功能验证其实是更为重要、
时间耗费更多的繁重工作。但是,本文中,较多采用的验证方法多是系统级的模
拟验证,对测试激励的编写往往是人工的群举,而且,一旦修改了硬件设计,还
要进行回归验证,这样,无形中给验证工作带了极大的困扰。因此,在今后的工
作中,应该尽量采用形式化的验证方法,在这方面还有待学习、进步。
在今后的漫漫人生路上,秉持活到老、学到老的精神,精益求精,不断创新,
在所从事的行业更好地体现自身价值。

第 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 页
国防科学技术大学研究生院工程硕士学位论文

Conference on Architectural Support Programming Languages and Operating


Systems. 1989:290-302.
[18] Chandrakasan A P, Bowhill W J, Fox F. Design of high-performance
microprocessor circuits[M]. Wiley-IEEE press,2000.
[19] David W. Wall. Limits of Instruction-Level Parallelism[M]. In Proceedings of the
4th International Conference on Architectural Support for Programming
Languages and Operating systems, 1991.
[20] Arato P, Mann Z A, Orban A. Algorithmic aspects of hardware/software
partition[J]. ACM Transactions on Design Automation of Electronic
Systems(TODAES). 2005, 10(1): 136-156.
[21] 王春玲. 流水线技术在基于FPGA的DSP运算中的应用研究[J]. 电子技术(上
海). 2009(6):62-64.
[22] Okamoto K. Instruction pipeline microprocessor : U.S. Patent 5,291,615 [P].
1994-3-1.
[23] Stallings William. Computer Organization and Architecture: Design for
Performance. 8th Edition[M]. Beijing: China Machine Press. 2010.
[24] 天河二号“王者归来”[J]. 发明与创新(综合科技). 2013.07.
[25] Phillip M. A second generation SIMD microprocessor architecture[C]//The
Proceeding of Hot Chips X Symposium.1998.
[26] Lam Monica. Software Pipelining: An Effective Scheduling Technique for VLIW
Machines[J]. Carnegie Mellon University, ACM SIGPLAN. 2003: 318-328.
[27] Ahang S H, Wu Q Y. A JTAG Based Debug System fore Embedded DSP[J].
Microelectronics. 2007,1:029.
[28] Hennessy John L., David A. Patterson. “Computer Architecture: A Quantitative
approach(4th Edition)” [M]. Elservier Science Pte Ltd. 2012.
[29] 肖良军, 江波. 流水线技术在高速数字电路设计中的应用[J]. 压电与声光.
2003: 25(5).
[30] David W. Wall. Limits of Instruction-Level Parallelism. In Proceedings of the 4th
International Conference on Architectural Support for Programming Languages
and Operating systems[C]. 1991: 176-188.
[31] Yue-li H U, Jia-lin C, Feng R, et al. Design of a high performance microcontroller
[C]. Proceedings of the sixth IEEE cpmt conference on high density microsystem
designand packaging and component failure analysis(HDP 04). USA:IEE,
2004:25-28.
[32] Du Jinbang Z X, Yueke W. Design and Develpoment of Multi-DSP Parallel
Processing System[J]. Computer Measurement @ Control. 2006,5:033.
[33] Liu X, Papaefthymiou M C, Friedman E G. Retiming and clock scheduling for
digital circuit optimization [J]. IEEE Transactions on Computer-Aided Design of

第 65 页
国防科学技术大学研究生院工程硕士学位论文

Inte-grated Circuits and Systems. 2002,21(2):184-203.


[34] Tatapudi S B, Delgado-Frias J G. A mesochronous pipelining scheme for
high-performance digital systems [J]. IEEE Transactions on Circuits and
Systems:Regular Papers. 2006,53 (5):1078-1088.
[35] 胡敏杰, 邬齐荣, 龚敏. 微控制器的流水线设计及时序优化[J]. 四川大学学报:
自然科学版. 2007,44(3):603-607.
[36] Smith J. E. and Pleszkun A. R.. Implementing precise interrupts in pipelined
processors[J]. IEEE Transactions on Computers C-37,1988: 362-373.
[37] Gavin P, Whalley D, Sjalander M. Reducing instruction fetch energy in
multi-issue processors[J]. ACM Transactions on Architecture and Code
Optimization(TACO). 2013, 10(4):64.
[38] 胡伟武, 唐志敏. 龙芯1号处理器结构设计[J]. 计算机学报.2003,26(4).
[39] 白跃彬, 钱德沛(译). 计算机系统结构——量化研究方法(第四版)[M]. 电子
工业出版社. 2008.8: 343-351.
[40] Michael S. Schlansker, Ramakrishna Rau B., Scott Mahlke, Vinod Kathail,
Richard Johnson, Sadun Anik, Santosh G. Abraham. Achieving High Levels of
Instruction-Level Parallelism with Reduced Hardware Complexity. Technical
Report HPL-96-120, November 1994.
[41] Qingwei Zheng. Implementation of an Instruction Dispatch Unit Applied to
Digital Signal Processors with VLIW Architecture[C]. Institute of
Microelectronics, singhua National Laboratory for Information Science
andTechnology, Tsinghua University. 2010.
[42] Tullsen D. M., Eggers S. J. and Levy H. M.. Simultaneous Multithreading:
Maximizing On-Chip Parallelism. In Proceedings of the 22nd International
Symposium on Computer Architecture. 1995: 392-403.
[43] lbrecht Mayer A, Harry Siebert, Klaus D. McDonald-Maier. Boosting Debugging
Support for Complex Systems on Chip[J]. Computer, 2007:76-81.
[44] Kiefer R, Kearney D. Performance comparison of software/FPGA hardware
partitions for a DSP application[J]. Computer Standards & Interfaces.
1999,20(6):472-473.
[45] 夏 宇 闻 . Verilog 数 字 系 统 设 计 教 程 [M]. 北 京 航 空 航 天 大 学 出 版 社 .
2010:50-57.
[46] Marius Evers. Improving branch prediction by understanding branch behavior[D].
University of Michigan, Department of Computer Science and Engineering. 2000.
[47] Fielden K G, Gupta R, Morris D, et al. Instruction prefetch mechanism utilizing a
branch predict instruction : U.S. Patent 5,742,804[P]. 1998-4-21.
[48] 孙庆, 万江华, 陈书明. 一种VLIW结构下的指令预取机制[J]. 高技术通讯.
2004.
第 66 页
国防科学技术大学研究生院工程硕士学位论文

[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 页
国防科学技术大学研究生院工程硕士学位论文

作者在学期间取得的学术成果

[1] 李睿婷, 万江华, 刘衡竹, 王慧丽. 一种基于PLI技术的系统级验证方法[C].


中国计算机学会第十七届计算机工程与工艺学术年会暨第三届微处理器技术
论坛论文集(上册). 长沙:国防科技大学出版社. 2013:378-382.

第 68 页

You might also like