选课类别:计划内与自由选修 | 教学类型:理论实验课 |
课程类别:本科计划内课程 | 开课单位:计算机科学与技术系 |
课程层次:专业核心 | 学分:4.0 |
王超老师的教学风格偏向平实,课堂上主要是按照PPT讲解,内容详细而清楚,尤其是CPU设计部分。PPT 多源于唐朔飞老师的书和 COD 第四版,考前复习主要以 PPT 为主,很多例题和作业题会在考试中出现。老师乐于听取学生意见,平易近人,但有些同学反馈上课声音较小,语调平淡,容易催眠。
《计算机组成原理》主要讲解计算机硬件的组成成分和工作原理,包括指令系统、CPU设计等。课程内容复杂,概念多,还涉及许多需要理解和记忆的知识点。很多学生评价这门课像“文科期末考试”,需要背诵大量知识。实验内容硬核,包括设计与实现CPU、流水线等,需要有一定的 Verilog 语言基础。
作业主要是 COD 书的课后题,量适中但占总评的比重较大。题目难度适中,但需要细心完成,并建议与大佬或者参考答案对照。部分同学反映作业进度合理,总体作业布置比隔壁班 llxx 易于接受。作业多与课堂内容紧密关联,对理解课程内容有帮助。
实验任务繁重,难度较高,共有六个实验,涵盖 ALU、寄存器堆、流水线CPU设计等内容。实验需要较强的 Verilog 能力和调试技巧,尤其是最后两个实验工作量巨大。实验成绩比重较大,建议好好完成,有助于理解课程内容和复习考试。其中有同学反馈最后一次实验总分可以超出 100 分,但整个实验部分总评分数最高为 30 分。部分实验内容较为坑爹,但也有助于提升动手能力和对硬件设计的理解。
期末考试以闭卷形式进行,卷面主要是简答题,占比70%,还有一些计算题和综合题。题目多来源于 PPT 和作业,但也有较多需要背诵的内容。由于简答题占比较多,重记忆的性质较强。有同学建议考前通过王道考研视频或者课堂复习提纲进行复习,有助于应对考试。考试难度偏中等,很多同学提前完成答卷,总体上考试并不困难。
总体分数给得较好,很多情况下不需要调分就能达到优秀率上限。实验、作业和课堂考试分数占比较大,建议各部分都认真对待,以获得较好的总评成绩。有同学总评达 96 分,显示只要认真完成各项任务,取得好成绩并不难。
《计算机组成原理》是一门重要的核心课,对计算机专业的同学有很大帮助。王超老师的课程比较详细而清晰,虽然有些课堂上的部分催眠,但 PPT 及课后作业都能很好地辅助学习。实验任务繁重难度高,但对于理解硬件设计及课程内容很有帮助。期末考试多为简答题,建议考前好好复习 PPT 和作业,这样能应对自如。总的来说,这门课对提升底层计算机知识及动手能力都很有帮助,选课值得。
课堂教学:
王超老师的 ppt 非常详细,似乎比隔壁班的 llxx 好(隔壁班的梗:张开想象的翅膀??)
今年题目是 llxx 出的,不过参考材料是王超老师提供的 summary。
课件可以在 http://home.ustc.edu.cn/~louwenqi/ 下载(截至 2019-06-25 有效)
平常课上留的作业都比较简单(似乎有不少同学是下节课要交的时候才开始做)
实验:
其实感觉还好,不过如果不熟 Verilog 可能会比较费劲(包括辨别什么是 Synthesizable 的代码,仿真器和综合器的不同行为等)
最后两个实验我投入了 Chisel 的怀抱(Chisel 真香),有兴趣围观的同学可以戳我,我就更新的更加详细一些。
HInt. 用 mipsel-linux-gnu-gcc 可以极大缓解对着汇编狂写的头秃之情,安利一下
(但是到结课也没布置阅读报告)
课后实验是用 MIPS / x86 Assembly 写 bubble sort 并且测试性能。我写的是 x86 汇编,写一个 bubble_sort 函数之后,和 C 的代码链接在一起,在 C 中处理输入输出。
p.s. 老师讲话声音有点小,如果想认真听课要往前坐一点。
p.s.2 还没出分,出分再更新
wc老师今年第一次教这门课(之前全是llxx),讲课基本都是按照课程主页上的大纲来的(课程主页http://home.ustc.edu.cn/~lrw/),ppt的来源基本是唐朔飞老师的书和cod第四版(今年我们用上了第五版,但是习题还是第四版的),上课时会有很多科普知识,比如说硅晶片的制作工艺流程啥的,据说比隔壁llxx讲的简单一些?
老师人挺好的,上课虽然基本上都是念PPT,但是冷不丁的会爆出两个段子,有一次问到我们的实验进度,还说了一句:这种实验不只要有三四个人做出来就行了嘛……懂行人,懂行人。
作业很多主要是由于实验问题了(难度指数级增长的实验了解一下),顺便说一下最后一次实验的评分标准:十条指令五分,中断十分,流水线二十分,下载十分,(手机码字 详细版考完试传),基础多周期带16条指令六十分,占实验总分百分之四十,前面六次实验一次十分。
最后一次实验好好做,占分挺大的…… 考试大部分是原题,ppt上都有,但是也有一些比较坑爹的简答题(dma的工作方式 现代计算机和冯诺依曼结构有啥不同)总的来讲不是特别难,基本所有人都提前二十分钟写完了……
考试据说llxx班是一片惨淡,这边似乎是两极分化?(可能是本班大佬太多了吧23333)总之考前最好当文科多背一背,流水线好好写复习时能省下不少精力,总之是要认真做实验和作业,对复习很有帮助。考前最好把COD第五版和唐朔飞老师的书都看看,东西比较杂,但都是从这两本书上来的,结合PPT食用风味更加。
以下是流水线完整评分标准:
基础要求:60分(多周期那套就行)
扩展要求:
1.每增加10条指令加5分,无上限。
2.实现中断(10分)。被零除中断=1分,溢出中断=1分,陷入指令中断=2分,断点中断=3分,单步中断=3分。
3.实现流水(20分)。基础流水暂停得12分,包含仅ALU-ALU转发得15分,包含完全转发得20分。
4.实现下载(10分)。数码管上顺序显示内存=6分,开关输入地址显示内存=4分。
下面的文字是考完期末当天写的,现在从某个地方复制过来(
COD(使命召唤划掉,计算机组成原理)考完了,感觉还好,没有我预想的那么糟糕。当然,考试时候也发挥了一下想象的翅膀。不过实话讲,这门课给我的感觉像(高中)地理:要记很多很多东西,大家都觉得这是文科,但是实际上却属于理工科一类的。槽点其实还挺多的:CPU 讲完流水线之后唐书的比例就开始增大了,但是唐书的话,我只能给「没有太多错误,比谭某的 C 语言教材好一些」的评价,书中有的地方已经很过时了。
其实这都还好,一个关键的槽点是老师的 PPT 里有些 terminology 喜欢自造,把词往 Google 上一搜只有个位数结果的那种(比如说,「并行竞争分布式仲裁」)。不过 wc 至少比 llxx 好一些,至少一堆没头没脑的思考题不是他出的,虽然他上课也有一些槽点啦,比如说把苹果电脑和 x86 对立起来(然而十几年前 Mac 就转到 Intel 架构了),还有「(网络)高端口寄存器很危险」(???)。
总之呢,COD 这门课就是……硬核硬件实验 + 文科期末考试,总体给我的观感其实不是很好。要改进的话,可以考虑在开卷的前提下加大一点题目难度之类的,像文科一样背概念定义真的没意思。
对于一名 CS 专业的本科生来说,这门课还是十分重要的。在一些涉及硬件的交叉领域(如可穿戴设备),拥有一些计算机的底层思维,往往能比其他人更快的找到问题的关键(暑研感想)
王超老师讲课实在谈不上吸引人,主要问题在于语调很平,没有什么激情,也不太有趣,但也不是让人难以接受的类型。讲到重点的时候会特意提醒大家要认真听,也会乐于听取大家的意见,平易近人。在一些重点章节如果能耐着性子听收获还是蛮大的,概念为主的章节那就随意吧...
今年个人认为相比于隔壁 llxx 班主要的优点是作业量较小且布置进度更为合理,助教更好(体现在实验要求更合理更自由)。有一次 MIPS 汇编冒泡排序的附加实验我们是选做加分,隔壁班是必做,体现在总评中大概有 1-2 分的差别。其他方面给分差别不大,基本按比例。
今年的实验zjx老师突然不要求写流水线,改为利用外设和CPU完成一个应用。但是个人觉得如果写流水线能拿到一个满意的分数那还是建议选择流水线,用代码实现出这样一整套解决所有 Hazard 的流水线 CPU 确实收获很大,也使最后复习时的压力大大降低。
最后考试要综合两个班透露的信息来抓重点,复习主要以 PPT 为主,PPT 上的例题和作业题一定要重点关注。复习起来陌生概念太多可能比较痛苦,但考试不会考很偏很难的点。最后卷面 90,实验应该是满分或接近满分,总评 96。
“这种实验,不是有几个人做出来就可以了嘛”
实验设计真的坑,不过这不怪王超老师;
本门课程是wc老师教授理论课+zjx老师教实验课,实验~~一写一周~~每周一节,每堂课都在下午。
对于希望在本科上获得良好收益的同学,及其建议在大二上半学期选英才班计算机系统详解,算是所有英才班课里难度最低的了。
课程内容就不提了,下面是~~(口嗨点评)~~认真评论:
关于理论课:COD5相对COD4最大的改进就是改掉了课后作业每题六七问、每问分ab的沙雕作风(一位写作业感觉就是在复读的人类前来揭示本质)。但这本书怎么读都还是比另一本唐书要好得多——唐书主要是IO和总线这些COD上涉及的不多的,考试也只会出及其文科的“简答题”(有去年两个简答题被原封不动的再搬了回来,还有三个简答题被本人考前群内口嗨不幸言中,看到卷子的瞬间就想原地爆炸了),包括DMA工作方式,CPU设计过程(在PPT上有,还是未经加粗变色的很普通的一行黑字)。
关于实验课:zjx老师今年看起来是想动动实验的陈旧风格,给更多的人张开想象翅膀的机会(),但我个人还是觉得写好CPU写好verilog逻辑比搞些花哨的强(尽管自己最后的大实验也没有实现流水线OTZ),但是觉得难度反而是降低了(键盘鼠标显示器这种模板化的代码网上一抓一大把)。
这里还想分享一个自己给别人debug流水线veribug的一个经历:一位小可怜半夜十二点还没有写完流水线,可是明天就是迟交实验的最后截止日期了,无奈之下作为一名乐于助人~~(贩卖月卡)~~的同学要来了它的代码。
应该跳的跳转指令不跳转,但是仿真一切正常,下载出错。最后把问题定位在了一个简单的always描述的寄存器里。
没注释过rst的是原来的代码,我把它注释掉了,下载就过了(但是不能复位清零),后来改了一下if语句的写法,异步复位也通过了。没想太清楚原理,应该是综合器的行为(fjw大佬说应该给综合器明显提示,将异步复位弄成最高优先级)。
所以得出结论:和verilog相处了一年,我还是不了解她(
关于考试:体验很一般,好多文科题,一大堆的背诵(),有一道是要你在一个图上把流水线段间寄存器标出来,结果这个图自己就有一定限制不能标正确(寄存器写入地址的问题)然后我画的密密麻麻得有二十多个(不知老师判卷作何感想)。最后一道题,cache缺失命中,算了半天直接映射发现是送分题——地址块都没重复的命中个鬼啊心态崩了。
关于wc老师:“不要养成中午睡觉的坏习惯”,“今天要交作业了,大家赶紧做啊!”,“30,40,50......人好少啊”(其实我基本就没听过课orz)
出分真慢,都快两个月了才出(
课程内容比较硬核,就是讲计算机硬件的组成成分和工作原理。这些内容对于计算机系的同学来说还是非常重要的,比如为什么在现代计算机上堆排序要比快速排序慢?就是因为快排的空间局部性好,能更好地利用Cache来加快执行速度。在设计程序的时候要考虑到这一点。总之,计算机底层原理知识是科班人必须要掌握的。
关于课程的具体情况:
1. 作业就是COD书的课后题,不难,但是要细心做。
2. 实验:统共六个。前三个(ALU、有限状态机和RV32I汇编)很基础,基本都能拿到分。后面的单周期CPU和流水线CPU稍微复杂一些,其实只要分开设计各个模块,最后连线认真一些也不难。最后一个大设计我直接用了VGA,给了本组最高分。还有个附加实验,我做了,但没给我加分。
3. 考试:默写题,很多唐书内容(幸亏考前一天跟着王道考研课过了一遍),最后突击也能掌握。不建议自己看唐书,字太多,不好看懂,直接跟着王道考研视频课考前一天过一遍就行。不要复习太早,不然容易忘。
总之,要学好这门课,必须好好做实验,好好写作业,好好背书(作业考试并不难!!!)。建议除了COD和唐书以外,可以看看其他教材,比如D. M. Harris的硬件设计书,坦嫩鲍姆的《结构化计算机组成》等。本人实验接近满分(综合设计全组最高分但是没满分),作业接近全满,考试默写都写了,总评也比较满意。
wwcc讲课还是很清楚的,bb上有录播课,倍速看录播课能把很多没弄懂的知识点再消化一遍,PPT也很清楚,看PPT自学也可以; 作业不难,注意翻译版和原版区别就好,建议做完对一下答案,作业分占比还是很大的; 实验是用Verilog写CPU,不要赶ddl,debug时候一定要写仿真把每个信号拉出来看; 考试70分文科简答题,30分综合题; 给课程7分吧,文科试卷-1,不给查卷-1,出分太迟-1
课程:课程的本身难度并不高,计算的题目少,重在理解。
作业:作业的量一般,但是总评占比重,最好写完拿网上能找到的答案对一下。
实验:难度中等偏上,最后两次(五级流水线RISC-V的CPU和往CPU上加功能,例如分支预测)的工作量巨大,实验做完考试复习CPU那一部分基本不用看了。
考试:考试整张卷子全是简答。
课堂:
说来惭愧,置课llxx班,畏惧于拿纸拿笔、不能迟到,转来王超班,结果上课在200人的教室里,昏昏欲睡,后期什么都没听,有点后悔转过来。
当然,王超老师也是位很不错的老师,虽然讲课催眠,但该讲的知识点都会讲到,尤其CPU设计部分的知识,讲得很清晰。老师也很能体谅学生,一学期均未点名或小测,属于过来人了。
cod这门课的理论知识,最重要的就是指令系统和CPU设计部分,需要深入理解。其他部分概念知识较多,且与OS的知识存在一定重合,以背诵为主。
实验:
实验一 ALU、实验二 寄存器堆:我个人认为是没有难度的,如果上学期数电实验认真做了,肯定能做出来。
实验三 写risc-v汇编:之前没接触过汇编的话可能有点难度,实在不会参考一下网上的也没问题,search search。
实验四 单周期risc-v CPU设计:所有模块部件都在数电实验及本课程实验一二中实现过,数据通路老师给了,实际上就是连线实验,在一个顶层中将各模块正确地连接在一起。主要考察细心和耐心程度。
实验五 流水线risc-v CPU设计:是在单周期基础上添加段间寄存器和冲突处理单元,有一定难度,主要是debug比较困难,几乎只能通过仿真来debug。而如果verilog经验丰富,可以肉眼看出bug,或者直接规避bug,因此数电实验的基础还是挺重要的。个人认为此次实验是最难的,考察verilog综合能力。
实验六 综合实验:两个方向,改进CPU或连接外设拓展应用。我个人推荐用外设,比较好拿分,vga也不难。但用外设时一定要注意,不要绕过CPU,它是组原实验的核心,最好参考一下理论课上讲过的总线和IO知识。否则,就变成数电实验大作业了。
作业:
作业分占比巨大,建议每次做完后跟大佬对一下,跟参考答案对照也可以,但答案有些错误。
考试:
70%简答题:如果没背,那就成了真正意义上的张开想象的翅膀,所以,复习就是背背背。
30%综合题:送分,一道是流水线CPU的冲突处理,实验做出来的都会,没做出来但理解原理的也会。另一道是看图回答问题,真正的送分,答案全在图里,照着抄。
考前最后一节课老师做了复习提纲ppt,命中率还挺高的,建议仔细看看。
今年这张卷子出得极不合理,简答题占比过多,因此个人认为,从试卷结构上讲,参考价值不大。
这门课的实验难度大任务重,但是期末考试更加偏重考察概念。实验对课程内容的理解和最后给分都很重要,建议好好做。王超老师和蔼有趣,上课语速稍慢,可能有点催眠,但是PPT很详细(适合异步学习),考试前务必把PPT看一遍
考前重点看了计算和设计,结果70分概念题,14个题目全靠蒙,希望能给点分
老师人很好也挺幽默,讲CPU部分挺清楚,上网课会提前几十分钟就进入和大家聊天。很好说话,学生嫌作业太多due太早的话也会调整,出分后还会安慰成绩不理想的同学?
老师人很好,线上授课每节都提前开课,课后答疑,和蔼可亲。
PPT非常详细,期末复习只看了PPT,没看书。坐等出分
感受:好累啊...上这门课要在下午第一节,要读很多书,写很多代码,调试好久...不过自己基本对上世纪70年代的CPU设计有了大致了解。
建议:大实验越早开始越好,作业不要抄,概念记清楚。这门课好好上收获还是挺大的。
一开始是抱着逃离llxx的想法换到这个班上的。从结果来看还是很不错的。
这位老师上课声音很小,没什么激情,而且都是下午第一节课上课,所以很容易犯困,上课几乎全程左耳听右耳冒....这也导致我几乎全是靠作业和考前复习来学习COD...不过要是对比简直有毒的llxx的话,当然是这位老师好很多啦...
实验的话楼上讲的比较详细,补充两点:最后一次实验总分可以溢出(100+),但是整个实验部分的满分就是30分,不会溢出。如果最后一次实验写了流水线,那么你会在无休止的debug中提高对流水线的理解,期末复习甚至可以不用怎么看流水线了。
期末考试接近文科考试,有很多简答题。难度不难,有几道题甚至是PPT上的原题,大家普遍提前10-20分钟答完卷子。由于大家考得比较好,不用调分就能够接近优秀率上限,因此没有调分。从这个角度来看,给分是很好的。(于是我第四次被卡绩= =
语录:
你们总得有几个人会做吧! ——王超