图书简介:
目 录
第1章 Verilog HDL规范进阶 1
1.1 Verilog HDL用户自定义原语 1
1.1.1 UDP定义 1
1.1.2 组合电路UDP 3
1.1.3 电平敏感的时序UDP 4
1.1.4 边沿敏感的时序UDP 4
1.1.5 时序UDP的初始化 5
1.1.6 UDP实例 6
1.1.7 边沿和电平触发的混合行为 6
1.2 Verilog HDL指定块 7
1.2.1 模块路径声明 8
1.2.2 为路径分配延迟 15
1.2.3 混合模块路径延迟和分布式延迟 18
1.2.4 驱动布逻辑 18
1.2.5 脉冲过滤行为的详细控制 19
1.3 Verilog HDL时序检查 24
1.3.1 时序检查概述 24
1.3.2 使用稳定窗口的检查时序 25
1.3.3 时钟和控制信号的时序检查 30
1.3.4 边沿控制标识符 35
1.3.5 提示符:用户定义对时序冲突的响应 35
1.3.6 使能带有条件的时序检查 40
1.3.7 时序检查中的矢量信号 40
1.3.8 负时序检查 41
1.4 Verilog HDL SDF逆向注解 42
1.4.1 SDF注解器 42
1.4.2 映射SDF结构到Verilog 42
1.4.3 多个注解 46
1.4.4 多个SDF文件 47
1.4.5 脉冲限制注解 47
1.4.6 SDF到Verilog延迟值映射 48
1.5 Verilog HDL的VCD文件 48
1.5.1 Vivado创建四态VCD文件 49
1.5.2 Verilog源创建四态VCD文件 49
1.5.3 四态VCD文件格式 51
1.6 编译高云FPGA仿真库 55
1.6.1 功能仿真库的安装 55
1.6.2 时序仿真库的安装 57
第2章 加法器和减法器的设计和验证 60
2.1 加法器的设计 60
2.1.1 一位半加器的实现 60
2.1.2 一位全加器的实现 60
2.1.3 串行进位加法器的实现 61
2.1.4 串行进位加法器的验证 65
2.1.5 超前进位加法器的实现 70
2.1.6 超前进位加法器的验证 74
2.2 减法器的设计 76
2.2.1 一位半减器的实现 76
2.2.2 一位全减器的实现 77
2.2.3 负数的表示方法 78
2.2.4 多位减法器的设计和验证 80
2.3 单个加法器实现加法和减法运算 82
2.3.1 一位加法器/减法器的实现 82
2.3.2 多位加法器/减法器的实现 83
2.3.3 单个加法器的设计和验证 84
第3章 乘法器和除法器的设计和验证 86
3.1 乘法器的设计和验证 86
3.1.1 基-2布斯算法的设计 86
3.1.2 基-2布斯算法的验证 90
3.1.3 基-2流水线布斯乘法器的设计 94
3.1.4 基-2流水线布斯乘法器的验证 96
3.1.5 基-4流水线布斯算法的设计 100
3.1.6 基-4流水线布斯算法的验证 104
3.2 除法器的设计和验证 105
3.2.1 基于长除法的除法器的设计 105
3.2.2 基于长除法的除法器的验证 109
3.2.3 基于恢复除法的除法器的设计 112
3.2.4 基于恢复除法的除法器的验证 116
3.2.5 基于非恢复除法的除法器的设计 117
3.2.6 基于非恢复除法的除法器的验证 120
第4章 浮点运算器的设计和验证 123
4.1 浮点数的表示方法 123
4.1.1 单精度表示方法 123
4.1.2 双精度表示方法 124
4.2 调用浮点库的浮点数运算的实现和验证 124
4.2.1 调用浮点库的浮点数运算的实现 124
4.2.2 调用浮点库的浮点数运算的验证 126
第5章 Codescape下载安装和使用指南 132
5.1 Codescape工具的功能 132
5.2 Codescape工具的下载和安装 132
5.2.1 Codescape工具的下载 132
5.2.2 Codescape工具的安装 133
5.3 Codescape的设计流程 134
5.3.1 启动Codescape工具 134
5.3.2 创建新的设计工程 135
5.3.3 分析启动引导代码 136
5.3.4 修改main.c文件 139
5.3.5 编译设计文件 140
5.3.6 分析编译后的代码 140
第6章 单周期MIPS系统的设计和验证 142
6.1 MIPS实现的指令功能 142
6.1.1 MIPS32指令编码格式 142
6.1.2 处理器所实现的指令格式 150
6.2 单周期MIPS系统的设计 156
6.2.1 建立新的设计工程 156
6.2.2 添加通用寄存器集设计文件 157
6.2.3 添加程序计数器设计文件 158
6.2.4 添加控制器设计文件 158
6.2.5 添加算术逻辑单元设计文件 161
6.2.6 添加处理器顶层设计文件 162
6.2.7 添加数据存储器设计文件 165
6.2.8 添加指令存储器设计文件 166
6.2.9 添加系统顶层设计文件 167
6.3 生成并添加存储器初始化文件 168
6.3.1 建立新的设计工程 168
6.3.2 添加makefile文件 169
6.3.3 添加链接描述文件 170
6.3.4 添加汇编语言源文件 171
6.3.5 生成HEX文件 171
6.3.6 添加存储器初始化文件 172
6.4 单周期MIPS系统的验证 173
6.4.1 GAO软件工具概述 173
6.4.2 添加GAO配置文件 174
6.4.3 配置GAO参数 174
6.4.4 添加物理约束文件 178
6.4.5 添加引脚约束条件 178
6.4.6 下载设计到FPGA 181
6.4.7 启动GAO软件工具 181
6.4.8 设计总结和启示 182
6.5 单周期MIPS系统添加外设的设计 183
6.5.1 设计思路 183
6.5.2 存储空间映射 184
6.5.3 复制并添加设计文件 185
6.5.4 添加地址译码器设计文件 185
6.5.5 添加多路选择器设计文件 186
6.5.6 添加GPIO控制器设计文件 187
6.5.7 添加PWM控制器设计文件 188
6.5.8 修改顶层设计文件 189
6.5.9 查看RTL网表结构 191
6.6 单周期MIPS系统添加外设的验证 191
6.6.1 测试数据存储器 191
6.6.2 测试GPIO控制器 195
6.6.3 测试PWM控制器 199
6.7 单周期MIPS核添加协处理器的设计 203
6.7.1 设计背景 203
6.7.2 设计思路 204
6.7.3 复制设计文件 204
6.7.4 添加协处理器设计文件 204
6.7.5 修改控制器设计文件 209
6.7.6 修改程序计数器设计文件 212
6.7.7 修改处理器核设计文件 213
6.7.8 查看处理器核设计结构 216
6.8 单周期MIPS核添加协处理器的验证 216
6.8.1 测试保留指令异常 216
6.8.2 测试定时器中断异常 221
第7章 多周期MIPS系统的设计和验证 226
7.1 设计背景 226
7.2 设计关键问题 226
7.2.1 处理指令需要的阶段 226
7.2.2 数据通路 227
7.2.3 控制通路 229
7.3 多周期MIPS系统的设计 231
7.3.1 建立新的设计工程 232
7.3.2 复制设计文件 232
7.3.3 添加底层寄存器设计文件 233
7.3.4 添加程序计数器设计文件 233
7.3.5 添加存储器设计文件 234
7.3.6 添加控制器设计文件 235
7.3.7 添加顶层设计文件 239
7.4 多周期MIPS系统的验证 242
7.4.1 修改GAO配置文件 242
7.4.2 下载设计 243
7.4.3 启动GAO软件工具 243
7.4.4 设计总结和启示 244
第8章 流水线MIPS系统的设计和验证 245
8.1 流水线概述 245
8.1.1 数据通路的流水线结构 246
8.1.2 控制通路的流水线结构 249
8.1.3 风险及解决方法 249
8.2 流水线MIPS系统的设计 256
8.2.1 建立新的设计工程 256
8.2.2 复制设计文件 256
8.2.3 添加底层寄存器设计文件 257
8.2.4 添加通用寄存器集设计文件 259
8.2.5 添加控制器设计文件 260
8.2.6 添加风险控制单元设计文件 263
8.2.7 添加处理器核顶层设计文件 264
8.2.8 添加处理器系统顶层设计文件 269
8.3 流水线MIPS系统的验证 270
8.3.1 测试提前解决数据风险方法的正确性 270
8.3.2 测试停止解决数据风险方法的正确性 273
8.3.3 测试解决控制风险方法的正确性 276
8.4 流水线MIPS系统添加协处理器的设计 280
8.4.1 复制并添加设计文件 280
8.4.2 修改风险控制单元设计文件 281
8.4.3 修改MIPS核顶层设计文件 283
8.5 流水线MIPS系统添加协处理器的验证 290
8.5.1 修改GAO配置文件 290
8.5.2 下载设计 290
8.5.3 启动GAO软件工具 291
8.6 AHB-LITE总线架构和时序 292
8.6.1 ARM AMBA系统总线 292
8.6.2 AHB-LITE简介 293
8.6.3 AHB-LITE总线操作 294
8.6.4 AHB-LITE总线结构 294
8.6.5 AHB-LITE总线时序 297
8.7 流水线MIPS系统添加外设的设计 299
8.7.1 复制设计文件 300
8.7.2 添加本地总线转换设计文件 300
8.7.3 添加地址译码器设计文件 301
8.7.4 添加多路复用器设计文件 302
8.7.5 添加数据存储器控制器设计文件 303
8.7.6 添加GPIO控制器设计文件 305
8.7.7 修改控制器设计文件 306
8.7.8 修改风险控制单元设计文件 307
8.7.9 修改处理器核设计文件 309
8.7.10 修改顶层设计文件 316
8.8 流水线MIPS系统添加外设的验证 319
8.8.1 测试GPIO控制器 319
8.8.2 测试数据存储器控制器 322
展开
前 言
本书是《EDA原理及Verilog HDL实现:从晶体管、门电路到高云FPGA的数字系统设计》一书的姊妹篇,也是进阶篇。
众所周知,中央处理单元(Central Processing Unit,CPU)和片上系统(System on Chip,SoC)设计是集成电路设计领域的“珠穆朗玛峰”,是衡量一个国家集成电路设计水平的重要标志。长久以来,国内从事CPU设计的半导体公司主要是基于国外授权的指令集架构(Instruction Set Architecture,ISA)来设计CPU,这就需要给国外公司支付巨额的专利费用。
近年来,随着中国科技实力的不断增强,国内从事CPU设计的半导体公司在消化和吸收国外经典ISA的基础上,推出了具有自主知识产权的ISA,并且CPU的整体性能不断接近国外主流CPU的性能。在这种情况下,就需要国内高等学校培养一批精通高端CPU设计的高级人才来支持国内CPU设计公司的持续发展,以更好的推动国产CPU的大规模普及。
近年来,国内外很多开源社区提供了不用架构CPU的开源设计,为广大读者学习CPU和SoC设计方法提供了丰富的素材。
本书内容主要分为两个部分。第一部分从最基本的加法器和减法器入手,进阶到乘法器和除法器,以及浮点运算单元,通过高云半导体的云源软件对这些功能单元进行了设计实现,并通过西门子的ModelSim软件对设计进行了仿真验证;第二部分,从单周期MIPS处理器入手,进阶到多周期MIPS处理器和流水线MIPS处理器,通过高云半导体的云源软件对这三种不同形式的处理器进行了设计实现,并通过高云半导体的GAO在线逻辑分析工具对设计进行了硬件调试和验证。通过高云半导体的云源软件、西门子的ModelSim软件和高云半导体的GAO软件,将软件和硬件的协同设计、协同仿真和协同调试融为一体。通过软件仿真和硬件调试,深度剖析不同MIPS处理器实现的本质,从而为读者系统学习包括CPU核和外设在内的计算机底层硬件提供了可视化手段和方法。
作者已经毕业的研究生罗显志在攻读硕士研究生学位期间,曾经系统学习了基于MIPS ISA的全套课程,并对该MIPS处理器核的内部结构进行了系统研究和分析,此书第二部分的一些内容也是基于他的研究成果,在此向他表示感谢。
在编写本书的过程中,高云半导体大学计划经理梁岳峰先生和武汉易思达科技总经理王程涛先生提供了高云云源软件和硬件开发板的支持,并协调相关的软件和硬件工程师解答作者在编写本书过程中所遇到的技术问题,在此也向他们表示诚挚的感谢。产业界和教育界的互相支持和深度融合,必将为国内高等学校提高自主人才培养的质量注入新的动力,从而加速先进信息技术与高等学校相关专业课程培养体系的有机融合。
由于作者水平有限,书中难免有不足之处,恳请各位读者提出宝贵的建议,书中所有的实例设计代码均可从华信教育资源网(http://www.hxedu.com.cn)中下载。关于书中的任何问题,读者可以通过hb@gpnewtech.com与作者进行联系。
何宾
2024年2月于北京
展开