从零开始,耗时两年,19岁小伙自制32位Risc-V处理器,可玩贪吃蛇

文章中心8个月前发布 admin
59 0 0

白手起家,耗时两年,19岁男孩自制32位Risc-V处理器,能玩贪吃蛇

机器心脏报告

编辑:杜伟

设计CPU、制作原型、最终产品到软件编程,这个19岁的极客男孩花了整整两年的时间。

RISC-V是一种基于精简指令集(RISC)原理的开源指令集架构(ISA)。它是与开源软件运动相对应的“开源硬件”。该项目于2010年在加州大学伯克利分校启动,贡献者是校外的志愿者和行业工人。

RISC-V指令集的设计考虑到了小型、快速、低功耗的现实,但并没有过度设计特定的微架构。与大多数指令集相比,RISC-V指令集可以自由地用于任何目的,允许任何人设计、制造和销售RISC-V芯片和软件。

2021年4月上旬,热衷于自制CPU的19岁极客FilipSzkander自行设计制造了一款32位功能性RISC-VCPU,打造了一台不同于其他人的个人电脑“PineappleONE”自制电脑。”。Filip花了两年时间来设计、调试和安装CPU和所有硬件。Filip还受邀在东京RISC-VDaysTokyo2021Spring上进行演示。他也成为该会议自2017年举办以来最年轻的演讲者。

从零开始,耗时两年,19岁小伙自制32位Risc-V处理器,可玩贪吃蛇

由FilipSzkander创建。

总体而言,“菠萝一号”由8块垂直堆叠的方形印刷电路板组成,边高约10厘米,再加上VGA显示接口卡。总共使用了230多个集成电路,其中大部分是74HCT系列逻辑芯片。示意图如下:

从零开始,耗时两年,19岁小伙自制32位Risc-V处理器,可玩贪吃蛇

32位RISC-VCPU的规格如下:

最大时钟速度:500kHz

程序存储器:512kB

内存512kB

闪存512kB

VGA输出:200×150px(黑白)

2个8位输入端口

2个8位输出端口

目前,“菠萝一号”电脑支持的命令包括:??HELLO、HI、PEEK、POKE、SYSTEMINFORMATION、CLEAR等。

从零开始,耗时两年,19岁小伙自制32位Risc-V处理器,可玩贪吃蛇

另外,虽然CPU运行频率只有500kHz,但是玩贪吃蛇游戏还是绰绰有余的:

从零开始,耗时两年,19岁小伙自制32位Risc-V处理器,可玩贪吃蛇

Filip在博客中介绍了他从设计CPU、制作原型、输入/输出端口、最终产品到软件编程的技术细节(以下以第一人称描述)。

设计您自己的RISC-VCPU

之前,我在Youtube上发现了电子爱好者BenEater关于自制CPU(搭建著名的8位计算机和经典的6502微处理器)的教程,于是我非常着迷,并产生了制作自己的CPU的想法。然而,我觉得自己对CPU的基础知识了解还不够,所以我观看了GoogleRobotics的软件工程师RobertBaruch的教程视频,他只使用基本的逻辑组件构建了32位RISC-VCPU。

之后,我开始在一个名为“Logisim-Evolution”的项目中构建自己的RISC-VCPU。我为自己设定的目标是不使用任何微控制器或FPGA,只使用基本的分立逻辑组件。编译器支持的最基本的RISC-VCPU必须包含扩展的“整数(I)”并且至少为32位。另外,我需要安装VGA(视频图形阵列)输出卡。

我在Logisim项目上花了整整6个月的时间,终于得到了一个可运行的程序模拟。下一步是绘制所有模块的原理图,从JLCPCB网站购买所有PCB(印刷电路板)并重新设计。由于这是我第一次购买PCB,我担心会把一切搞砸,所以我决定将设计过程分成模块,一次购买几个,以免不知所措。

Logisim-Evolution项目中的仿真示意图如下:

从零开始,耗时两年,19岁小伙自制32位Risc-V处理器,可玩贪吃蛇

