这是BUAA 计算机组成课程 2023 的总集篇

关于什么是总集篇

学什么

BUAA的计算机组成可能是你6核心专业课中设计的最好的(也是最累的),整个课程从硬件到软件会涉及到

  • 数字电路(怎么从硬件层面实现一台计算机)
  • 汇编语言(CPU怎样解析和处理命令)
  • 硬件设计语言(verilog)和计算机架构设计(实验:实现一个完整的计算机系统)

数字电路的部分主要在理论课,课程并不要求能手搓加法器。汇编语言使用万恶的mips(这在之后的课程中会发生一些问题),而实验主要是用verilog实现一个mips cpu。实验大致分为8个阶段(p0 - p7)

  • p0、p1、p2:一些课上测试,检验对logisim、mips和verilog的学习
  • p3:用logisim实现一个单周期cpu,并完成课上测试
  • p4:把p3实现的cpu用verilog实现一次,之后都会从这里开始迭代式开发
  • p5:改进cpu为多周期流水线cpu,并处理冒险(难度骤升)
  • p6:增加大量指令,支持乘除法
  • p7:实现cpu0和中断

按5分制给每个p难度打分,1为不需要准备,5为会做到想死,我的体会为

  • 5分:p5
  • 4分:p7、p4、p6
  • 3分:p3
  • 2分:p0、p1、p2

怎么做才能完成实验

CO的学习中会第一次体会到,上机通过的基础是课下进行了完备的测试,所以计算机学院实验课的课下流程大致为

  • 50%的时间完成实验内容,通过基础样例
  • 30%的时间设计自动化测试脚本和样例随机生成器,并进行测试
  • 20%的时间对自动评测机和实验代码debug

所以,你6的作业永远写不完

当然,会有很多同学分享他们的测试软件,例如在计算机组成这门课程中,欢迎使用:

我所开发的自动测试

建议和资料

怎么问问题

首先,从这门课程开始你会有很多问题,所以你应该先学会怎么问问题

魔改版Mars

mips和logisim课程组的资料大致够用,这里建议使用魔改版的mars

verilog学习

verilog可以参照该网站学习

版本管理

从这门课程开始就应该开始用git对代码进行版本管理

这里有一本progit

自动化测试

为了进行自动化测试的开发,你应该学习一门好用的脚本语言,首选是python

这里还有一本不错的教程

代码

你能在此处找到我的代码,代码通过了2023年课程的p7

好的参考资料

推荐阅读这篇博客,将你的工具链切换到vscode+iverilog+gtkwave