RISC-V是一种基于精简指令集(RISC)原理的开源指令集架构(ISA),是一种与开源软件运动相对应的“开源硬件”。该项目于2010年在加州大学伯克利分校开始,由来自大学以外的志愿者和行业工人的贡献者参与。RISC-V指令集的设计考虑到了小、快、低功耗的现实,但并没有过度设计特定的微架构。与大多数指令集不同,RISC-V指令集可以免费用于任何目的,允许任何人设计、制造和销售RISC-V芯片和软件。2021年4月上旬,热衷于自制CPU的19岁极客FilipSzkander自行设计并制造了一款32位功能RISC-VCPU,打造了一台不同于以往的个人电脑“菠萝一号”其他自制电脑。菠萝一号)。菲利普花了两年时间设计、调试和安装CPU以及所有硬件。Filip还受邀在东京RISC-VDaysTokyo2021Spring上进行演示,他成为自2017年大会举办以来最年轻的演讲者。由FilipSzkander创作。整体来看,“菠萝一号”由8块方形印刷电路板垂直堆叠而成,边高约10厘米,外加一张VGA显示接口卡。一共使用了230多块集成电路,多为74HCT系列逻辑芯片。原理图如下:32位RISC-VCPU规格如下:最大时钟速度:500kHz程序存储器:512kBRAM512kB闪存512kBVGA输出:200×150px(黑白)28-位输入端口2个8位输出端口目前,《菠萝一号》支持的命令包括:??HELLO、HI、PEEK、POKE、SYSTEMINFORMATION、CLEAR等。此外,虽然CPU的运行速度只有500kHz,但它玩蛇游戏绰绰有余:Filip在博客中介绍了他从设计CPU、制作原型、输入/输出端口、最终产品到软件编程的过程技术细节(以下以第一人称叙述)。设计自己的RISC-VCPU之前在Youtube上找到电子爱好者BenEater自制CPU的教程(构建著名的8位计算机和经典的6502微处理器),非常着迷,于是想出了一个自制的中央处理器的想法。然而,我觉得我对CPU基础知识了解不够,所以我观看了GoogleRobotics软件工程师RobertBaruch的教程视频,他只使用基本逻辑元素构建了一个32位RISC-VCPU。之后,我开始在名为“Logisim-Evolution”的项目中制作自己的RISC-VCPU。我为自己设定的目标是不使用任何微控制器或FPGA,只使用基本的分立逻辑组件。编译器支持的最基本的RISC-VCPU必须包含扩展名“Integer(I)”并且至少为32位。另外,我需要安装一个VGA(视频图形阵列)输出卡。我在Logisim项目上花了整整6个月的时间,终于得到了该程序的工作模拟。下一步是画出所有模块的原理图,从JLCPCB网站上购买所有的PCB(印刷电路板)并重新设计。由于这是我第一次购买PCB,我担心搞砸一切,所以我决定将设计过程分成模块,一次购买几个,这样我就不会不知所措。Logisim-Evolution项目中的仿真示意图如下:经过两轮设计,只剩下几个模块需要处理,其中一个是即时生成器。当我绞尽脑汁试图将其从模拟转化为正确的原理图时,我发现自己犯了一个致命的错误:我不知道模拟是如何工作的。幸运的是,修复起来并没有那么困难,所以对已经制作好的PCB进行了改进。接下来,我通过将开源电子原型平台Arduino连接到每个PCB的输入端来测试PCB,同时监控输出并将其与预测进行比较。一旦设置好,一切都可以自动运行。每个测试至少持续几个小时。当我准备好将所有PCB放在一起时,模块也已按一定间隔安装在木头上,并使用3D打印垫片固定到位。然后上传了一个测试程序,开始测试。样机示意图如下:Arduino平台仅用于调试,不用于最终产品。尽管我单独测试了每个PCB,但第一次尝试失败也就不足为奇了。我不得不花很多时间去寻找失败的原因,并且发现了一些错误,比如很难发现的时序问题。输入/输出端口我构建的RISC-VCPU有两个8位输入端口和两个8位输出端口,您可以通过RJ50连接器在前面板上访问它们。此外,顶部块上有一个7段显示器,它连接到一个可以通过编程访问的寄存器。至于与VGA显示器的连接,我制作了一张受BenEater启发的VGA卡。VGA输出分辨率为200×150像素,黑白显示。虽然想实现彩色显示,但需要用到大V-RAM,太贵了,所以放弃了。下板将显示存储在EEPROM(电可擦除可编程只读存储器,型号39SF010A)中的静态图像。我在最终产品中使用了双端口SRAM(静态随机存取存储器)。我还构建了一些末端带有RJ50连接器的演示I/O模块。PS/2解码器是现成的,我没有时间自己制作。让原型工作并不容易,大约5个月后,我终于成功了。我又重新设计了所有的PCB,修复了bug,将这些PCB堆叠成塔式结构,所以每个模块只用排针(pinheaders)连接。从重新设计PCB到排列最终PCB大约花了3个月的时间。此外,我使用Prusai33D打印机设计并打印了一个圆柱形外壳,大到足以容纳所有PCB和I/O连接器,这样键盘和VGA显示器也可以直接连接到计算机。最终产品,左:没有圆柱壳,右:安装了圆柱壳。最终产品的组件拆解:框图:编程最后,经过数百小时的设计、焊接和调试,我终于看到了曙光。在我的朋友JanVykydal的帮助下,我建立了一个运行良好的RISC-V兼容编译器,并用C编写了一些系统软件和演示程序。这个编译器生成机器代码,我使用Python脚本接收代码和将其闪存到CPU内存中。我还创建了一个具有一些有用功能的库,代码如下:Pineshell:使用这个库,我创建了一个简单的shell程序,可用于与“连接到其中一个输入端口的PS/2键盘”进行通信。程序交互。我使用带有模块的PS/2键盘将输入信号解码为8位。你完成了!
