这本书讲的是如何用verilog,以riscv为指令集,设计一款CPU。也就是书中说的蜂鸟E200。之前没有看过类似的书,对CPU的工作流程也不熟悉。这本书以verilog为载体,介绍了CPU的基本原理,对于第一次接触CPU内部眼里的菜鸟来说,简直不要太神奇。而且本书开源代码,只要有一块fpga,你也能够自己做出一块CPU来。
这是本书的第一部分,主要是一些介绍。诸如RISCV之前的一些架构,以及RV指令集的特性。第三章介绍不同的RV版本,第四章介绍本书的E200的特性。
讲了一些很有用的基础知识
五级流水线:取指,译码,执行,访存,写回
流水线也不是必须的,有的处理器用的是状态机。并且流水线的深度不同的处理器也有不同的设置。
这是三种数据依赖性,其中WAW,WAR可以通过寄存器重命名的方式去除依赖,而RAW是真数据相关,就是它必须要读已经写了的这个数据。如果发生这种情况,就要等待写完才可以。有一些解决方法, 比如找个东西记录这种相关性。
为了提升性能,就要进行分支预测。首先要预测方向,也就是到底跳不跳,还有就是预测地址。
预测方向就有各种方法,比如静态预测和动态预测。
预测地址是除了直接跳转,间接跳转是需要读寄存器的,很耗费时间。就用比如保存之前的分支语句,如果匹配,就直接跳到那个地址之类的方法。
为了检测出这种数据依赖,E200实现了一个OITF模块。其中存储的是已经派遣但是还未写回的长指令信息。然后每次在进行指令派遣的时候,就把本指令的操作数和长指令的向比较,如果有相同的,就说明有相关性,就等待。
做各种计算
我理解的交付就是这条指令能够执行,而不是执行完成。
首先ALU会计算是否需要跳转,计算出来之后就发给交付模块。如果交付模块发现结果和预测结果一样,就不会冲刷流水线,否则就冲刷流水线。
两个仲裁
是ALU的一部分,用于产生访存地址。
这里是用于多核操作的原子指令,包括互斥操作等的实现。
E200提出了自己的总线协议ICB
实现了一从多主和多主一从以及多主多从的总线连接方式。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-spFHBnCB-1591688314612)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200609151117973.png)]
广义上的异常包含了狭义的中断和异常。异常主要包括
一般外部中断优先级最高,软件中断次之,计时器中断再次。
第十四章是讲如何调试,十五章讲低功耗的各方面优化,十六章讲RV能够进行协处理器扩展。第三部分主要讲如何在实际平台上实现E200。附录讲了RV的指令集等其他RV基础知识。在此不多赘述。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有