代码拉取完成,页面将自动刷新
同步操作将从 DENGCHOW/XhngGPU 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
18:57 2024/5/11
## CPU 设计
从写下第一行 `Hello, World` 代码、点亮第一个 LED 开始,陆续接触了 51、AVR、ARM Cortex-M/A、RISC-V 多种处理器架构,使用过诸如 8051、Arduino、MSP430、STM32、GD32、i.MX6ULL、ESP 等一系列的芯片,不敢自诩精通,但也略知一二
早在 2018 年的时候,萌生了一个设计 MCU 的想法,以演示计算机体系结构和单片机原理中大部分的内容,加上对 FPGA 和数字电路的理解,计划在未来的某一天去真正的实现
因为种种原因,这个计划被搁置。直到 2020 年,国科大的几个本科生在包云岗老师的带领下,使用 Chisel 语言设计了一款基于 RV64 的单发射处理器,并成功流片,并在流片后的处理器上成功运行了 Linux 和 RT-Thread,让我开始重新考虑这项工作
但是 NutShell 使用 Chisel 语言编写(一种基于 Scala 函数式编程语言扩展的硬件模块化设计语言),生成的 Verilog 代码可读性差,用来做架构设计和功能验证或许是不错的选择
*注:以上仅是个人的见解,并且个人没有大型 CPU 的设计经历,因此对 Chisel 的评价只是从个人的喜好和体验出发*
*注:截至 2024 年,香山系列处理器已经成功迭代了多个版本,其中 "雁栖湖" 架构正逐渐向 ARM 的 A76 对齐,并且 ML、DL 的发展,或许某一天 Chisel 会成为 Hardware Design 的主流选择*
最终决定使用 Verilog 编写一个 **5 级流水线顺序单发射** 处理器
- 支持在 Windows、Linux 平台进行仿真(VCS、iVerilog,帮助学习 IC 前端设计、逻辑验证、综合等流程等)
- 适配 FPGA 平台(Xilinx,以及国产 FPGA,帮助学习 FPGA 设计流程、时序约束等)
- 支持 MCU 的全部功能(帮助学习 bootloader、driver、RTOS、编译原理、调试等)
- ...
虽然简单,但是可以通过实践的方式去学习原本在书本上的内容,是我的初衷
2021 年,一个基于 RISC-V 指令集的 **5 级流水线顺序单发射** 处理器设计完成。完全由 Verilog 语言编写,RTL 设计上也尽可能使用 "所见即所得" 的设计理念,与综合后的门电路的映射关系更加直观。并且增加了 RV32FD 扩展指令集,提供了学习 IEEE-754 浮点数的平台
> yuheng-riscv-soc: https://gitee.com/dengchow/yuheng-riscv-soc.git
> jiuzhang-fpu: https://gitee.com/dengchow/jiuzhang-fpu.git
> XEMU: https://gitee.com/dengchow/xemu.git
> TraSH: https://gitee.com/dengchow/TraSH.git
因为是顺序处理器,不支持乱序、超标量,没有 Cache、分支预测,也不支持向量运算,在很多业内人士眼里:**This is a f\*\*k student toy!**
评价很中肯,因为从设计之初,我就没有计划把它打造成一个真正的商用处理器,只是想给一些想从事相关行业的人员一个入门平台,去理解计算机的底层原理。这个社会或许是太浮躁了,我们可以站在巨人的肩膀上看世界,但是我们无法成为别人的肩膀
读完一本计算机组成原理就可以完成全部工作,难度和开发工作量不算大,毕竟计算机从 1946 年的 ENIAC 诞生到今天,冯·诺依曼的存储程序思想,作为计算机的基本理论就没变过
不管怎样,**Half love, Half live.**
## GPU 设计
相比 CPU,GPU 可以完成大批量的简单运算,在图像处理、ML 等需要大量运算的场景无疑可以极大地减轻 CPU 的负担,毕竟这些运算非常简单,但是需要运算的数据量过于庞大
将多个具备运算单元内核堆叠(将多个 CPU 的 ALU 堆叠),组成最简单的 GPGPU,对此,tiny-gpu 项目做出了很好的示范(tiny-gpu 并非简单的多 CPU 堆叠,它有着和 NVIDIA GPU 相似的架构)
> tiny-gpu: https://github.com/adam-maj/tiny-gpu.git
该项目的作者参考 NVIDIA 的 GPU 架构设计了 GPU,并且成功运行了设计的 11 条指令
> "While there are lots of resources to learn about GPU programming, there's almost nothing available to learn about how GPU's work at a hardware level. Tiny-gpu is try to figure out what's going on." — Overview of tiny-gpu
RISC-V 架构支持 P 扩展、V 扩展,同样可以进行 SIMD,同样可以像 GPU 一样对计算进行加速。实现一个 RV32I + V 扩展的 CPU,然后将多个这样的 CPU 堆叠在一起,或许这就是最原始的 SIMT
我并不想仅仅完成一个 GPGPU,因为我已经完成了一个基于 RISC-V 的 CPU,只是简单的改造让其支持并行计算无法满足我的期望。我希望完成一个真正的 GPU,准确的说是一张显卡,插到 PC 主板上,安装驱动,具备最基本的图形渲染管线,尽管运算的很慢
在我认知的范围内,消费级的 GPU 是一种高端、闭源的产品,我们仅能从厂家发布的白皮书和产品手册中了解 GPU 的冰山一角。对于 GPU,通过学习计算机图形学可以很轻松获得渲染方面的知识,通过 DirectX、OpenGL、Vulcan 提供的 API,我们可以很容易在应用程序中去使用 GPU,但是如果不是相关公司的从业人员,很难能够解到底层。或许在我不知道的世界,一些高校的实验室、高校的学生可以获得 NVIDIA、AMD 的支持,但是对于大部分的人来说,这件事情可望而不可即
因此,我决定做一个真正的 GPU,以帮助理解图形渲染,并且为它写一个基于 Windows WDDM 的 Display-only 驱动,使得可以作为一张真正的显卡被 PC 识别并使用
通过这个项目,可以完成接触和了解多种开发平台的开发流程
- 使用 Xilinx 的 7K325T 平台进行实现(接近 51K 个 LUT)
- 学习 Windows display 驱动的工作流程
- 支持使用 WinDbg 对驱动进行调试
- 学习 WDDM 框架,并对基于 WDDM 框架驱动进行调试
- 学习 PCIe、DDR 的使用
- 学习 HDMI、DP 等显示端口的使用
- ...
在将来的某一天,国内 GPU 厂家能够开放它的 GPU 硬件,开发者可以自行修改 GPU 驱动(开发者模式 or 实验室模式),那么这个项目就可以宣告结束了。毕竟一个只有 20MHz 的 GPU 去协助主屏 3.5GHz 的 CPU,简直就是狗骑吕布
做 GPU 对我个人来说没有任何帮助,除了可以勉强锻炼我的 RTL 编码、驱动开发能力,并不能给我带来什么。正如前文提到的,在内人士眼里,或许它是:**This is a f\*\*k student toy again!**
为了生活的几两碎银,一切的喜好都是空谈
或许,**Alive is a live with no love.**
ATONEMAN
2024/5/11
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。