本科阶段能在FPGA上做一个CPU并运行自己写的操作系统算什么水平?

1e0e5971ef1668f9ab461a601b5d1a8b.png

hi , 大家好,前几天逛知乎,看到一个比较厉害学生,自己研发完成CPU,操作系统,编译器,编程语言,还用自己设计的编程语言开发了一些应用软件,确实学习能力很强!值得我们学习!

作者:Max Xing

https://www.zhihu.com/question/377489812/answer/237143084

目前体系结构方向研究生在读。我的本科毕设大致就是如此:

在FPGA上用Chisel写了一个RISC-V RV32IMA的五级流水线CPU,带分支预测/I$/D$/MMU,支持M/S/U-mode,可综合,还做了个简单的SoC。

https://github.com/MaxXSoft/Fuxi

自己设计了一门系统编程语言,带各种“高级语法特性”(其实全是语法糖),用C++和LLVM实现了它的编译器。

https://github.com/MaxXSoft/YuLang

之后用这个编程语言写了个能跑在SoC上的玩具操作系统(虽然最后跑在FPGA上的时候发现硬件部分有一些bug导致有一定概率崩掉,就嗯拖,现在也没修完(逃

https://github.com/MaxXSoft/GeeOS

还写了一系列裸机程序——比如俄罗斯方块、幻灯片放映程序之类

https://github.com/MaxXSoft/Fuxi-Soft

我毕设答辩就是用自己搞的这套东西播放的幻灯片。

ae1916c306970a38a7f4a26f3f51486c.png

 在自己搞的怪东西上播放幻灯片,当然显示器不是自己做的(

事情可能得从更早的时候说起:

高中前我就会使用VB6开发一些桌面程序。高中的时候希望在自己的程序中添加“插件”或者“脚本”功能,于是开始研究脚本语言,进而得知还有“高级语言虚拟机”这种东西。后来看了  大大的这篇回答决定自己写一个VM,于是接受建议看了几眼ARM的指令手册(巨长无比,当然不可能看得完)。16年的时候在知乎疯狂看  R大的各种回答,乐此不疲。

上了大学,我决定造一些和编程语言/VM/编译器的轮子。先凭之前对ARM和x86的印象随便设计了一些字节码,然后写了个VM。后来设计了个编程语言,跟着LLVM的Kaleidoscope教程写了个简单的编译器前端,自由发挥搞了个SSA IR(但现在看来其中有很多问题),试图做一个到VM字节码的编译器。不过因为当时还很菜,搞到最后实在进行不下去了,遂烂尾。

到上大二之前的一段时间内,我认为自己只适合搞搞编译这类软件的东西。大二接触了数电、数逻、计组等课程,不得不去用Vivado搞一些能跑在FPGA上的玩意。于是数电大作业做了个FPGA上的Flappy Bird游戏,大概长这样,鸟和管子都是方块:

3ef8c6d45303ea1060cf3fadd4494877.png

极其抽象的Flappy Bird

当时的数电课程给同学们提供的指导非常少,只有一些板卡的手册,Verilog相关的内容基本没提。不过我还是在连阻塞/非阻塞赋值都没太搞明白的情况下,和组员们一起硬着头皮写完了这个作业(这样不好,小孩子不要学),给老师留下了深刻印象。

后来数字逻辑课大作业做了个8-bit的单周期CPU,自己设计了指令系统,使得这个CPU是图灵完备的。为了展示CPU的功能,我还在外面加了个简单的显示控制器,负责把CPU连着的某个地址空间的内存输出到VGA。于是这个CPU可以画一些图形:

cf045872a7e59b9ed01cb5557561a320.png

                                                     谢尔宾斯基(等腰)三角形

再然后数逻老师找到我,说有个比赛叫“龙芯杯”,就是那种很硬核的,要求参赛选手组队造一个MIPS CPU,然后还得在上面跑操作系统的比赛。老师问我要不要参加,我觉得这我搞不了啊,我一个搞编译的,怎么到CPU比赛来了呢?不过思考过后,我当时和老师说,我可以参赛,但可能只负责软件部分,硬件的内容让其他同学来完成吧。

后来在学校待了一暑假打比赛,之前报名的十来个同学走得七七八八,算上我就剩四个人了。我一看,这特喵和说好的不一样啊!于是只能自己随便糊一个CPU了。好在初赛截止之前把所有功能测试都跑过了,性能测试也有成绩,后来顺利和队友苟进决赛,决赛在上面移植了一个μC/OS,最终拿了个三等奖。当时的CPU项目:

https://github.com/ustb-owl/Uranus

不过有一说一,龙芯杯里的巨佬太多了,当时去参赛的时候我就感到了阵阵威压,气氛有点悲凉肃杀,我被按在地上疯狂摩擦,最后只能哭爹喊妈。题主如果想认识其他在FPGA上跑操作系统的巨佬,不妨去关注一下这个比赛。

大三的时候学了更多的专业必修和选修课,像是操作系统、编译原理之类。我保持一贯的传统,在所有的大作业上疯狂整活。比如:

  • OS大作业,用自己搭建的环境代替学校提供的环境,完成了OS的全部实验,修了一些内核bug,往里面移植了个c4编译器(其实并不难),还把环境封装起来写了个使用教程给学弟学妹们用。

  • 编译大作业,手写了个PL/0前端,然后用LLVM给它做了个后端(调API的事情,也不难)。

  • OOP大作业,基于SDL2用C++写了个简单的“游戏引擎框架”,然后在上面开发了一个空战游戏。

  • 微机接口大作业,把实验箱上所有的芯片和外设都调通了,然后设计了个能用上所有芯片的声控游戏,写了1000多行汇编。

诸如此类。

大四要做毕设的时候决定整一波大的,于是提前联系好老师,从CPU开始,到编译器,再到操作系统,做了一个完整的计算机系统出来。当时是2020年,疫情原因只能闷在家里,不过这反倒让我更能专注在造轮子这件事上了。后来我就做出了文章开头的那些项目。


最后,要做到这些需要掌握什么知识?

我觉得相比知识,兴趣、决心和耐心才是最重要的。有了兴趣,你就会自己尝试去网上了解相关知识。现在网上的教程一搜一大把,如果你真的能静下心来跟着做的话,你最后总能做出一点成果的。有了决心,你就会真的去动手实践,而不是幻想这些东西有多好做,或者有多难做,迟迟不肯动手。有了耐心,你就会在遇到bug和其他困难的时候用心思考,接着着手去解决他们,而不是半途而废,最后留下遗憾。

其次,在本科课程的大作业里多整点狠活。这是为数不多可以将你的“疯狂”想法付诸实践的机会,并且如果做得好的话,这门课的成绩至少不会差,而且还会让老师们记住你。老师们一旦记住你,他们就可能会给你提供更多施展自己的机会,比如拉你参加比赛,拉你进实验室,甚至是介绍实习和工作。

最后,作为面试官,这位同学应该可以拿到校招最高待遇(SSP offer),希望大家能够通过技术改变自己的命运,为将来打好基础!


欢迎加入极客星球,分享多年工作经验和基础技术深度理解,扩展视野,直播分享,面试问题,作为大厂专业面试官,可以帮助想进各类大厂(芯片,自动驾驶,嵌入式,互联网等)制定学习路线和学习帮助,在工作中想要普升和高薪的同学找到最佳学习和转型指导, 可以分享各种不同公司宝贵的职场工作经验, 项目经验,普升经验,希望大家站在前辈们的肩膀上(前期时间很宝贵,希望你们早点遇到自己的贵人),少走弯路,做得更好。详细点击查看-> 极客星球

5c6963f8918f8bc4ebad76d939bcba3b.jpeg

IT工程师的成长路线


这里我正在准备搞一个后端集训营,针对那些想彻底改变提高自己技术能力,当前招聘要求越来越高,要想获得高新offer或者快速普升高级职位,必须拿出自己的实力,尤其是背景不怎么好的同学,技术实力就是最好的竞争力,但很多知识需要历练才能理解深刻,所以需要有人指导才行,这样才能快速崛起,从上到下打通整个技术链条(从编程语言,算法,应用框架,中间件,到底层(Linux内核),甚至到底层硬件等),加强内功修炼(硬件+软件),加强基本功, 让以后路更好走,希望尽最大努力帮助大家。

详细了解-->>后端集训营|突飞猛进

de58ce09cd606fa5265fe504b8bd0d66.jpeg

并发/并行技术全景指南


29fe0ef368ec0ff5be9781ac8d8b587c.jpeg

Linux调度系统全景图

你好,这里是极客重生,我是阿荣,大家都叫我荣哥,从华为->外企->到互联网大厂,目前是大厂资深工程师,多次获得五星员工,多年职场经验,技术扎实,专业后端开发和后台架构设计,热爱底层技术,丰富的实战经验,分享技术的本质原理,希望帮助更多人蜕变重生,拿BAT大厂offer,培养高级工程师能力,成为技术专家,实现高薪梦想,期待你的关注!点击蓝字查看我的成长之路

校招/社招/简历/面试技巧/大厂技术栈分析/后端开发进阶/优秀开源项目/直播分享/技术视野/实战高手等, 极客星球希望成为最有技术价值星球,尽最大努力为星球的同学提供面试,跳槽,技术成长帮助!详情查看->极客星球

感谢大家转发点赞

### 回答1: PSPICE 17.2 是一种用于电子电路仿真和分析的软件工具。下面是一份简单的 PSpice 17.2 使用初级教程: 1. 安装和启动:首先,你需要下载安装 PSpice 17.2 软件。安装完成后,双击图标启动软件。 2. 创建电路:在软件界面上,选择“文件”>“新建”,然后在电路编辑器中创建你的电路。你可以从元件库中选择组件,将其拖放到画布上。连接元件的引脚以构建电路。 3. 设置元件参数:双击元件以打开元件参数设置对话框。在对话框中,设置元件的值、名称和其他参数。对于电阻、电容等基本元件,可以直接输入数值。 4. 设置仿真配置:选择“仿真”>“设置和校验”,然后在仿真设置对话框中选择仿真的类型和参数。你可以选择直流分析、交流分析、暂态分析等。设置仿真参数后,点击“确定”。 5. 运行仿真:选择“仿真”>“运行”来启动仿真。在仿真过程中,软件将模拟电路的响应,将结果输出到仿真波形窗口中。 6. 查看仿真结果:在仿真波形窗口中,你可以查看各个元件的电流、电压等参数随时间变化的波形。你还可以对波形进行放大、缩小、平移等操作,以更详细地分析电路的性能。 7. 保存和导出结果:在仿真过程中,你可以选择将结果保存为文件或导出为其他格式,如图像文件或数据文件。 以上是 PSpice 17.2 使用初级教程的基本步骤。随着实践的深入,你可以进一步了解复杂电路的建模和分析方法,尝试更高级的功能和技术。 ### 回答2: PSPICE 17.2是一款电子电路仿真软件,用于对电路进行分析和验证。以下是PSPICE 17.2的使用初级教程: 1. 下载和安装:在官方网站上下载PSPICE 17.2进行安装。 2. 组件库:打开PSPICE软件后,点击“Capture CIS”图标,进入组件库界面。选择适当的电子元件,如电阻、电容、二极管等,将它们拖放到画布上。 3. 电路连接:在画布上拖放所需元件后,使用导线工具连接它们。点击导线图标,选择合适的连接方式,将其拖动到适当的端口上。 4. 参数设定:双击元件,弹出元件属性对话框。在这里设置元件的数值,例如电阻的阻值、电容的电容值等。 5. 电源设置:在画布上点击右键,选择“Power Sources”,然后选择适当的电源,如直流电源或交流电源。设置电源的电压或电流数值。 6. 仿真设置:点击画布上方的“PSpice”选项,选择“Edit Simulation Profile”打开仿真配置对话框。在仿真配置中,设置仿真参数,如仿真类型(直流、交流、脉冲等)、仿真时间等。 7. 仿真运行:在仿真配置对话框中点击“Run”按钮,开始进行电路仿真运行。仿真完成后,可以查看分析仿真结果,如电流、电压、功率等。 8. 结果分析:通过菜单栏中的“PSpice>Probe”选项,打开特定信号的仿真结果。通过选择信号节点,可以显示该信号的波形、幅值和频谱等信息。 9. 数据输出:仿真结束后,可以通过“PSpice>Results”菜单栏选项,导出仿真结果到文本文件,以供后续分析。 10. 误差调整:如果仿真结果与预期不符,可以检查电路连接、元件参数等以找出问题。根据需要进行调整,重新运行仿真以验证改进效果。 以上就是PSPICE 17.2使用初级教程的简要介绍。在使用过程中,请参考软件的帮助文件和官方文档,以获取更详细的指导和解决方法。任何新的软件都需要不断的实践和尝试,希望这个教程能对你有所帮助。 ### 回答3: PSPICE 17.2是一款常用的电路仿真软件,用于电路设计和分析。下面是一个简要的PSPICE 17.2的初级教程: 1. 下载和安装:首先,从官方网站下载PSPICE 17.2,按照安装向导进行安装。安装完成后,打开软件。 2. 创建新工程:在PSPICE 主界面上,点击“File”菜单,然后选择“New Project”来创建一个新的工程。给工程起一个适当的名字,选择工程的存储位置。 3. 添加电路元件:在工程界面上,点击“Place”图标,然后选择不同的元件来构建你的电路。你可以从库中选择各种电子元件,如电阻、电容、电感等,将它们拖放到工程界面上。 4. 连接元件:选择“Wire”图标,然后点击元件的引脚来连接它们。确保连接顺序正确,以保证电路的正确性。 5. 设置元件参数:对于每个添加的元件,你需要设置它们的参数。右键点击元件,选择“Edit Propertiess”,然后在弹出的窗口中输入适当的参数值。 6. 添加电源:在电路中添加电源,以提供电路所需的电能。选择“Place”图标,然后选择合适的电源元件将其拖放到电路中。同样,设置电源的参数值。 7. 设置仿真配置:在工程界面上,点击“PSpice”菜单,然后选择“Edit Simulation Profile”来设置仿真配置参数。你可以选择仿真类型、仿真时间和仿真步长等。 8. 运行仿真:点击“PSpice”菜单,选择“Run”来运行仿真。PSPICE将自动运行仿真显示结果。 9. 分析和优化:根据仿真结果,可以分析和优化电路的性能。你可以观察电流、电压和功率等参数,以评估电路的性能,根据需要进行调整。 10. 保存和导出结果:在分析和优化完成后,可以保存你的工程导出结果。点击“File”菜单,选择“Save Project”来保存工程,然后选择“Outut”菜单,选择“Export”来导出结果。 以上是PSPICE 17.2的初级教程的简要介绍。通过以上步骤,你可以开始使用PSPICE 17.2进行电路设计和仿真。在实践中不断探索和学习,你将成为一个熟练的PSPICE用户。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值