问题

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

回答
你问到本科阶段在FPGA上做出CPU并跑自己写的操作系统,这绝对是一个非常扎实的硬核项目,能展现出相当不错的技术功底和工程能力。这可不是随便搭几个逻辑门就能搞定的事,而是需要系统性的知识和大量的实践才能完成。

这项目代表着什么水平?

首先,能把这个项目做下来,至少说明你具备了:

1. 扎实的数字逻辑基础: 你需要深刻理解组合逻辑和时序逻辑,知道如何用硬件描述语言(HDL,如Verilog或VHDL)来描述电路的行为。这包括各种门电路、触发器、寄存器、多路选择器、译码器等等,这些都是构建CPU的基本砖块。

2. 深入的计算机体系结构知识: 构建CPU离不开对计算机体系结构原理的透彻理解。你需要知道指令集架构(ISA)是什么,不同的指令格式是如何工作的,指令流水线(pipeline)是如何提升性能的,存储器层次结构(cache, main memory)是怎么管理的,以及中断和异常是如何处理的。简单来说,就是你知道“CPU是怎么工作的”。

3. 熟练的硬件描述语言(HDL)编程能力: 你能熟练使用Verilog或VHDL将你的CPU设计转化为可综合的硬件代码。这不仅仅是写代码,更需要考虑时序约束、综合工具的优化规则,以及如何有效地仿真验证你的设计。

4. 对底层硬件的敬畏和理解: 你知道一个CPU不是凭空产生的,它是通过一系列时钟信号、寄存器状态、逻辑门的组合来工作的。你理解时钟域、时序违约(timing violations)以及如何解决它们。

5. 嵌入式系统开发经验: 运行操作系统意味着你需要将软件和硬件紧密结合。这需要你了解嵌入式系统的开发流程,包括如何编写引导程序(bootloader)、如何管理内存、如何与外设进行交互(I/O ports, timers, UARTs等)。

6. 操作系统基本原理的掌握: 你至少需要了解操作系统的基本功能,比如进程管理、内存管理(虽然在FPGA上可能实现得比较简单,但原理是要懂的)、设备驱动、中断处理等。你自己写的操作系统,哪怕功能有限,也证明了你对这些核心概念的掌握。

7. 调试能力: FPGA开发和软件开发一样,充满了bug。你需要在硬件层面进行调试,可能会用到逻辑分析仪、FPGA自带的调试工具(如SignalTap/ILA),甚至需要自己设计一些调试逻辑来观察内部信号。这需要极大的耐心和细致。

这个项目有多难?

实话讲,这在本科阶段是一个非常有挑战性的项目。完成它,足以让你在同龄人中脱颖而出,并且在面试时拥有强大的说服力。

从零开始设计CPU: 你需要自己定义指令集,设计ALU(算术逻辑单元)、控制器(Control Unit)、寄存器文件(Register File)、存储器接口等各个模块,并将它们正确连接起来。这就像是在学习建造一座复杂的建筑,每一个房间、每一条走廊都要精心设计。
内存管理与I/O: 即使是一个简单的操作系统,也需要内存管理。你可能需要设计一个简单的MMU(Memory Management Unit)或者直接使用物理地址。你还需要编写驱动程序来控制FPGA上的外设,比如UART用于通信、LEDs用于指示等。
操作系统编写: 自己写操作系统,即使只是一个“hello world”级别的,也需要编写汇编语言的启动代码,初始化硬件,然后切换到C语言的内核。你需要处理中断,可能需要一个简单的任务调度器。
FPGA的特殊性: FPGA不像CPU那样有固定的架构,你需要考虑资源分配、时序收敛,并且要反复修改HDL代码、综合、布局布线、下载到FPGA,这是一个迭代的过程,非常耗时。

如果能完成这个项目,你大概在什么水平?

顶尖本科生水平: 在多数情况下,能独立完成这个项目,已经达到了很多大学计算机科学或电子工程专业最优秀本科生的水平。这个项目涵盖了计算机系统最核心的部分,从硬件设计到软件实现。
具备研究生甚至专业工程师的潜力: 如果你能将这个项目做得相当完善,比如实现了流水线、缓存、中断嵌套、多任务切换,并且能运行相对复杂的程序,那么你的能力已经接近或达到了研究生阶段的水平,甚至可以与一些入门级的专业嵌入式开发工程师相媲美。
对硬件和软件的深刻理解: 这意味着你不再是仅仅停留在抽象的软件层面,而是能深刻理解软件是如何在硬件上运行的,能跨越软硬件的鸿沟。

为什么这个项目如此有价值?

1. 综合性强: 它集成了计算机体系结构、数字逻辑设计、HDL编程、嵌入式系统开发、操作系统原理等多个领域。
2. 实践性强: 直接在真实硬件上运行,而不是在模拟器里。这能让你更深刻地理解理论的落地。
3. 解决问题的能力: 在这个过程中,你会遇到无数的困难和bug,每一个都需要你去分析、排查、解决,极大地锻炼了你的工程解决问题的能力。
4. 学习速度快: 为了完成项目,你会被迫去学习很多新的知识和技术,学习曲线会非常陡峭,但收获也极大。
5. 面试亮点: 在求职时,这是一个极具吸引力的项目。任何一家对硬件、嵌入式、操作系统感兴趣的公司,都会对你有极高的评价。它能直接证明你的技术深度和主动学习能力。

