百科问答小站 logo
百科问答小站 font logo



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

  

user avatar   max-xing 网友的相关建议: 
      

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • OS大作业,用自己搭建的环境代替学校提供的环境,完成了OS的全部实验,修了一些内核bug,往里面移植了个c4编译器(其实并不难),还把环境封装起来写了个使用教程给学弟学妹们用。
  • 编译大作业,手写了个PL/0前端,然后用LLVM给它做了个后端(调API的事情,也不难)。
  • OOP大作业,基于SDL2用C++写了个简单的“游戏引擎框架”,然后在上面开发了一个空战游戏。
  • 微机接口大作业,把实验箱上所有的芯片和外设都调通了,然后设计了个能用上所有芯片的声控游戏,写了1000多行汇编。

诸如此类。

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


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

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

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

祝题主最后也能成为那个在自己的CPU上,跑自己的OS的人。


user avatar   shinez-zhou 网友的相关建议: 
      

这次舆论的重点在于警察到底是多久赶到的。

没拜码头,收保护费,打砸门面这种原因我们都知道,也不怕;

但是公权力私用或者黑白勾结这种事,就会让人非常害怕;

如果西安公权力真的黑白勾结,还睁眼说瞎话,那就需要处理整顿了。

我朝的治安也不是一直这么好的,人民也不是软弱无比的,60年代西安打的也很凶的。难不成西安各公司以后都要雇佣保安公司保护经营?

这次出警距离1公里,走路10分钟都到了,所以就坐等这次真实的出警时间是多少了。





  

相关话题

  CPU内部各个部件的时延大概是多少?(皮秒,纳秒)? 
  中央处理器(CPU)内部电路连起来有多长? 
  EDA软件(与IC设计相关的如ISE.etc)的发展趋势? 
  未来内存和硬盘会合并吗? 
  发生中断时CPU怎么知道程序的地址? 
  R7 1800X 8核目前可以对标因特尔哪款处理器? 
  RISC-V 能成为中国芯片弯道超车的机会吗? 
  程序在地址空间中的位置是何时,以及如何决定的? 
  CPU是怎么发明出来的? 
  单cpu多核体系是否可以“并行"(而不是并发)执行多个进程? 

前一个讨论
俄罗斯军队在基辅郊区有没有大屠杀?
下一个讨论
有哪些关于C++高性能服务器开发的高质量博客?





© 2024-11-09 - tinynew.org. All Rights Reserved.
© 2024-11-09 - tinynew.org. 保留所有权利