在笔者还在上数逻课程的时候,vivado的sim就已经似掉了。。。
吃了一年的时后我决定复活xsim,但是由于vivado 的操性这事实在太难。
所以我选择 续弦 使用vscode+modelsim的方式替换原来的vivado仿真工作流。
教程:#
我参考的教程
Q&A:#
- 环境配置过程中出现报错:
VsCode联合Modelsim进行自动编译,蓝色波浪线,Error: (vlog-66) Execution of vlib.exe failed.
国庆去了厦门。主要在思明区转了一圈,去看了双子塔、沙坡尾、中山街,在演武大桥观景台吹吹海风,坐船到海上游了一圈,在厦门大学门口溜达了一下,山海步道去上去看看风景。。。
为什么没有去鼓浪屿,因为鼓浪屿票买不到。
于我而言,厦门是一个新旧夹杂的城市。双子塔宏伟矗立,演武大桥曲折蜿蜒,然而在这些胜景的脚下,却散落着老旧的城区,环带着拥挤的街道
本文作为计组的学习记录。
之前学习的 数字逻辑设计 课程,简单介绍了计算机组成相关部件的设计,比如组合电路设计,时序电路设计。这些模块都很简单,比如加法器,选择器,编码器,解码器。而计算机组成这门课,就要利用这些简单的模块,设计计算机中更加复杂的元件,比如处理器,处理系统等等。最重要的是设计简单的 RISC(精简指令集)**-CPU核**。涉及到ALU、单周期流水线CPU和简单的系统。
之后我们还会学到另外一门课 计算机体系结构,那里我们会学到有关处理器的更高级的技术(比如如何优化性能)。
实验一般很难在课上做完。
这一章内容介绍什么是计算机,以及计算机中相关的内容。
计算机在二十世纪中叶开始迅速发展,从非电子,到电子管、晶体管、集成电路、大规模集成微处理器的出现,都引起了计算机发展的一个高潮。
计算机发展受芯片的约束,关于芯片发展的规律有一个 摩尔定律:集成电路单位面积上可容纳的晶体管,约每两年会翻一番。
计算机的类别:
之后的计算机会是什么样子呢?
计算机组成:
下面是一个框架:
构建一个处理器,实际上就是将集成电路/芯片 进一步集成的过程。
单晶硅-晶圆-带有功能的晶圆(网格化)-去掉坏的得到 裸片-封装成为芯片-测试
早期的芯片设计就是用晶体管搭 积木;后面出现了hdl;芯片上的连线是需要设计的,这就是版图(layout)设计;然后使用掩膜板来成型。
指令 是一堆声明,让机器能够做什么。
指令的意义,就是将机器内部的实现隐藏起来,而对外界暴露出了固定的、可以实现无穷多种功能的接口。这种接口就是指令。
指令集就是一堆指令的集合;
指令结构就是 指令的结构,指令由哪些部分组成。
risc-v指令集的指令特点是:
比如我们在高级语言中写下:f=(a+b)-(c+d)
,那么在底层实现上,就要使用计算部件对这些内容进行处理。
我们先来看看寄存器,这些寄存器是供各种数字计算需要而设计的。
简单而言:
为了获取数,我们需要加载/存储指令,这就是lw,sw等等指令的来源;由于risc-v指令集的位宽是64位,因而所有的指令都是按doubleword来讲的。
risc-v的存储有以下特性:
接下来我们就来讲内存相关的指令。其实也就是ld/sd/lw/sw,其形式为:ld rs offset(base)/sd rd offset(base)
例如偏移地址的计算。所谓 立即数以我的理解就是非存储形式的、直接使用的数,而不是放在寄存器或内存中。
I-format下的指令,因为移位操作最多移64位,从而imm可以压缩到6位,最后留下一部分func6供判断。
主要的指令有sll/srl/slli/srli/and/or/xor
,xor
可以实现not
的功能。
或者当移位的立即数就在寄存器中时,也有srl x5 x6 x7
beq rs1 rs2 L
,若相等跳转到L,因而可能需要
参照下面这个图:
最基本的指令结构就是r型指令;
I型指令既可以是addi也可以是ld指令,都涉及两个寄存器和一个立即数。这个立即数是2’complement,有符号数。
但store指令没有rd,因为要往存储器中存,从而将imm的rd改为imm的低五位。
cpu组成:
实验为我们准备了一个测试平台soc,我们可以写好自己的组件,然后放到这个平台上检测是否正常运行。