Shell脚本(1)
Shell(1)变量Bash脚本中变量可以分为字符串、数字、数组等等,较为常用的还是字符串
命名规范
只包含字母、数字和下划线: 变量名可以包含字母(大小写敏感)、数字和下划线 _,不能包含其他特殊字符。
不能以数字开头: 变量名不能以数字开头,但可以包含数字。
避免使用 Shell 关键字: 不要使用Shell的关键字(例如 if、then、else、fi、for、while 等)作为变量名,以免引起混淆。
使用大写字母表示常量: 习惯上,常量的变量名通常使用大写字母,例如 PI=3.14。
避免使用特殊符号: 尽量避免在变量名中使用特殊符号,因为它们可能与 Shell 的语法产生冲突。
避免使用空格: 变量名中不应该包含空格,因为空格通常用于分隔命令和参数。
定义# 注意不能有空格# str = "abc"是错误的写法str="abc"str='abc'digit=12declare -i digit=12array=(1 2 3 4 5)declare -A associate_array=(["A&quo ...
北航计算机组成P6
北航计算机组成P6前言
不要问我为什么先有P7再有P6,问就是忘了,一直忘到了现在,我真有点不记得课上的指令,反正我记得P6比P5简单来着
课下复习
课上测试
北航计算机组成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$为信号的种类数量)
...