CO_P4
CO_P4
P4总结
P4课下总结
有关我P4的cpu的设计文档(内含数据生成器)见P4 Design documents,课程源码见Charles_BUAA_CO_2022/p4/cpu ,本总结仅总结有关P4课下的一些要点内容。
基本思路
对于P4的课下,基本思路是翻译P3的logisim电路,这样不仅可以使自己的Verilog的CPU可读性增强,也有利于后续课上的理解。
本人P4挂过一次,错在了一个小点上(算数位移为>>>
而不是>>
),结果两道题同时考了这个点,于是我也因此送上首祭。所以我觉得在P4课下时多多注意Verilog的基础知识和易错点。(这个之前总结过,可以见CO-Verilog。)
除此之外要学会看懂RTL,特别是字节运算那几个指令sb,lb等,那几个是RTL的最高难度理解了(除了异常那几个不考的以外)
对于课上而言,P4特别喜欢考循环和位运算两大考点,而sb作为字节操作的经典,非常适合被用于考for循环遍历全字节,使用建议在课下代码的基础上增加一下DM的字节操作如lb,sb,lh,sh等,要不然上机发现自己要添加一个这样的指令还是非常爆炸心态的。
代码风格提示
清晰明了的代码风格可以很有效的提高debug的效率,所以建议要有一个好的代码风格。
- 使用单目运算符时要在:后换行,这样防止代码过长而不清晰,也可以在:后写注释以提高代码的可读性。
- 对于各个begin end一定要对齐处理,即最好在每次代码完成后对其进行格式化(推荐vscode的Verilog Format)
- 在设计板块是不要全部都用数字表示各种使能信号,这样不利于代码的拓展性,可读性也不好,可以设计一个macro.v的文件存储常量宏,并用这些常量宏去代替文中的那些数字。
P4课上总结
对于Verilog的CPU上机,大体和logisim题型难度类似,多为一道计算+一道跳转+一道访存,三题过两题即可通过测试。
在写题顺序方面,笔者建议先大略的扫一遍三道题(这个时间可以顺便下载课程组的Mars和各种jar的包),确定每道题目的类型即可。
增添指令的一般步骤
明确指令RTL
- 该步骤需要结合题目弄懂指令行为,包括明确指令类型(R型?I型?J型?即明确读和写的目标)、opcode和funct域数据、执行功能(计算?跳转?访存?)
- 最好可以先用MARS模拟下,以免对指令行为理解不到位。
明确数据通路
- 思考新指令的行为,构思出该新指令的数据通路,然后修改控制器中的相关控制信号。
计算题
计算题一般情况一定要先做,可以很好的稳定心态,因为比较简单!!!
在P4的上机测试中,计算题大多为类似签到题难度,除非遇到了自己本身的一些知识点盲点以外,都是非常好过的。p4中一般只需要增加ALU的功能,但一定要看清楚新指令的计算行为,最好在Mars中模拟一下~~(重要的事情说三遍)~~
由于之前说过P4特别喜欢考for循环(大多是一个32位循环遍历字节的操作),这就导致了assign完全不能适应这种操作,所以如果读者是使用assign语句实现的ALU,建议改成使用always@(*)
语句,或者提前写好function语句块再用function调用assign。
跳转题
一般跳转类指令有以下几种要求——
- 条件跳转+无条件链接(beq变式)
- 条件跳转+条件链接
- 无条件跳转+条件链接(jal变式)
正常情况是不会出无条件跳转+无条件链接的,这种太简单了(就是j呗)
跳转题和存储题在P4条件下难度是差不多的(p5开始存储题会比跳转题难很多很多),大家如果看到题目是第1种或第3种类型,那就放心大胆的做就行。
存储题
条件存储,也就是从DM取出值之后,根据这个值是否满足某个condition,再判断要往哪个寄存器写。
总结下来有以下三种类型——
- condition成立: 将DM中的值写入A号寄存器
condition不成立: 写入B号寄存器 - condition成立: 将DM中的值写入A号寄存器
condition不成立: 不写入(小tips:不写入可以理解为写入0号寄存器) - 写入目标完全取决于DM的读取值(如将DM读取值的低5位作为写入目标)【相对较少也较难】
与跳转题一眼,正常情况下是不会出非条件存储的。
条件存储题的主战场在于巧妙的控制controller的使能信号,从而选择合适的值写入即可。
代码风格提示
不同于课下的代码风格提示,课上准备前需要做一些小计俩,来迅速提高课上写代码的效率,课上时间就是金钱啊!
- 对于Controller中的内容,建议对每个拓展命令多增加一个为0的最高位,这样如果在上机时遇到需要第四种(以两位举例最大值为3为例子)操作时,你就会遇到在上机时需要对各个部分全部拓展一位为000的情况,这实际上是非常麻烦的,所以建议在上机前避免这种问题。
- 同理,在题目中经常使用的模块如ALU,DM也可以提前写好相应的代码段,在上机后直接添加功能即可。
记得要多拿往年题练练手!!推荐下吴佬的计组圣经:P4 单周期 CPU - 2 ,内含往年题。
- Title: CO_P4
- Author: Charles
- Created at : 2023-02-28 11:27:04
- Updated at : 2023-11-05 21:36:02
- Link: https://charles2530.github.io/2023/02/28/co-p4/
- License: This work is licensed under CC BY-NC-SA 4.0.