经过两轮设计,只剩下几个模块需要处理,其中之一就是直接生成器。当我绞尽脑汁试图将其从模拟转换为正确的原理图时,我发现我犯了一个致命的错误:我不知道模拟是如何工作的。幸运的是,修复并没有那么困难,因此对已经生产出来的PCB进行了改进。

原型

接下来,我通过将开源电子原型平台Arduino连接到每个PCB的输入来测试PCB,同时监控输出并将其与预测进行比较。设置完成后,一切都会自动运行。每次测试至少持续几个小时。

当我准备好将所有PCB组装在一起时,模块已间隔开它安装在木材上并使用3D打印垫片固定。然后上传测试程序开始测试。

原型机原理图如下:

从零开始,耗时两年,19岁小伙自制32位Risc-V处理器,可玩贪吃蛇

Arduino平台仅用于调试,并未在最终产品中使用。

尽管我单独测试了每个PCB,但第一次尝试就失败了,这并不奇怪。我不得不花费大量的时间寻找失败的原因,并发现了一些错误,例如很难发现的时序问题。

输入/输出端口

我构建的RISC-VCPU有两个8位输入端口和两个8位输出端口,您可以通过RJ50连接器在前面板上访问它们。另外,顶部模块上有一个7段显示器,它连接到一个可以通过程序访问的寄存器。

至于连接VGA显示器,我受BenEater的启发制作了一张VGA卡。VGA的输出分辨率为200×150像素,黑白显示。虽然我想实现彩色显示,但它需要很大的V-RAM,太贵了,所以我放弃了。

下板将显示存储在EEPROM(电可擦除可编程只读存储器,型号39SF010A)中的静态图像。我在最终产品中使用了双端口SRAM(静态随机存取存储器)。

从零开始,耗时两年,19岁小伙自制32位Risc-V处理器,可玩贪吃蛇

我还构建了一些末端有RJ50连接器的演示I/O模块。

从零开始,耗时两年,19岁小伙自制32位Risc-V处理器,可玩贪吃蛇

PS/2解码器是现成的,我没有时间自己制作。

完成品

让原型运行起来并不容易,但大约5个月后,我终于成功了。

我重新设计了所有PCB,修复了错误,并将它们堆叠在塔状结构中,因此每个模块仅通过排针连接。重新设计PCB,然后拿到最终的PCB订单,花了大约3个月的时间。

此外,我使用Prusai33D打印机设计并打印了一个圆柱形外壳,该外壳足够大以容纳所有PCB和I/O连接器,这也允许将键盘和VGA显示器直接连接到计算机。

从零开始,耗时两年,19岁小伙自制32位Risc-V处理器,可玩贪吃蛇

最终产品,左:不带气缸外壳,右:已安装气缸外壳。

最终产品的部件拆解:

从零开始,耗时两年,19岁小伙自制32位Risc-V处理器,可玩贪吃蛇

框图:

从零开始,耗时两年,19岁小伙自制32位Risc-V处理器,可玩贪吃蛇

编程

终于,经过数百个小时的设计、焊接、调试,我终于看到了成功的曙光。在朋友JanVykydal的帮助下,我搭建了一个兼容RISC-V且运行良好的编译器,并用C语言编写了一些系统软件和演示程序。该编译器生成机器代码,我使用Python脚本接收代码并将其闪存到CPU内存中。

从零开始,耗时两年,19岁小伙自制32位Risc-V处理器,可玩贪吃蛇

我还创建了一个包含一些有用功能的库,代码如下:

从零开始,耗时两年,19岁小伙自制32位Risc-V处理器,可玩贪吃蛇

松壳:

使用这个库,我创建了一个简单的shell程序,可以通过连接到其中一个输入端口的PS/2键盘进行交互。我使用带有模块的PS/2键盘将输入信号解码为8位。

从零开始,耗时两年,19岁小伙自制32位Risc-V处理器,可玩贪吃蛇

你完成了!

参考链接:

https://riscv-association.jp/en/2021/04/filip-szkandera/

https://hackaday.io/project/178826-pineapple-one/details

https://www.youtube.com/watch?vNUAVKNVrPh0t16s

https://spectrum.ieee.org/geek-life/hands-on/build-a-riscv-cpu-from-scratch

© 版权声明

相关文章