什么样的CPU和OS算“成功”?

CPU:
能够执行一套完整的指令集(RISCV、MIPS,或者自己设计的简单指令集)。
包含流水线(即使是两级或三级)以提升性能。
能访问外部存储器(SDRAM)并进行读写。
包含基本的I/O接口,如UART用于调试输出。
能够响应中断。
操作系统:
启动代码: 用汇编编写,完成CPU和内存的初始化。
中断处理: 能够响应时钟中断或其他硬件中断。
简单的任务调度: 即使是基于轮转或者单任务,也算是任务调度。
设备驱动: 能够驱动UART进行字符输出。
内存管理: 哪怕是最简单的静态内存分配,也算。
能在CPU上运行C语言程序: 这是一个关键的里程碑。

总结来说, 在FPGA上做出CPU并运行自己写的操作系统,这是一个“硬核”且“硬气”的项目。它不是一个简单的课程设计,而是对你综合技术能力和工程实践能力的集中体现。如果你能完成它,说明你对计算机底层的工作原理有非常深刻的认识,并且具备了将理论转化为实际硬件和软件系统的能力,绝对是非常优秀的水平。这会是你简历上最闪耀的一笔,也是你个人技术成长的巨大飞跃。

网友意见

user avatar

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

在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的人。

类似的话题

  • 回答
    你问到本科阶段在FPGA上做出CPU并跑自己写的操作系统,这绝对是一个非常扎实的硬核项目,能展现出相当不错的技术功底和工程能力。这可不是随便搭几个逻辑门就能搞定的事,而是需要系统性的知识和大量的实践才能完成。这项目代表着什么水平?首先,能把这个项目做下来,至少说明你具备了:1. 扎实的数字逻辑基础.............
  • 回答
    如果你怀揣着驾驭天空巨兽——航空发动机的梦想,那么在本科阶段打下坚实的基础至关重要。这并非仅仅是学习几个专业课的名称,而是要构建一个完整的知识体系,就像建造一台精密复杂的机器一样,每一个环节都不能掉以轻心。首先,最核心的基石是扎实的数学和物理功底。 航空发动机的研究本质上是对流体、热力、力学等物理现.............
  • 回答
    想当年,我本科在读的时候,数学系里课如繁星,但要说哪一门让我至今仍念念不忘,觉得特有意思,那还得是“抽象代数”。听名字就挺“唬人”的,什么群啊,环啊,域啊,初听之下,感觉离我们平时接触的数字、函数啥的,隔着十万八千里。但正是这种“抽象”,在我看来,才是它最迷人的地方。我记得那时候,刚开始学群。老师讲.............
  • 回答
    谈到法学本科民法教学,王泽鉴先生的“民法研究系列”无疑是一个绕不开的讨论焦点。许多年轻的法学同仁,甚至包括一些执教多年的前辈,都曾就此有过深入的探讨。那么,在法学本科教育这个特定的阶段,以王泽鉴先生的著作作为主要教材,是否得当?这是一个值得我们细细品味的问题,它涉及到教学理念、学生认知水平、学科发展.............
  • 回答
    嗨,这个问题确实是很多跨专业考研同学都会遇到的一个“小纠结”。咱们来详细聊聊,看看你这情况能不能“双管齐下”,报上法学类的岗位。首先,你需要明白一个核心原则:国家在招录公务员时,对于岗位专业的要求,通常看的是你获得的学历证书上标明的专业。 也就是说,你毕业证上写的是什么专业,这个才是决定你是否符合岗.............
  • 回答
    你这个问题提得非常重要,也非常现实。谁都希望自己的感情幸福美满,不被原生家庭的阴影或者伴侣本身的缺点所困扰,更别说遭遇那种令人心痛的悲剧了。在恋爱阶段,确实是观察和了解一个人最关键的时期。想看清一个男人的本性,避免重蹈覆辙,咱们得细致入微,多留心,并且学会一些判断的方法。首先,我们要明白,“本性”这.............
  • 回答
    要深入探讨阶级问题,我们需要先厘清它究竟源于生产力水平还是生产资料的分配方式。这个问题复杂且相互关联,并非非此即彼的简单判断。阶级问题:生产力还是分配?从历史唯物主义的视角来看,阶级问题并非单一因素造成,而是生产力发展与生产资料所有权关系相互作用的产物。 生产力是根基,但并非唯一决定因素: 生产.............
  • 回答
    作为一名本科数学系的在读学生,我的每一天通常都围绕着两个核心:理解抽象概念和解决数学难题。这听起来可能有点枯燥,但实际上,这过程充满了挑战和乐趣,有时候甚至会觉得脑子都要“烧”起来了。早晨:从咖啡和思考开始我的早晨通常在七点半左右开始。闹钟一响,我不会立刻从床上跳起来,而是先赖床几分钟,让大脑从睡眠.............
  • 回答
    在美国的本科教育体系中,历史、文学、哲学等传统文科及社会科学类专业,一直都是学术界和求职市场讨论的焦点。要说它们是“不被看好的选择”,其实也过于绝对了,情况要复杂得多,也更 nuanced。首先,从就业导向的视角来看,很多人会觉得这些专业“不实用”。这种看法并非空穴来风。相较于工程、计算机科学、商科.............
  • 回答
    在本科阶段就发表SCI论文,这绝对不是一件易事,但也不是遥不可及的神话。想要做到这一点,背后往往是一系列清晰的规划、不懈的努力以及一些关键的“技巧”和“机遇”的结合。我可以从几个维度来详细地拆解一下,看看那些本科就踏入SCI殿堂的同学们,他们是如何做到的:一、 目标明确:从一开始就埋下伏笔 清晰.............
  • 回答
    管清友教授关于“本科阶段没必要学金融”的观点,以及网友关于“应该学数学或物理”的回应,可以说是抛出了一石激起千层浪的话题。这不仅仅是关于专业选择的讨论,更深层次地触及了我们对于教育目的、职业发展路径以及知识与现实应用之间关系的思考。管清友教授的观点:为何“本科没必要学金融”?管清友教授作为经济领域的.............
  • 回答
    好的,针对你提出的21法硕(非法学)7月下旬复习进度、名校分数线以及工科背景学生报考院校的建议,我将尽量详细地为你解答,并力求让内容更接地气,更像是一个过来人的经验分享。一、 21法硕(非法学)7月下旬的复习进度:这是关键的“攻坚期”!到了7月下旬,法硕非法学备考已经进入了一个非常关键的时期,可以说.............
  • 回答
    这个问题其实牵涉到很多方面,是暴雪设计团队在平衡职业、团队副本难度以及玩家体验时,非常微妙的一环。让我来好好给你掰扯掰扯。首先,我们要理解,魔兽世界里的武器分配,尤其是主手武器,不仅仅是看“装等最高”这么简单。设计师们会从多个维度去考量:1. 职业的“天花板”与“地板”效应: 盗贼(匕首): 盗.............
  • 回答
    中国象棋中,开局阶段己方“炮”能直接吃到对方“马”的情况,通常不是一个BUG,而是游戏设计中允许的、非常规但合乎规则的战术。要详细理解这一点,咱们得从象棋的规则和开局的几个关键点说起。首先,说它是“BUG”的直觉,可能来自于我们对“炮”和“马”基本走法的印象。按照通常的理解: 马:走“日”字,不.............
  • 回答
    本轮疫情的“扫尾”与“反扑”之辩,是个值得我们仔细梳理的问题。说它进入扫尾阶段,并非空穴来风,而是基于一系列 observable 的数据和趋势。但同时,我们也绝不能因此掉以轻心,警惕疫情的反复,这同样是基于科学的审慎。为什么说进入扫尾阶段?首先,感染高峰已过。在多数地区,随着奥密克戎变异株的传播,.............
  • 回答
    好的,我们来详细探讨一下为什么很多人建议本科数学、研究生转金融或计算机,以及数学的更广阔发展方向。为什么很多人建议本科数学,研究生转金融或计算机?这种建议的流行并非空穴来风,而是基于数学作为基础学科的强大普适性和金融、计算机领域的实际需求高度契合。1. 数学作为“万学之母”的优势: 严谨的逻辑思.............
  • 回答
    好的,我来帮你解读一下天津宣布“本轮本土疫情已得到有效控制,取得了阶段性明显成效,实现了社会面清零”这句话背后隐藏的含义,并尽量讲得通俗易懂,去除AI痕迹。首先,咱们得把这句话拆开来看,每一部分都挺重要的:1. “本轮本土疫情已得到有效控制”这句话意味着天津市在应对这次新冠疫情的过程中,已经采取了一.............
  • 回答
    你好,看到你非法本背景下,通过法考并准备在职攻读法硕非全日制,这个目标很清晰也很棒!关于起步阶段是选择律师还是法务,这确实是一个需要仔细权衡的问题。两者都有各自的优势和挑战,关键在于你希望通过这段经历达到什么样的目的,以及你的长期职业规划是什么。咱们来详细掰扯掰扯,看看哪个更适合你当前的阶段:先做律.............
  • 回答
    哥们,听你这么说,我太能理解了!两年没假期,这日子简直跟嚼蜡似的,我当年刚入行那会儿,也是这么过来的,感觉自己像个上了发条的机器,每天除了工作就是吃饭睡觉,连做梦都梦见工地上那些钢筋水泥。先说点心里话,你这俩字“无法忍受”说得太到位了。很多刚入行的,或者像咱们这种需要扎根一线的施工单位,确实很难享受.............
  • 回答
    8 月 3 日北京没有新增本土病例,这个消息无疑是令人振奋的,也确实为我们观察北京的疫情防控形势提供了一个积极的信号。但要说这是否就意味着北京的疫情防控已经进入了“稳定阶段”,我觉得还需要从几个更细致的角度来审视。首先,我们需要理解“稳定”的含义。 在疫情防控语境下,“稳定”通常指的是新增病例数量持.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有