北航CO 2024 P7经验分享
你好!本文章为该博客的第⑨篇文章!
本文章包含北航2024计组实验课P7课下部分的个人理解,第一次课上题目的简要介绍和一种实现思路。
由于P7教程内容实现方法过于宽泛,所以这里我仅对自己的理解做一个分享,并不意味着这一环节的某一部分写法只有文章内一种,如果你觉得其他方法更好可以直接采纳。
本文章参考了 BUAA-CO-Lab P7 MIPS 微体系 | ROIFE BLOG 和 P7 课下 & 课上总结 - 北航计算机组成原理 | Test Blog = FlyingLandlord’s Blog,在此非常感谢两位前辈做出的贡献!(没有这两篇文章的话,我可能还要在P7耗上超过一倍的时间)
本文章将在北航2024计组实验课结束之前持续更新,如果你在阅读本文的过程中遇到了不理解的地方/发现了有笔误的地方(哪怕只是非常小的笔误)/觉得某部分还有更好的实现,请务必在评论区里留下这些想法!(或者,直接联系我本人也可以!)
同样的,请务必仔细读完整篇文章,以及上述推荐的博客后再动手,以保证自己所理解的内容没有巨大的偏差。
需要注意的是,本文仅完全适用于北航2024计组课程,对于之前和之后的 ...
北航CO 2024 P6课上部分题目回忆与分析
你好!本文章为该博客的第8篇文章!
本文章是对课上部分的题目回忆(真的只有部分,关于T1我能说很大一段),不保证回忆内容一定正确,请各位注意甄别!
以及,如果本文章涉及学术诚信问题,请第一时间和我联系,我将及时做出修改,谢谢支持!
P6课上题目(T1)回忆
三题仍然为互相独立的添加指令题,这次我只写T1的回忆。
准确来说,我还是只想写这次上机里有含金量的题,T2有含金量的部分几乎为0,T3和第一次P5课上的T3考点重合度太高(需要了解的可自行查阅我之前写的博客),于是我只想完整回忆T1。
T1添加指令为 fmultu,R型指令。具体操作为进行一个需要在乘除模块计算3个周期的计算指令,操作细节如下:
首先,对 GPR[rs] 和 GPR[rt] 进行64位无符号乘法,结果记为 prod。
若 prod 高32位为0,则把 prod[63:32] 保存到 HI 寄存器中,把 prod[31:0] 保存到 LO 寄存器中。
否则,我们找到 prod 中最高位1的出现位置 highbit_1 与 prod 中最低位0的出现位置 lowbit_0 (可以证明,这种情况下 prod 中必定存在至少 ...
北航CO 2024 P5课上部分题目回忆与分析
你好!本文章为该博客的第7篇文章!
本文章是对课上部分的题目回忆(这次真的只有部分,因为关于T3我能说很大一段),不保证回忆内容一定正确,请各位注意甄别!
以及,如果本文章涉及学术诚信问题,请第一时间和我联系,我将及时做出修改,谢谢支持!
P5课上题目(T3)回忆
三题仍然为互相独立的添加指令题,但是这次我只写T3的回忆。
准确来说,我只想写这次上机里有含金量的题,T1和T2T3相比有含金量的部分几乎为0,T2又只有一个清空延迟槽可以说道说道,于是我只想完整回忆T3,至于清空延迟槽,我会在写T3正解前先写一下大概内容。
T3添加指令为 lwoc,I型指令。具体操作为,从DM中读取起始地址为 GPRbase+sign_ext(offset<<2∣∣02)GPR_{base}+\text{sign\_ext}(offset<<2 || 0^2)GPRbase+sign_ext(offset<<2∣∣02) 的一整个字,若该结果小于无符号32位整数 0x80000000,则取该结果的低4位进行零扩展后作为写入 GRF 的地址,否则取指令中的 rt 为写入 ...
北航CO 2024 P4课上部分题目回忆与分析
你好!本文章为该博客的第6篇文章!
本文章是对课上部分的题目回忆,不保证回忆内容一定正确,请各位注意甄别!
以及,如果本文章涉及学术诚信问题,请第一时间和我联系,我将及时做出修改,谢谢支持!
P4课上题目回忆
三题仍然为互相独立的添加指令题。(懒得写RTL了)
第一题添加指令为 eam,R型指令。具体操作为,取出 GPR[rs] 的低16位,作为一个有符号数对17取模,结果必须为0~16的某一个非负数,结果为一个16位的数。之后,若 GPR[rt] 的最高位为1,则将该运算结果零扩展至32位,否则将该运算结果一扩展至32位,将结果存至 GPR[rd] 中。
第二题添加指令为 cptl,I型指令(注意,这个不是J型指令,跳转方式和beq类似)。具体操作为,若 GPR[rs] 的低18位的二进制表示中存在连续6个1,则将PC+4存于 GPR[rt] 中,否则将PC+4存于 GPR[31] 中。之后,把PC的值无条件修改为 PC+4+sign_ext(offset<<2∣∣02)PC+4+\text{sign\_ext}(offset<<2 || 0^2)PC+4+s ...
ICPC 2024 成都站游记
你好,本文章为该博客的第5篇文章。
本文章是一篇游记,大部分记录的是当时的所思所感,比较偏个人情绪。
额外的,本文章大部分内容记录于比赛结束当天,在飞机上写的,最后一段于日后才补上。
?
我为什么要打算法竞赛?是热爱催生了功利,还是功利让我产生了热爱的错觉?
作为一个喜欢悠闲的人,我为什么要给自己的时间表安排的这么满?是为了快点迎来理想的生活,还是环境让我遗忘了初衷?
我无法回答这样的问题,我相信大多数人也无法回答类似这样的问题。我相信它们贯穿了我学业生活的始终,也贯穿了每个和我一样的,相当多计科学子学业生活的始终。
但是不管这个问题回答的怎么样,我们仍然坐上了各自选择的无数个航班,起飞 ,降落。
成都。
除了河南话,山东话,最熟悉的应该就是四川话了,理应陌生,但异常亲切。
烧烤,盒饭,火锅,比赛餐,如果我真的有机会细细品尝的话,应该都是好吃的。
热身赛的慌乱,最后一份模板的未打印,DDL的迫近占走练习时间,一切预示着已经过去的未来。想得到周六晚上那份隐隐的不安,应该会成为现实。
只是……来的还是有点残酷:
不是成都,只是赛场。
没有预想的异常的频发,却比异常更为刺痛人心。
9:05。 ...
北航2024面向对象程序先导课程心得
你好!本文章为该博客的第4篇文章!
本文章即将作为该课程结课作业提交至CSDN!
北航2024面向对象程序先导课程心得
前言
在知道这课有博客作业之前,我是动过心思把这课内容写在博客上的,后来犯懒了没做,没想到现在不得不写了(
既然作为作业,那就有作业必须要有的内容,从整体架构到各类心得体会,还有课程建议,这些都是必选项。不过在此之外,我觉得也应该在这里留一些给后人的提示,毕竟如果你是通过我的博客看这个文章的话,那也许你是希望学到一点东西的。
希望各位能通过这个课程和我的博客,能够对面向对象设计的模式有一点理解,至少最好摆脱可能会有的大一的抽象命名和混乱架构(
整体架构
由于这几次作业的迭代任务较为简单,以及最后一次作业实际上给了完成度较高的代码,所以实际上我所完成的结构比较简单扁平。大体上说,我的架构可以分为以下几部分:
副本相关:由Shd,Flm,Stn,Wnd,Frz类管理副本内怪物信息,各怪物具有其Treasure类管理各怪物守卫的宝藏信息,TreasureFactory类作为宝藏工厂。以上内容由AdventureSideGame类统一管理,负责协助AdventureGam ...
北航CO 2024 P3课上部分题目回忆与分析
你好!本文章为该博客的第3篇文章!
本文章是对课上部分的题目回忆,不保证回忆内容一定正确,请各位注意甄别!
以及,如果本文章涉及学术诚信问题,请第一时间和我联系,我将及时做出修改,谢谢支持!
P3课上题目回忆
三题为互相独立的添加指令题。(懒得写RTL了)
第一题添加指令为 cwp,I型指令。具体操作为,将 imm 零扩展为32位数后逻辑左移8位的结果与PC的值进行比较,若大于PC,则将 imm 零扩展的结果存入 GPR[rs] 中,否则存入 GPR[rt] 中。
第二题添加指令为 bgc,I型指令。具体操作为,将 GPR[rs] 分割为16个二进制数后,将每个二进制数 iii 转为其格雷码 greyigrey_igreyi,计算所有转化结果的1的个数之和,若该总和大于 rt,则进行类似 beq 的指令跳转,否则PC正常自增。
第三题添加指令为 lwso,I型指令。具体操作为……这题我不建议看文字描述,直接看伪代码吧:
12345678h_temp = GPR[rt] & 0xf;reg_right = (GPR[rt] >> h_temp) & 0x1f ...
北航CO 2024 P2课下部分思路引导
你好!本文章为该博客的第2篇文章!
本文章并不是对作业的题解,虽然可能会涉及若干题目的具体思路,但是文章重心是提供作者对课下作业所需技能知识的个人理解,希望读者能借此补足作业题目里缺失的思路。
以及,本文中的许多“规范”实际上是符合作者习惯并且在课程内行之有效的个人规范,可能存在不足之处,若读者发现问题,请批评指正。
P2课下作业内容介绍
本次课下作业的要求是,使用基于MIPS指令集的汇编语言,在Mars环境下完成一些程序。
具体来说,各题要求大致如下:
计算两个 n×nn\times nn×n 的矩阵乘法。
判断一个长度为 nnn 的字符串是否为回文串。
计算 m1×n1m_1\times n_1m1×n1 矩阵与 m2×m2m_2\times m_2m2×m2 卷积核的卷积结果。
按字典序输出 1∼n1\sim n1∼n 的全排列。
(选做)输出一个 n×mn\times mn×m 大小的迷宫从起点到终点不走回头路的方案数。
(选做)输出 nnn 的阶乘,保证结果不超过 100010001000 位。
拆出结构基础
总述
大概扫一眼各个题目的内容,我们可以归纳出来一些结 ...
单周期CPU搭建的细节记录
固定开场
你好!本文章为该博客的第1篇文章!
本文章将会记录我自己在尝试自行搭建第一个基于MIPS-C指令集架构(不包含特权和异常处理指令)产生的心得!
由于搭建的时候几乎完全是在闭门造车,所以里面的内容可能不正确/不严谨/难扩展/…,暂且请读者自行甄别内容好坏。
理理思路——怎样细化工作?
首先,问一个问题:我们要干什么?
当然,我们的回答可以是搭建一个单周期的CPU。
但是这个回答不够具体,我们不能通过这个回答搞清楚我们如何搭一个CPU。
所以我们根据理论课上的内容,添加一个简单的描述:我们希望把一些模块组合连接起来,搭成一个单周期的CPU。
那么,我们通过这个描述,对这个问题拆开一下,变成这样三个问题:
我们需要用到哪些模块构建这个CPU?
模块内是长什么样子的?
这些模块之间是如何连接的?
对于第一个问题,我们可以很快的用课上知识回答出绝大部分需要的元件:我们需要一个ALU用来计算,需要一块内存(或者两块,一块存指令,另一块存内存)保存数据,需要一些寄存器保存数据和数据交换,需要一个主要的控制器来控制数据的通断。
但是,对于剩下两个问题,如果我们不去关注自己要实现哪些指令的 ...
北航CO pre Logisim部分 斐波那契数列挑战思路引导
你好!本文章为测试博客用的文章,但是里面的内容确实可以帮到大家!
出于学术诚信考虑,本文章不包含本题目的完整答案,仅提供思路分析和设计上初步的引导,感谢理解!
题意简述
这个题的大意就是,在输入端给定一个32bit的无符号数 NNN,计算出斐波那契数列的第 NNN 项的最后32bit并输出。
其中:
题目对于斐波那契数列的定义是: f0=0,f1=1,∀n≥2,fn=fn−1+fn−2f_0=0,f_1=1,\forall n \ge 2,f_n=f_{n-1}+f_{n-2}f0=0,f1=1,∀n≥2,fn=fn−1+fn−2。
使用的主模块名称应为main。
在计算出结果之前,输出端应始终置为0,否则视为提交答案。
需要在64个时钟周期内给出答案。
思路分析
引入性质
这里我们不加说明的给出几个性质,没有这个性质的话后面讲述实在是推不下去:
(a+b) mod m=(a mod m+b mod m) mod m(a+b) \bmod m = (a\bmod m + b\bmod m) \bmod m(a+b)modm=(amodm+bmodm)modm。
(a∗b ...