北航计算机组成P7
北航计组P7前言
咳咳,更的越来越少了(),最近在致力于把测评机搭得花里胡哨,所以一直没有写博客,现在刚好有点闲所以写一下P7的博客,再不写课上的指令什么的都忘光了
课下搭建注意
欸为什么不写课下的搭建博客。第一,我觉得之前的学长已经写得很好了(反正看懂博客P7就成功一半了,看懂源码P7就成了hhh);第二,我好懒;第三,之前似乎没看到有人写测试的博客,所以我来填一点点坑,希望对以后的同学有用(话说2024以后计组好像要改革了,希望不要删掉P7
搭建博客
flyinglanlord
roife
一些补充的搭建要点
说实话我没看明白为什么要加入eret,似乎返回的EPC并不会触发这个异常()assign pc_error = (|PC[1: 0]) | (PC < 32'h0000_3000) | (PC > 32'h0000_6fff) | !D_eret;
Req和stall的优先级反了,这样会出bug下面同样给出测出bug的代码,或者直接用我的测评机吧() E_PC <= stall ? D_PC : (Req ? 32'h0 ...
北航计算机组成P5
北航计算机组成P5前言
P5工作量确实比P4大了不少,画设计图写文档一天半,搭CPU加测试一天,不过如果课下做好准备过了强测那课上100%能过甚至直接ak走人了
课下
写完P6已经1700行了,主要是我采取了针对指令的译码方式,所以整体代码量会稍微大一点(),主要这样我比较方便debug,所以就没改了
译码方式
集中式译码方式
最大的优点就是方便从P4改过来,其实我选择集中式译码的理由是方便添加一些指令,而且译码行为在D级就可以全完成,所以如果加入一些额外的指令信号不会出现高阻态或者其他的比较抽象的错误(分布式译码课上如果出锅了可能就是这个原因)
最大的缺点就是需要流水的信号实在是太多了,因为所有要用的信号必须在D级就全部生成完毕,所以向E级就会流水各种信号,不过课下认真设计,仔细连线保证没有bug那在课上也没啥,反正课上最多增加两三个新增的端口,反正不会一次写两个寄存器()
分布式译码
最大的优点就是流水的东西少,几乎可以只流水指令,然后每次在接收 ...
北航计算机组成P4
北航计算机组成P4前言
咳咳,最近太忙了作业好多啊,搭完CPU每周还要迭代自己的测评机,原来CO也可以训练我们面向对象的能力
课下
其实P4就是把P3的电路图翻译成代码,整体上没有难度,如果你P3有好好设计你的CPU的话,没有好好设计的话,就照着学长设计好的CPU翻译,总之也是从一个一个的模块开始搭建,这里不赘述了
组合逻辑建模
我啰嗦一两句,最近几年课程组不知道在干什么(明年等我当助教我也要搞得抽象),考试喜欢考一些奇奇怪怪的组合逻辑,所以或许你需要根据你使用的建模逻辑稍微熟练一些Verilog的语法,这样课上的时候或许不会那么慌
两种组合逻辑建模方式对于写CPU的思路还是有略微不同的,而且各有各的好处,见仁见智了
assign
最大的优点就是简洁、代码量很少,而且就是电路连线,从P3转过来会比较方便assign ALU_out = (ALUOp == `ALU_add) ? A + B : (ALUOp == `ALU_sub) ? A - B : (ALUOp == `ALU_or) ? A | B : ...
北航计算机组成单周期数据生成
两种可能的测试数据生成方式unitTest分类
如同java中的单元测试,我们将常规指令(不包含什么lwso、cwp…)分为五个类别
寄存器赋值类型指令(set)
例如lui,能直接通过立即数对寄存器赋值(这里我还加入了ori配对成li),将来可能addi、subi也是这里的一部分
寄存器运算类型指令(arth)
例如add,通过两个寄存器相互运算得到值的指令,更通俗就是R型指令
存取类型指令(store)
例如lw,内存参与的指令
分支类型指令(branch)
例如beq,有条件跳转(有条件跳转并链接)指令
跳转类型指令(jump)
例如jal,无条件跳转(无条件跳转并链接)指令
接下来将我们已有的指令集分类加入,并按照set -> arth/store -> branch -> jump的顺序依次进行测试,已测试的指令将出现在后面的指令测试中测试后续指令,所以测试顺序也是非常重要的
测试思路
set
先测试set类指令,不仅是因为它们不需要依托其他指令的正确性,而且后续所有边界数据的测试都需要提前赋值,测试思路即多次对$0 ~ $31寄 ...
北航计算机组成P3课下
北航计算机组成原理P3课下通过阅读本文,你可以大致了解北京航空航天大学2023级计算机组成原理P3课下的相关内容,希望能对你有所帮助
设计文档总要求
实现指令集{addu、subu、ori、lui、lw、sw、beq、nop}
指令集所有指令的RTL
add(addu)
sub(subu)
ori
lui
lw
sw
beq
nop
特殊,一般可以用sll一起代替,这里因为指令集没有sll所以我们直接使用sll的部分代替nop
数据通路设计草图注:上述的j、jal、jr指令不在指令集中
数据通路详细设计IF
首先我们观察需要设计的CPU,必不可少的一部分就是PC、IM,没有指令谈何执行指令呢,所以我们将这个阶段称为取指(IF)
基于低耦合的原则,我们希望PC永远只是指向当前需要执行的指令,而不需要进行其他的操作,因此,我们在取指阶段多加入一个模块**次地址计算模块(NPC)**,专门用于计算根据PC的值以及执行的指令与结果更新PC的值
至此,IF阶段的所有模块都浮出水面了分别是PC、NPC、IM
PC
取指阶段最最重要的一个模块无疑是PC程序计数器 ...
北航计算机组成P2课下
北航计算机组成原理P2课下通过阅读本文,你可以大致了解北京航空航天大学2023级计算机组成原理P2课下的相关内容,希望能对你有所帮助
前言
在分享此次P2附加题做题思路前,我想对于在做题过程中错误和技巧进行总结与反思
对于栈的使用
为了使用栈,首先我们要有一个栈,而且对于某些递归程序或者传递参数较多的程序,频繁地对栈指针进行加减操作可能会出现某些难以察觉的问题,所以常常对于入栈和出栈操作封装函数.data stack: .space 400.macro push(%int) addi $sp, $sp, -4 sw %int, $sp.end_macro.macro pop(%int) lw %int $sp addi $sp, $sp, 4.end_macro.text la $sp, stack addi $sp, $sp, 400
对于含有多个参数的递归程序,比如汉罗塔问题(四个参数用寄存器其实也还可以),将会使用栈传递和接收参数,同时还需要使用栈保护寄存器,所以可以规定自己的一套规则(在函数的开始接收参数再保存寄存器,调用函数前先保护寄存器再传递参数),总之 ...
北航计算机组成P2推荐题汇总
北航计算机组成P2推荐题目汇总前言
题目怎么来的就不再赘述,有感兴趣的同学可以走这里 北航计算机组成P1推荐题汇总
P2推荐题目汇总1202-35 calculate
注意题目要求的是按照输入的顺序输出计数的字符,不是按照ascii码表的位置
我开了两个数组一个记录26个字母的数量,一个记录出现的顺序(重复出现的字母不会进行第二遍),最后遍历记录出现顺序的数组即可
还有一个小小的点:因为样例看起来是一行读入一个字符,实际测评机是一个接一个的字符读入,所以不需要处理\n(我刚开始就处理了,导致报了一个非法读入的错误) .macro read_chr(%chr) li $v0, 12 syscall move %chr, $v0 # 不需要处理字母后面的\n # li $v0, 12 # syscall.end_macro
提供一个有处理是否有重复输入的代码块 .text for_z_begin: # 用于判断是否出现过这个字符 beq $t2, $s1, for_z_end # 对目前出现的所有字符遍历 sll $t3, $t2, 2 l ...
计算机网络--物理层
计算机网络–物理层前言
在上一次的 blog 中我们对于计算机网络的结构功能等基础内容,从这一节开始我们将要学习的是计算机网络模型的第一层–物理层,通过物理层我们可以将需要传递的数据变为真实的物理信号,由此通过信息通路(也就是第零层)传递出去
通信基础
信源
信息的发送方
信宿
信息的接收方
信道
信息传输的通道
信号
数字信号:信号是离散的
模拟信号:信号是连续的
信号
在计算机中,我们常常使用一位的二进制 0/1 来表示信号,但是这并不代表着信号只能是一位的二进制(两种)
码元
每一个信号都是一个码元,每一个码元都对应一个二进制数
对于一位的信号只有两种码元,我们称为二进制码元;对于两位的信号会有四种码元,我们称为四进制码元。一个信号输出的整个周期被称为信号周期或者码元周期
优缺点
优点:每个信号周期可以携带更多信息,每个码元可以携带更多信息
缺点:需要加强信号功率,并且对信道的要求更高
码元与比特的关系
一个码元可以携带多少比特,这取决于一个码元周期可以有多少种信号
$ X_{码元} = \log_2 K * X_{比特}$($K ...
计算机网络--概述
计算机网络–概述前言
国庆好无聊啊,小熊饼干接待完朋友、过完生日之后实在是没有什么事了,但是又不想更新Python,所以他决定开始学习计网
本栏目仅仅是笔者自学内容,与北京航空航天大学的计网无关,我不是我没有
什么是计网
硬件
主机,又称端系统可以简单理解我们日常使用的电脑、服务器、手机、各类智能嵌入式系统等,他们处于计算机网络的边缘,所以称为端系统
通信链路,像网线、电缆、光纤等物理连接设备,例如可以将两台电脑使用网卡连接,就组成了一个简单的计算机网络
通信设备,端系统向计算机网络核心传递信息的中转站,例如集线器、交换机、路由器,通过他们我们可以将若干简单的计算机网络组成复杂的计算机网络
软件
可以是在主机运行的应用程序,例如微信、QQ、网盘等,方便用户使用,实现资源共享的程序
可以是在通信设备中的控制程序,用以控制通信设备传输信息
协议
规定计算机网络中的通信规则,利用这种规则封装传递的信息或者解构信息
$Attention$
使用集线器可以简单连接某几台设备,缺点是可能导致发送信息之间的冲突
使用交换机则不会出现信息冲突,不过交换机一般用于构建较小的计算机网络
使用 ...
北航计算机组成P1推荐题汇总
北航计算机组成P1推荐题目汇总题目怎么来的
偷来的(搓手手
如果你看了一下推荐题目的URL的话,你会发现cscore简直是天生为爬虫而生的,甚至参数都已经写在URL里面了,这不是勾引是什么?http://cscore.buaa.edu.cn/#/problem?ProblemId=334&PieId=1202
PieId
似乎是每个P的编号,每年的都不一样,2306的1202代表推荐题目,其他的大都爬不到(悲
ProblemId
下辖的题目编号,额,毫无规律可言,建议遍历爬取
但是似乎每年相同模块(例如推荐题目)的相同题目编号都有题目(未经
以及题目按照难度依次上升(笔者认为的,毫无参考价值(bushi )源码获取
组合电路
过于简单,仅有提示
1202-405 FloatTypemodule FloatType( input[31: 0] num, output reg[4: 0] float_type ); //定义状态 parameter zero = 5'b1; ... reg[7: 0] exponen ...