File tree Expand file tree Collapse file tree 3 files changed +49
-0
lines changed Expand file tree Collapse file tree 3 files changed +49
-0
lines changed Original file line number Diff line number Diff line change
1
+ # 《计算机组成原理》课程实验相关
2
+
3
+ 首先必须要吹一波《计原》课程的大实验[ 实验文档] ( https://lab.cs.tsinghua.edu.cn/cod-lab-docs-2022/ ) ,基本涵盖了实验基础部分的所有内容,这里我就只再写一些个人感觉踩了不少坑的地方吧。
4
+
5
+ ## 关于 uCore 的另一些提示
6
+
7
+ - 精确异常:异常或中断发生时考虑 mepc 或 sepc 是否设置在了正确的位置,同时是否真的将发生异常的这条指令效果** 完全消除** 。如 ` sw a5, 0(a5) ` 这里发生了异常,那么请确保你的设计不会修改 ` a5 ` 的值。
8
+ - 异常种类:和页表相关的异常是较为繁琐的,这里我推荐使用和做网原路由器实验时相同的方式,直接将对应的文档原文作为注释粘贴到代码中,然后一句话一句话实现。注意 Page Table Walker 进行虚实地址转换时也可能会遇到中间结果 Not Valid 异常。
9
+ - 仿真工具:见下节。
10
+
11
+ ## 关于仿真工具
12
+
13
+ 私以为限制很多组工作效率的真正原因是仿真工具。跟 Hoxxxxr9 聊天时,其阐述过造机时的状态:改几行代码,开始用 Vivado 自带的仿真,然后打开一集《中二病也要谈恋爱》开始看,看完一集基本仿真波形才能跑的差不多,然后去看波形调时序(<s >把波形拟合成自己想要的样子</s >)。然后再改几行代码,再开始仿真,进入下一个循环...
14
+
15
+ 在这里我推荐一个速度更快的仿真工具 [ Verilator] ( https://verilator.org/guide/latest/ ) ,一般想要将 uCore 仿真到开机自检时你出错的地方,即使去改 uCore 的代码删掉一些没用的功能也要 30min ~ 1h 左右,<s >更有甚者甚至晚上把仿真打开,第二天早上起来看波形</s >,而 Verilator 可以在 1min 左右就完成这个工作。具体的安装过程我们这里不做赘述,请自行阅读其使用文档,而其使用过程大概可以概括为:写一个 Fake SRAM 与 Fake UART,然后在 testbench 里用这个器件换掉原来的器件,进而使用 Verilator 仿真。
16
+
17
+ 所谓 Fake,是说你自己去模拟这个器件的功能,并尽可能的保持你的实现与器件原来的实现一致,同时可以输出一些调试信息,比如在 UART 收到字符时用 ` $display ` 直接打印到 stdout 里。
18
+
19
+ 同时,Verilator 自带的 code linter 功能可以在某种程度上起到帮助检查代码中错误的作用,也帮助了笔者在造机过程中解决了一些问题。比如把一个 26 位宽的信号往下传时不小心输出写 ` wire[25:0] ` ,输入写 ` input wire ` 而丢了位宽,Vivado 只会报 Warning,而 Verilator 对于位宽不匹配则会报 Error 并提醒你修改或忽略。
20
+
21
+ 此外,也有 iVerilog 等更简单的仿真工具,<s >但可能也有一些坑</s >,欢迎同学们自由探索。
22
+
23
+ 这样你就可以节省下来大量的时间不是在等仿真,而是直接去看《中二病也要谈恋爱》了。<s >笔者造机期间用三个晚上看完了两季 + 剧场版。</s >
Original file line number Diff line number Diff line change
1
+ # 硬件设计
2
+
3
+ !!! note
4
+ 本文档以个人为视角撰写,如有偏颇之处请联系作者更正。
5
+
6
+
7
+ 计算机系的《数字逻辑电路》课程的讲授,是与其他院系完全不同的:讲最基本的组合逻辑和时序逻辑电路的分析与设计。选课的学生,背网原之余,每每花半个晚上,看十几个数电 Slides,便得到一个 B+ 或以上的成绩 —— 这是常常发生的事,现在往往要拿到一个 P,—— ,倘若算卡诺图化简算的快些,便可以拿到一个 A-,或者甚至是 A,然后沾沾自喜了。但这些学生,多是不擅长考试,大抵没有如此幸运……
8
+
9
+ 站在《计算机组成与设计》课程(官方名《** 计** 算机组成** 原** 理》)所需要的角度,我们来回看在大二春的半个学期的数电课程中,我们应该学会什么东西。大抵来说,可以概括为以下内容:
10
+
11
+ - 了解组合逻辑电路的基本组成部件与时序逻辑电路的基本组成部件(只需知道其功能,不需要探究其底层实现)
12
+ - 了解波形图的看法,可以根据波形图设计组合逻辑和时序逻辑电路
13
+ - 了解怎么使用硬件编程语言将实现组合逻辑电路、同步时序逻辑电路
14
+ - 针对数电考试,我们只需要再学会使用卡诺图进行最简与或表达式的化简,类似于小学时的“看谁算的又快又对”
15
+
16
+ 除此之外,一旦课程讲到什么三极管的特性,讲到什么 CMOS 管的特点,如果你并不对这些感兴趣,那你大可以去思忖自己的午饭,这可能比搞懂三级管的四种工作模式对提升幸福感有帮助的多。我们接下来逐点对上述进行介绍。
17
+
18
+ - 组合逻辑电路与时序逻辑电路部件:上课会讲这些部件的设计方法,了解基本 idea 即可,没必要 get your hands dirty 然后去实际把电路图什么的抄下来,考试只会考怎么把这些部件组合起来实现功能
19
+ - 波形图:也是只有理解难度的项目,但是是时序逻辑的基本
20
+ - 硬件编程语言:推荐在《数字逻辑实验》课程中即使用 Verilog 或者 SystemVerilog 进行编写,<s >别再抄那破 VHDL 代码了</s >,这里推荐 [ 这篇文档] ( https://lab.cs.tsinghua.edu.cn/digital-design/doc/ ) 的“通过例子学硬件描述语言”部分
21
+
22
+
23
+
Original file line number Diff line number Diff line change 168
168
- backend/index.md
169
169
- ExpressJS : backend/expressjs/express-js.md
170
170
- Go : backend/go/go.md
171
+ - 硬件设计 :
172
+ - hardware/index.md
173
+ - 计算机组成与设计 : hardware/cod.md
171
174
- 人工智能 & 机器学习 :
172
175
- ai-ml/index.md
173
176
- PyTorch 入门 : ai-ml/pytorch.md
You can’t perform that action at this time.
0 commit comments