北航计组实验代码、电路(持续更新)

警告!!!北航计算机学院严查代码,请勿完全抄袭。如被查重导致成绩取消或受校纪处分后果自负。鼓励自行思考,因为课上测试不允许自带材料。以此资源献给正在受计组狂虐的小伙伴,也造福下一届

    • 一、教程、p0、p1、p2
    • 二、p3--Logisim单周期处理器
    • 三、p4--Verilog单周期处理器
    • 四、Verilog流水线处理器(P5、P6)

一、教程、p0、p1、p2

前六周为教程部分,需自学数字电路、Verilog、MIPS(含Logisim、ISE、Mars汇编器三种软件的使用)。第六周第一次上机,会有一次pre测试,大约3小时。
以后,每次上机视难易程度,可能为2小时,2.5小时等等。
只有p0要求过全部题,以后只需要过2/3。
p0–Logisim数字部件与有限状态机
p1–Verilog数字部件与有限状态机
p2–MIPS汇编语言(编程题)

p0、p1、p2尽量不要挂,第一次挂的越迟越好,因为复活牌只有一张(p4之后有一次复活赛),想想p8被顶掉的感觉有多么惨(乐观点,往届p8只有20多人)。
顺便说一下,熟悉软件的使用,每次上机排队以后有助教问答,会询问你关于软件使用的东西,以及设计思路。Verilog需要保存testbench。如果你一问三不知很可能会fail。
p0和p1的重点是有限状态机。
Logisim:交换排序、2^nmod5、斐波那契数列。p0部分主要有CRC校验码、ALU、位扩展器、正则表达式。
Verilog:加法器、计数器、字符串后缀检测。p1部分主要有ALU、位扩展器、格雷码计数器、正则表达式、表达式格式检查。
MIPS汇编语言:稀疏矩阵转三元组、递归(我们这一届是哈密顿回路,很坑)。p2部分主要有二维数组操作(矩阵乘法、卷积、01迷宫)以及回文串判断、全排列、汉诺塔,课上测试有子串查找替换、矩阵快速幂(分治法)。
p3及以后要求写设计文档,请认真对待,课上检查包括设计文档。
如果你能过掉p6,很幸运,你已经达到80分。如果能到p7、p8,哇,请收下我的膝盖。
下载链接1–教程、p0、p1、p2

二、p3–Logisim单周期处理器

