0去购物车结算
购物车中还没有商品,赶紧选购吧!
当前位置: > CPU制作入门:基于RISC-V和Chisel

相同作者的商品

相同语种的商品

浏览历史

CPU制作入门:基于RISC-V和Chisel


联系编辑
 
标题:
 
内容:
 
联系方式:
 
  
CPU制作入门:基于RISC-V和Chisel
  • 书号:9787030769657
    作者:蒋萌
  • 外文书名:
  • 装帧:平装
    开本:16
  • 页数:318
    字数:360000
    语种:zh-Hans
  • 出版社:科学出版社
    出版时间:2024-01-01
  • 所属分类:
  • 定价: ¥98.00元
    售价: ¥77.42元
  • 图书介质:
    纸质书

  • 购买数量: 件  可供
  • 商品总价:

相同系列
全选

内容介绍

样章试读

用户评论

全部咨询

本书基于RISC-V和Chisel讲解自定义CPU的实现。全书分为5个部分,立足于CPU、存储器、计算机架构等基础知识,逐步带领读者实现简单的加减法、分支、比较等基础指令,理解流水线对于CPU高速化的重要意义及实现,最后应用向量扩展语言实现自定义CPU。要提醒的是,本书所指的“CPU制作”仅限于软件上的设计和模拟,不涉及FPGA上的实现。
样章试读
  • 暂时还没有任何用户评论
总计 0 个记录,共 1 页。 第一页 上一页 下一页 最末页

全部咨询(共0条问答)

  • 暂时还没有任何用户咨询内容
总计 0 个记录,共 1 页。 第一页 上一页 下一页 最末页
用户名: 匿名用户
E-mail:
咨询内容:

目录

  • 目录
    第Ⅰ部分 CPU制作的基础知识
    第1章什么是CPU 2
    1.1 电路能够描述逻辑的理由 3
    1.1.1 转换为数字信号 3
    1.1.2 描述逻辑运算的电路 4
    1.1.3 可以描述任何真值表的基本逻辑电路 7
    1.2 为何能用基本逻辑电路实现CPU 9
    1.2.1 时序逻辑电路:锁存器 10
    1.2.2 有限状态机 11
    1.2.3 通过时钟信号同步 13
    1.3 CPU的制造流程 17
    第2章计算机架构 19
    2.1 存储器 20
    2.1.1 寄存器 21
    2.1.2 主存 21
    2.2 计算机的基本处理流程 22
    2.2.1 取指令(IF) 23
    2.2.2 指令译码(ID) 23
    2.2.3 运算(EX)27
    2.2.4 访存(MEM) 27
    CPU制作入门:基于RISC-V和Chisel
    2.2.5 回写 27
    第3章 Chisel基础 30
    3.1 什么是Chisel 31
    3.2 什么是面向对象 32
    3.2.1 类和实例 32
    3.2.2 继承 33
    3.3 Scala的基本语法 34
    3.3.1 变量var和val 35
    3.3.2 方法:def() 35
    3.3.3 集合:Seq 35
    3.3.4 for表达式 36
    3.3.5 对象 37
    3.3.6 命名空间 40
    3.4 Chisel的基本语法 42
    3.4.1 位值的基本类型 42
    3.4.2 运算符 44
    3.4.3 Module类 47
    3.4.4 IO对象 48
    3.4.5 Flipped对象 49
    3.4.6 信号连接 50
    3.4.7 组合逻辑电路:Wire/WireDefault 51
    3.4.8 时序逻辑电路:RegInit 51
    3.4.9 用Mem定义寄存器文件 52
    3.4.10 控制电路 52
    3.4.11 位操作 56
    3.4.12 用printf调试 57
    第Ⅱ部分简单的CPU实现
    第4章环境架构 60
    4.1 下载chisel-template 60
    4.2 用Docker架构运行环境 61
    4.2.1 安装Docker 61
    4.2.2 创建Dockerfile 61
    4.2.3 创建镜像 62
    4.2.4 创建容器 63
    4.3 指令位列和常量文件 63
    4.3.1 Instructions.scala 64
    4.3.2 Consts.scala 66
    4.4 第Ⅱ部分要实现的指令和Chisel完整代码 69
    第5章取指令的实现 76
    5.1 Chisel代码概要 76
    5.2 Chisel的实现 77
    第6章用ChiselTest进行取指令测试 80
    6.1 ChiselTest的实现 80
    6.2 测试流程 81
    6.3 创建Chisel测试代码 81
    6.3.1 特征:trait 82
    6.3.2 peek() 方法 83
    6.3.3 clock.step() 方法 83
    6.4 创建存储器用HEX文件 83
    6.5 用printf输出调试信号 85
    6.6 运行测试 85
    6.7 Docker容器的commit 86
    第7章指令译码器的实现 87
    7.1 Chisel的实现 87
    7.1.1 寄存器编号的译码 87
    7.1.2 寄存器数据的读取 87
    7.1.3 调试信号的输出 88
    7.2 运行测试 88
    第8章 LW指令的实现 90
    8.1 RISC-V的LW指令定义 90
    8.2 Chisel的实现 91
    8.2.1 指令位模式的定义 92
    8.2.2 CPU和存储器之间的端口定义 93
    8.2.3 CPU内部的处理实现 94
    8.2.4 存储器的数据读取实现 95
    8.3 运行测试 96
    8.3.1 创建指令文件lw.hex96
    8.3.2 存储器加载文件名的修改 97
    8.3.3 测试结束条件的修改 97
    8.3.4 添加调试信号 97
    8.3.5 运行测试 98
    第9章 SW指令的实现 99
    9.1 RISC-V的SW指令定义 99
    9.2 Chisel的实现 100
    9.2.1 指令位模式的定义 101
    9.2.2 CPU和存储器间的端口定义 101
    9.2.3 CPU内部的处理实现 101
    9.2.4 存储器的数据写入实现 102
    9.3 运行测试 102
    9.3.1 创建指令文件sw.hex 102
    9.3.2 存储器加载文件名的修改 104
    9.3.3 测试结束条件的修改 104
    9.3.4 添加调试信号 104
    9.3.5 运行测试 104
    第10章加减法指令的实现 106
    10.1 RISC-V的加减法指令定义 106
    10.2 Chisel的实现 107
    10.2.1 指令位模式的定义 107
    10.2.2 加减法结果的连接(EX阶段) 107
    10.2.3 加减法结果的寄存器回写(WB阶段) 108
    第11章逻辑运算的实现 109
    11.1 RISC-V的逻辑运算指令定义 109
    11.2 Chisel的实现 110
    11.2.1 指令位模式的定义 110
    11.2.2 逻辑运算结果的连接(EX阶段) 111
    11.2.3 逻辑运算结果的寄存器回写(WB阶段) 111
    第12章译码器的强化 112
    12.1 ALU译码 112
    12.1.1 译码器的强化(ID阶段) 112
    12.1.2 利用译码信号简化ALU(EX阶段) 113
    12.2 MEM译码 114
    12.2.1 译码器的强化(ID阶段) 114
    12.2.2 指令译码的非必要化(MEM阶段) 115
    12.3 WB译码 115
    12.3.1 译码器强化(ID阶段) 116
    12.3.2 指令译码的非必要化(WB阶段) 116
    第13章移位运算的实现 118
    13.1 RISC-V的移位运算指令定义 118
    13.2 Chisel的实现 119
    13.2.1 指令位模式的定义 119
    13.2.2 译码信号的生成(ID阶段) 120
    13.2.3 移位运算结果的连接(EX阶段) 120
    第14章比较运算的实现 121
    14.1 RISC-V的比较运算指令定义 121
    14.2 Chisel的实现 122
    14.2.1 指令位模式的定义 122
    14.2.2 译码信号的生成(ID阶段) 122
    14.2.3 比较运算结果的连接(EX阶段) 123
    第15章分支指令的实现 124
    15.1 RISC-V的分支指令定义 124
    15.2 Chisel的实现 126
    15.2.1 指令位模式的定义 126
    15.2.2 PC的控制(IF阶段) 126
    15.2.3 立即数和译码信号的生成(ID阶段) 127
    15.2.4 分支可否、跳转目标地址的计算(EX阶段) 128
    第16章跳转指令的实现 129
    16.1 RISC-V的跳转指令定义 129
    16.2 Chisel的实现 131
    16.2.1 指令位模式的定义 131
    16.2.2 译码和操作数数据的读取(ID阶段) 131
    16.2.3 添加JALR运算(EX阶段) 132
    16.2.4 PC的控制(IF阶段) 132
    16.2.5 ra的回写(WB阶段) 133
    第17章立即数加载指令的实现 134
    17.1 RISC-V的立即数加载指令定义 134
    17.2 Chisel的实现 135
    17.2.1 指令位模式的定义 135
    17.2.2 译码和操作数数据的读取(ID阶段) 136
    第18章 CSR指令的实现 138
    18.1 RISC-V的CSR指令定义 138
    18.2 Chisel的实现 141
    18.2.1 指令位模式的定义 141
    18.2.2 立即数和译码信号的生成(ID阶段) 141
    18.2.3 op1_data的连接(EX阶段) 142
    18.2.4 CSR的读写(MEM阶段) 142
    18.2.5 CSR读取数据的寄存器回写(WB阶段) 143
    第19章 ECALL的实现 144
    19.1 RISC-V的ECALL指令定义 144
    19.2 Chisel的实现 145
    19.2.1 指令位模式的定义 145
    xvi
    CPU制作入门:基于RISC-V和Chisel
    19.2.2 PC的控制(IF阶段) 145
    19.2.3 译码信号的生成(ID阶段) 146
    19.2.4 CSR写入(MEM阶段) 146
    第20章用riscv-tests进行测试 147
    20.1 riscv-tests的构建 147
    20.2 将ELF文件转换为BIN文件 148
    20.3 BIN文件的十六进制化 149
    20.4 riscv-tests的路径条件 150
    20.5 riscv-tests的执行 153
    20.5.1 Chisel的实现 153
    20.5.2 运行测试 154
    20.6 批量测试脚本 156
    20.6.1 HEX文件的批量生成:tohex.sh 156
    20.6.2 riscv-tests的批量运行:riscv-tests.sh 156
    第21章试运行C程序 159
    21.1 创建C程序 159
    21.2 编译 161
    21.3 链接 163
    21.4 机器语言的十六进制化和DUMP文件的创建 164
    21.5 运行测试 165
    第Ⅲ部分流水线的实现
    第22章什么是流水线 168
    22.1 流水线的意义 168
    22.2 创建CPU流水线 170
    22.3 在第Ⅲ部分完成的Chisel代码 170
    第23章流水线寄存器的设置 179
    23.1 寄存器的定义 179
    23.2 IF阶段 181
    23.2.1 取指令和PC控制 181
    23.2.2 IF/ID寄存器的写入 181
    23.3 ID阶段 182
    23.3.1 寄存器编号的译码和寄存器数据的读取 182
    23.3.2 立即数的译码 182
    23.3.3 csignals的译码 182
    23.3.4 操作数数据的选择 183
    23.3.5 生成csr_addr 183
    23.3.6 ID/EX寄存器的写入 183
    23.4 EX阶段 184
    23.4.1 至alu_out的信号连接 184
    23.4.2 分支指令的处理 185
    23.4.3 EX/MEM寄存器的写入 185
    23.5 MEM阶段 186
    23.5.1 存储器访问 186
    23.5.2 CSR 186
    23.5.3 wb_data 186
    23.5.4 写入MEM/WB寄存器 187
    23.6 WB阶段 187
    第24章分支冒险处理 188
    24.1 什么是分支冒险 188
    24.2 Chisel的实现 189
    24.2.1 禁用IF阶段 189
    24.2.2 禁用ID阶段 190
    24.2.3 增加调试信号 190
    24.3 分支冒险的测试 191
    24.3.1 创建用于测试的C程序 191
    24.3.2 创建HEX文件和DUMP文件 192
    24.3.3 分支冒险处理前的CPU测试 194
    24.3.4 分支冒险处理后的CPU测试 195
    第25章数据冒险处理 199
    25.1 什么是数据冒险 199
    25.2 直通的Chisel实现 200
    25.3 停顿的Chisel实现 201
    25.3.1 添加stall_flg信号(ID阶段) 202
    25.3.2 停顿处理(IF阶段) 203
    25.3.3 BUBBLE化(ID阶段) 203
    25.3.4 添加调试信号 204
    25.4 数据冒险测试 204
    25.4.1 ID/WB间数据冒险直通模式 204
    25.4.2 ID/EX间数据冒险引发停顿→ ID/MEM间直通模式 207
    25.4.3 riscv-tests测试 209
    第Ⅳ部分向量扩展指令的实现
    第26章什么是向量指令 212
    26.1 什么是SIMD 212
    26.2 既有的向量架构 215
    26.3 RISC-V向量指令和SIMD指令的不同 216
    26.3.1 SIMD指令的向量寄存器长度 216
    26.3.2 RVV指令的向量寄存器长度 217
    26.4 在第Ⅳ部分完成的Chisel代码 219
    第27章 VSETVLI指令的实现 227
    27.1 RISC-V的VSETVLI指令定义 227
    27.2 VTYPE 228
    27.2.1 SEW和LMUL 229
    27.2.2 vill、vta、vma 231
    27.3 Chisel的实现 233
    27.3.1 指令位模式的定义 233
    27.3.2 译码信号的生成(ID阶段) 233
    27.3.3 向量CSR的写入(MEM阶段) 234
    27.3.4 VL的寄存器回写(WB阶段) 235
    27.4 运行测试 235
    27.4.1 e32/m1 测试 235
    27.4.2 e64/m1 测试 239
    27.4.3 e32/m2 测试 240
    第28章向量加载指令的实现 242
    28.1 unit-stride向量加载指令定义 243
    28.1.1 SEW和EEW 244
    28.1.2 位配置 245
    28.2 Chisel的实现 246
    28.2.1 指令位模式的定义 246
    28.2.2 DmemPortIo的扩展 246
    28.2.3 添加向量寄存器 247
    28.2.4 译码信号的生成(ID阶段) 247
    28.2.5 向量加载数据的寄存器回写(WB阶段) 247
    28.2.6 从存储器读取向量数据(使用Memory类) 249
    28.2.7 添加调试信号 250
    28.3 运行测试 250
    28.3.1 e32/m1 测试 250
    28.3.2 e64/m1 测试 254
    28.3.3 e32/m2 测试 256
    第29章向量加法指令VADD.VV的实现 260
    29.1 RISC-V的VADD.VV指令定义 260
    29.2 Chisel的实现 261
    29.2.1 指令位模式的定义 261
    29.2.2 向量寄存器的读取(ID阶段) 261
    29.2.3 译码信号的生成(ID阶段) 262
    29.2.4 添加向量加法器(EX阶段) 262
    29.2.5 加法结果的寄存器回写(WB阶段) 265
    29.2.6 添加调试信号 265
    29.3 运行测试 265
    29.3.1 e32/m1 测试 265
    29.3.2 e64/m1 测试 269
    29.3.3 e32/m2 测试 272
    第30章向量存储指令的实现 275
    30.1 unit-stride向量存储指令定义 275
    30.2 Chisel的实现 276
    30.2.1 指令位模式的定义 276
    30.2.2 DmemPortIo的扩展 276
    30.2.3 译码信号的生成,存储数据的读取(ID阶段) 277
    30.2.4 存储数据的连接(MEM阶段) 277
    30.2.5 向量数据存储器的写入(使用Memory类) 278
    30.3 运行测试 279
    30.3.1 e32/m1 测试 279
    30.3.2 e64/m1 测试 282
    30.3.3 e32/m2 测试 285
    第Ⅴ部分自定义指令的实现
    第31章自定义指令的意义 290
    31.1 单核的性能提升和极限 290
    31.1.1 摩尔定律 290
    31.1.2 登纳德定律 291
    31.1.3 登纳德定律的崩溃 291
    31.2 多核并行处理的效率提升和极限 291
    31.2.1 转向多核 291
    31.2.2 并行处理的效率提升极限 292
    31.3 DSA的可能性 293
    31.3.1 ASIC 293
    31.3.2 FPGA 293
    31.3.3 DSA的缺点 294
    31.4 DSA和RISC-V 294
    31.4.1 自由的架构设计 294
    31.4.2 自定义指令 295
    第32章种群统计指令的实现 298
    32.1 什么是种群统计指令 298
    32.2 不实现自定义指令时的种群统计程序 299
    32.3 自定义指令编译器(汇编器)实现 300
    32.3.1 GNU Assembler概要 300
    32.3.2 添加PCNT指令到GAS 303
    32.3.3 编译器的二次构建 309
    32.3.4 PCNT指令的编译 309
    32.4 Chisel的实现 310
    32.4.1 指令列的定义 310
    32.4.2 译码信号的生成(ID阶段) 310
    32.4.3 添加ALU(EX阶段) 311
    32.5 运行测试 311
    附录 RISC-V的价值
    A.1 开源ISA的重要性 314
    A.2 RISC-V的应用目标 315
    A.2.1 兼顾高性能和低成本的DSA 315
    A.2.2 廉价的通用CPU 316
    A.2.3 任何人都能轻松学习、实践的教育环境 316
    A.3 芯片制造的成本壁垒及未来 316
帮助中心
公司简介
联系我们
常见问题
新手上路
发票制度
积分说明
购物指南
配送方式
配送时间及费用
配送查询说明
配送范围
快递查询
售后服务
退换货说明
退换货流程
投诉或建议
版权声明
经营资质
营业执照
出版社经营许可证