内容简介
本书从指令集定义、运算部件、存储结构、工具链开发等诸多环节,系统全面地介绍RISC-V架构DSP的设计过程,并分享了每个设计环节中的思考、原则和技术选择过程,以及如何充分利用开源成果进行敏捷开发。本书是基于RISC-V架构进行DSP设计工程技术实践的成果,其特点是产品导向,注重技术的可操作性和系统性,并进行了必要的创新。
目录
CONTENTS
目 录
序一
序二
前言
第1章 数字信号处理器简介 1
1.1 数字信号处理器的发展历程 1
1.2 数字信号处理器的主要特征 6
1.2.1 指令集 6
1.2.2 存储结构 7
1.2.3 数据格式与算法 7
1.2.4 运算部件 9
1.2.5 寻址方式 10
1.3 数字信号处理器的应用领域 12
1.4 本章小结 13
第2章 RISC-V架构 14
2.1 RISC-V的发展历程 14
2.2 RISC-V的优势 15
2.2.1 技术优势 15
2.2.2 生态优势 16
2.2.3 知识产权优势 17
2.3 RISC-V的主要特征 18
2.3.1 模块化设计 18
2.3.2 基础整数指令集 19
2.3.3 M扩展 23
2.3.4 F扩展 23
2.3.5 C扩展 25
2.3.6 Zifencei扩展 27
2.3.7 Zicsr扩展 28
2.3.8 特权架构 29
2.4 RISC-V开源项目 31
2.4.1 加州大学伯克利分校 32
2.4.2 PULP组织 33
2.4.3 OpenHW组织 33
2.4.4 lowRISC组织 35
2.4.5 平头哥 36
2.4.6 北京开源芯片研究院 37
2.4.7 印度理工学院马德拉斯分校 37
2.5 本章小结 38
第3章 SpringCore体系结构 39
3.1 设计目标 39
3.2 数字信号处理算法 40
3.3 指令集 42
3.3.1 支持的数据类型 42
3.3.2 结构寄存器 43
3.3.3 控制和状态寄存器 43
3.3.4 编码概括 44
3.3.5 指令扩展 45
3.4 内核结构 47
3.4.1 取指单元 48
3.4.2 译码单元 48
3.4.3 控制单元 48
3.4.4 执行单元 49
3.4.5 访存单元 50
3.4.6 存储空间 51
3.5 本章小结 51
第4章 SpringCore流水线设计 52
4.1 流水线技术简介 52
4.2 取指单元 54
4.2.1 取指单元结构 55
4.2.2 指令对齐 55
4.3 译码单元 56
4.3.1 预译码 57
4.3.2 基础译码 58
4.3.3 异常检测 59
4.3.4 指令发射 60
4.4 相关检测 61
4.4.1 数据相关 61
4.4.2 结构相关 63
4.4.3 控制相关 66
4.5 流水线低功耗控制 67
4.6 循环控制 68
4.7 控制和状态寄存器 70
4.8 本章小结 71
第5章 访存结构 72
5.1 存储结构 72
5.2 存储属性与保护 74
5.2.1 物理存储属性 75
5.2.2 安全域 76
5.2.3 访存保护机制 77
5.3 访存模块设计 78
5.3.1 访存功能 78
5.3.2 访存流水线 81
5.4 存储一致性 84
5.4.1 存储一致性定义及意义 84
5.4.2 存储一致性模型 84
5.4.3 顺序同步指令及原子指令 86
5.5 本章小结 87
第6章 运算部件 88
6.1 定点运算部件设计 88
6.1.1 定点运算部件的结构 89
6.1.2 超前进位加法器 90
6.1.3 布什-华莱士树乘法器 93
6.1.4 乘累加部件 99
6.1.5 移位器 100
6.1.6 基4 SRT除法器 103
6.2 浮点运算部件设计 105
6.2.1 浮点数据格式 105
6.2.2 浮点控制和状态寄存器 108
6.2.3 浮点运算部件的结构 109
6.2.4 浮点乘加器 111
6.2.5 浮点除法和开平方根部件 116
6.3 本章小结 121
第7章 异常和中断机制 122
7.1 异常和中断介绍 122
7.2 中断处理机制 123
7.2.1 中断类型 124
7.2.2 处理器中断控制器 125
7.2.3 中断处理机制的流程 128
7.3 本章小结 131
第8章 调试单元设计 132
8.1 JTAG简介 132
8.1.1 JTAG背景 132
8.1.2 JTAG接口 133
8.1.3 TAP控制器 133
8.2 调试单元的结构 135
8.2.1 调试单元总览 135
8.2.2 调试传输模块 137
8.2.3 调试模块 138
8.2.4 核内调试支持 144
8.3 调试处理机制 145
8.3.1 调试流程 145
8.3.2 复位控制与运行控制 146
8.3.3 抽象命令 147
8.4 调试功能实现示例 149
8.4.1 单步调试 149
8.4.2 访问连续存储区域 150
8.5 本章小结 151
第9章 软件开发环境 152
9.1 编译器 152
9.1.1 LLVM的工作流程 153
9.1.2 LLVM后端的处理流程 155
9.1.3 有向无环图 158
9.1.4 指令合法化 162
9.1.5 调用下降 163
9.2 汇编
前言/序言
前 言
DSP是数字信号处理器(Digital Signal Processor)的简称,它是一种专门为数字信号处理应用而优化设计的微处理器,因其灵活的可编程性、强实时性的处理能力,以及优异的计算效能等特点,广泛应用在工业控制、新能源、无线通信、电动汽车、轨道交通和智能家电领域,是信息产业的核心处理器。
DSP已经有四十多年的发展历史,其技术一直在不断进步,主频、峰值处理能力和存储容量等指标不断提升。美国TI公司是这个领域的领军企业,它引领着DSP技术的发展,面向不同的细分领域推出几大类产品(如C6000、C5000和C2000等),并凭借优异的性能,获得了巨大成功,在国际上占据了DSP的绝大部分市场份额。我国DSP主要依赖进口,国产化率非常低,迫切需要保障自主可控,这带给我们严峻的挑战,同时也给国产DSP产业发展带来前所未有的机遇。
DSP结构复杂,设计难度大。研制DSP是一个大工程问题,其难点不在于某个单点技术的突破或者创新,而在于如何把众多技术融合起来,保证功能全部正确、各类指标满足目标应用的需求,涉及应用研究、算法研究、芯片设计、软件设计和系统设计等多个方面,需要大量的资源和时间投入,以及应用领域的支持。由于国外DSP发展较早,提前完成了专利布局,对后来者进入该领域设置了巨大的障碍。
RISC-V诞生十余年来,凭借开源、简洁、模块化和可扩展等诸多技术优势迅速发展,引起工业界和学术界的高度关注,被认为有望改变世界芯片格局。当前,RISC-V已经初步建立了良好的产业生态,在芯片设计、工具链开发等方面均具有优秀的开源项目,通过借鉴这些开源项目,可大幅降低处理器设计的技术门槛,提高处理器的开发效率。更重要的是,RISC-V是开源开放的,基于RISC-V架构开发处理器产品,可以避开知识产权的壁垒。
虽然RISC-V有以上诸多优势,但本团队在选择它作为DSP发展路线的时候还是经过了再三思考和权衡。这是因为RISC-V本质上是一种CPU架构,与DSP架构存在很大的不同,很难像DSP那样极致地适配数字信号处理应用。以TI的C2000处理器为例,相比RISC架构,它采用了CISC架构,在代码密度、访存效率、计算并行性等方面存在较大的优势,当然由于编码复杂,导致译码电路复杂,从而在主频和功耗等方面存在一定劣势。有两条技术路线摆在我们面前,一条是借鉴TI的C2000 DSP架构,自主定义指令集,独立完成全部的芯片设计和软件开发,这条路线所研发的DSP肯定是最优的,但由此带来的设计挑战和工作量也非常巨大;另外一条路线就是采用RISC-V架构,积极采用其开源技术成果,通过扩展DSP指令和优化微结构,提升DSP的处理性能,以较低的人力和资源投入,在较短的时间内推出DSP产品。充分考虑技术发展趋势、研发投入等诸多因素,以及对RISC-V发展前景的信心后,我们最终选择了基于RISC-V架构开发DSP芯片,结果表明,通过充分的指令集和微结构优化设计,基于RISC-V架构的DSP可以媲美甚至超越国际同类产品。
正如前面提到的,研发DSP是一个大工程问题,一款DSP产品是否优异,也不能单凭主频、峰值计算能力或者内部存储容量来衡量,最核心的是需要考量其实时信号链性能、常用数字信号处理算法的处理能力以及工具链的完善程度等多项因素。DSP的设计技术除了大家熟知的流水线、计算部件和存储器设计之外,还包括中断电路、调试器、安全机制以及验证技术等,上述技术对于产品成功也至关重要。本书以SpringCore RISC-V架构DSP内核为例,从指令集定义、运算部件、存储结构、工具链开发等诸多环节,系统全面地介绍RISC-V架构DSP的设计过程,并分享了每个设计环节中的思考、原则和技术选择过程,以及如何充分利用开源成果进行敏捷开发。本书是基于RISC-V架构进行DSP设计工程技术实践的成果,其特点是产品导向,注重技术的可操作性和系统性,并进行了必要的创新,作者希望本书不仅对从事DSP芯片研发的工作者、科研人员有所帮助,对从事RISC-V架构其他类型处理器研发的人员也有参考价值。
本书的内容组织如下:
第1章为数字信号处理器简介,主要介绍DSP的发展历程、主要特征以及应用领域。
第2章为RISC-V架构,主要介绍RISC-V的发展历程、优势、指令集设计以及开源项目情况。
第3章为SpringCore体系结构,该章首先介绍了SpringCore的设计目标,进而对SpringCore指令集设计和体系结构设计进行了详细描述。
第4章介绍了SpringCore流水线设计,主要从流水线划分、取指单元、译码单元、相关处理、零开销循环和低功耗控制等方面进行了详细介绍。
第5章介绍了访存结构,详细介绍了SpringCore的存储结构划分DSP的存储属性与保护、访存模块设计和存储一致性等相关内容。
第6章围绕运算部件展开,分别描述了定点运算部件和浮点运算部件,对构成运算部件的加法器、布什-华莱士树乘法器和移位器等均进行了