支持算术运算、位运算、分支、跳转、lui、读写内存(按字)、空指令等共30种。p3只要求7-10种相信我,但是课上加指令加什么就不好说了,你能实现的多多益善。(也没必要在特别高端的比如sll上耗时间,毕竟这是最后一次用Logisim了)
解释:主译码器用与或逻辑实现,ALU控制信号有4位,用MUX实现。数据通路请参考《数字设计与计算机体系结构》(六系人都(二声)知道)
包括设计文档,下同。
p3重做已过,今天起重启更新 --2018.11.22
上次遇到的坑大家一定要记住:课上测试会要求PC复位值为0x00003000,请大家务必注意。想想有限状态机的那些事,怎么初始化合适。
已更新p3最终电路,支持30多种指令。注意课上测试可能出现不在指令码中的指令。
大家记住一条真理:计组谁能不挂一次?复活赛过了又是一条好汉(复活赛也有可能挂这才是重点)
加一条感想:重做真的会简单很多,真的可以为所欲为:助教,我做的这么快,你把p5给我打开吧(滑稽,这是不可能的
下载链接2–p3–Logisim单周期

三、p4–Verilog单周期处理器

支持算术运算、位运算、分支、跳转、lui、读写内存、空指令、可变移位指令共36种。
p4还没有开始,我先贴上我的代码,如果课程要求有变将及时更新,大家谨慎下载。
译码器先用MUX硬刚了,其实这种方法很弱,一旦指令需要加译码位数就全得改。有更好方法的欢迎在评论区分享。目前代码都很便宜的,1积分,良心资源。p5以后,大家想想我的工作量,就知道该涨价了,p5以后每次代码5积分。
p4代码将复查,今天或明天放出,敬请期待。另外,p5及以后将可能延缓,流水线不是一朝一夕搭成的(Rome was not built in a day.)
补充:下面再贴一个v文件,表示支持字节读写(lb(u),lh(u),sb,sh)的数据存储器,模块名DM_8bit。大家若参考,注意数据通路的不同。
补充(2018.12.6):大家注意一种bxxxal(类似于jal的指令,指的是分支并链接,分为有条件链接(即分支发生时才写31号寄存器)和无条件链接(无论如何都写31号寄存器))。我在更新的代码里已经补上这个指令,上次P4挂在这了痛心疾首。
原创指令大概有这几种:读写内存(最难的就是lwl,swl,lwr,swr,可以参考我下面放出的英文指令集。注意单周期描述和流水线描述不一样,P5P6的小伙伴注意了)、R型(尤其注意移位运算的妙用,这个非常神,基本关于位操作的东西百发百中)、I型、分支跳转,类型都是差不多的,做好归类就行。P6可能要加不少乘除指令,比如MADD、MSUB、MUL等。我的建议是课下挨个实现实现,保持手感,但最好不要提交到课上去。现在起统一一个链接下载P4,数据存储器可以字节读写。
下载链接3–p4代码

四、Verilog流水线处理器(P5、P6)

P5支持42种指令,P6支持50种。
冲突单元采用detector型,即通过特征信号检测。
大家慎用planner,课上加指令的时候你就会知道它有多可怕,而用detector,冲突单元不用动任何东西。另外一个,如果碰到玄学指令必须要改冲突单元,暂停优于转发,因为这么短的时间,容不得你思考转发,错了可就得不偿失。今天遇到一个lwpl指令,和lw格式一样,但是,如果加载结果%4==0则写入31号寄存器,否则写入指定的寄存器。由于事先不知道写寄存器编号,所以必须暂停等待这条指令进入W级(编号在M级才能确定)。而用转发,则会带来重大灾难,你会发现你根本没法改。
乘除单元:乘法5周期、除法10周期。
2018.12.13–今天更新一下p5链接,增加几条玄学指令
课上的时候,一定要好好研读指令的operation。其它的宁可不看,也不能不看操作。
还有,课下的bug一定要认真找,课下有bug课上只能等死(惨痛教训,P3已经吔屎啦,当了一次梁非凡)
下周更新p6,无论过不过。希望能一次过吧,反正p7做不了了,不如早点退休复习期末。大家都是平凡人,我也不例外,做到p6的人还是最多啊。
计算机学院真的是每学期都是一次劫难
更新–2018.12.20
今天问了助教,下周还可以测p6,没过的小伙伴不要灰心,你们还有机会
p5一直延续到17周最后一周,也就是说,你们基本上都不会挂科(除非挂过5、6次的)
p6乘除指令比较冷门了,但不要轻视,因为两次没考下次很有可能。比较简单的是madd,msub。最难的是mul。大家到指令集看一下,我没有加mul。
课上测试有规律的,第一题必做题一般是分支并链接,第二题是送分题,ALU计算,第三题是加载或存储,一般比较难。
p7现在不知道官方消息有没有机会做,但是这个帖子要暂时停更了,本程序猿将进入烤漆,期末考试一堆课,等到考试完才可能放出p7代码。所以,这一届的小伙伴等不到我的福利了,毕竟我比较菜。
p6代码不再更新,各种玄学指令尽在p5、p6。结合一下就行
今天碰到一个很可怕的指令帮大家排雷:bopal。格式:
010101 rs rt imm
当rs和rt互为相反数时,跳转到目标(类似beq)并链接到31号寄存器(条件不满足则不写31号寄存器)。相反数,大家想到rs+rt==0,但是有一种情况:
\ 1000 0000 0000 0000 0000 0000 0000 0000
+1000 0000 0000 0000 0000 0000 0000 0000
=0000 0000 0000 0000 0000 0000 0000 0000
溢出了,也是0。所以,在cmp单元判断相反数一定要把它排除。
下载链接4–p5代码
下载链接5–p6代码
下载链接6–MIPS指令集
下载链接7–Mars魔改版,支持评测机要求输出

你可能感兴趣的:(北航计组实验代码、电路(持续更新))