资讯详情

计算机组成与设计 硬件/软件接口 Risc-v 版

第一章 计算机抽象及相关技术

1.1 引言

1.1.1 传统计算机应用分类及其特点

通用,各种软件;权衡成本和性能

基于网络;高容量、性能和可靠性;从小型服务器到建筑规模的范围;计算机用于为多个用户并行运行大型程序

高端科学与工程计算;最高能力代表了整个计算机市场的一小部分

嵌入式计算机(Embedded Computer) 隐藏为系统组件;严格的功率、性能和成本约束

1.1.2 欢迎来到后 PC 时代

电池驱动;连接到互联网;数百美元的;智能手机,平板电脑,电子眼镜

仓库规模计算机(WSC);软件即服务(SaaS);部分软件运行在PMD部分运行在云上;Amazon和谷歌

1.1.3 下面将介绍

  1. 如何将程序翻译成机器语言? (以及如何执行硬件)
  2. 硬件/软件接口
  3. 程序性能的决定是什么? (以及如何改进)
  4. 如何提高硬件设计师的性能?
  5. 并行处理是什么?

1.2 在计算机系统结构中 8 个伟大思想

1.3 在程序表象下

在这里插入图片描述

1.4 箱盖后面的硬件

典型的计算机包括 五个部分

1.4.1 显示器

1.4.2 触摸屏

:大多数平板电脑,智能手机使用电容式;电容式允许同时多次触摸 (取代键盘和鼠标)

1.4.3 打开机箱

数据通路(Datapath):操作数据 控制(Control):序列数据路径,内存,…缓存内存(Cache Memory) 小快速SRAM(静态随机访问存储器 Static Random Access Memory)内存用于立即访问数据

1.4.4 数据安全

:断电时丢失指令和数据。:磁盘、闪存、光盘(CDROM,DVD)

1.4.5 与其他计算机通信

1.5 存储制造技术

晶片价格用以下三个公式计算 每 晶 片 的 价 格 = 每 晶 圆 的 价 格 每 晶 圆 的 晶 片 数 × 良 率 每晶片的价格=\dfrac{每晶圆的价格}{每晶圆的晶片数\times 良率} 每晶片的价格=每晶圆的晶片数×良率每晶圆的价格 每 晶 圆 的 晶 片 数 ≈ 晶 圆 面 积 晶 片 面 积 每个晶片的晶片数\approx \dfrac{晶圆面积}{晶片面积} 每晶圆的晶片数≈晶片面积晶圆面积​ 工 艺 良 率 = 1 ( 1 + 单 位 面 积 的 缺 陷 数 × 芯 片 面 积 2 ) 2 工艺良率=\dfrac{1}{(1+\dfrac{单位面积的缺陷数\times 芯片面积}{2})^2} 工艺良率=(1+2单位面积的缺陷数×芯片面积​)21​

1.6 性能

1.6.1 性能的定义

我们强调 性 能 X = 1 执 行 时 间 X 性 能 Y = 1 执 行 时 间 Y 性能_X=\dfrac{1}{执行时间_X}\qquad性能_Y=\dfrac{1}{执行时间_Y} 性能X​=执行时间X​1​性能Y​=执行时间Y​1​ 若 有 性 能 X 性 能 Y = 执 行 时 间 Y 执 行 时 间 X = n 称 X 的 执 行 速 度 是 Y 的 n 倍 若有\quad \dfrac{性能_X}{性能_Y}=\dfrac{执行时间_Y}{执行时间_X}=n \quad 称 X 的执行速度是 Y 的 n 倍 若有性能Y​性能X​​=执行时间X​执行时间Y​​=n称X的执行速度是Y的n倍

1.6.2 性能的度量

:总响应时间,包括所有方面。处理,I/O,操作系统开销,空闲时间。决定系统性能。

:不同程序影响不同的CPU和系统性能

1.6.3 CPU 性能及其度量因素

程 序 的 C P U 执 行 时 间 = 程 序 的 C P U 时 钟 周 期 数 时 钟 频 率 = 程 序 的 C P U 时 钟 周 期 数 × 时 钟 周 期 时 间 程序的\mathrm{CPU} 执行时间=\dfrac{程序的\mathrm{CPU}时钟周期数}{时钟频率}=程序的\mathrm{CPU}时钟周期数\times 时钟周期时间 程序的CPU执行时间=时钟频率程序的CPU时钟周期数​=程序的CPU时钟周期数×时钟周期时间

1.6.4 指令性能

C P U 时 钟 周 期 数 = 指 令 数 × C P I \mathrm{CPU}时钟周期数=指令数\times \mathrm{CPI} CPU时钟周期数=指令数×CPI

1.6.5 经典的 CPU 性能公式

C P U 时 钟 周 期 数 = ∑ i = 1 n ( C P I i × 指 令 数 i ) 平 均 C P I = ∑ i = 1 n ( C P I i × 指 令 数 i 总 指 令 数 ) \mathrm{CPU}时钟周期数=\sum_{i=1}^n (\mathrm{CPI}_i\times 指令数_i) \\平均\mathrm{CPI}=\sum_{i=1}^n(\mathrm{CPI}_i\times\dfrac{指令数_i}{总指令数}) CPU时钟周期数=i=1∑n​(CPIi​×指令数i​)平均CPI=i=1∑n​(CPIi​×总指令数指令数i​​)

1.7 功耗墙

功 耗 ∝ 1 2 × 负 载 电 容 × 电 压 2 × 开 关 频 率 功耗\propto \dfrac{1}{2}\times 负载电容 \times 电压^2 \times 开关频率 功耗∝21​×负载电容×电压2×开关频率

1.8 沧海巨变:从单处理器向多处理器转变

1.9 评测性能

1.10 谬误与陷阱

改 进 后 的 执 行 时 间 = 受 改 进 影 响 的 执 行 时 间 改 进 量 + 不 受 影 响 的 执 行 时 间 改进后的执行时间=\dfrac{受改进影响的执行时间}{改进量}+不受影响的执行时间 改进后的执行时间=改进量受改进影响的执行时间​+不受影响的执行时间 :CPU 每秒执行几百万条指令

第二章 指令:计算机的语言

2.1 引言

使用大端法存储数据,不要求字地址对齐

寄存器类型。64位-双字;32位-字

  • x0:定值为0
  • x1:返回地址
  • x2:栈指针
  • x3:全局指针
  • x4:线程指针
  • x5-x7,x28-x31:临时值
  • x8:帧指针
  • x9,x18-x27:过程调用保存
  • x10-x11:函数参数与返回值
  • x12-x17:函数参数

2.2 计算机硬件的操作

2.3 计算机硬件的操作数

:x0-31(00000-11111)

:imm(x?)

:addi x22,x22,4

2.4 无符号数和有符号数

2.5 计算机的指令表示

R-型指令包含:所有的不含立即数的算术逻辑运算指令

I-型指令包含:所有的含立即数的算术逻辑运算指令,所有的 load 指令,jalr指令

S-型指令包含:所有的 store 指令

2.6 逻辑操作

所有含有立即数的移位操作只需要少量的立即数位数,它们也是I-型指令

2.7 用于决策的指令

SB-型指令包含:所有的条件分支指令

注意:SB-型指令没有第 0 位立即数,这意味着第 0 位缺省为 0 。只能跳转到偶数的位置。

条件分支指令采用 PC 相对寻址,跳转到 P C + i m m × 2 \mathrm{PC}+\mathrm{imm}\times 2 PC+imm×2

可以实现 循环 switch/case语句

2.8 计算机对于过程的支持

UJ-型指令包含:jal 指令

例 jal x1,L1

采用 PC 相对寻址,并且将返回地址 PC+4 赋值给 x1

另例 jalr x0,0(x1)

跳转到 0+x1 的位置,此处 x0 = 0 ,效果是丢弃返回地址

2.8.1 使用更多寄存器

2.8.2 嵌套过程

2.8.3 在栈中为新数据分配空间

2.8.4 在堆中为新数据分配空间

2.9 人机交互

我们分析一个例子

void strcpy (char x[], char y[])
{ 
        
    size_t i;
    i = 0;
    while ((x[i] = y[i]) != '/0') /* copy & test byte*/
        i += 1
}
strcpy:
	addi sp,sp,-8 	// adjust stack for 1 doubleword
	sd x19,0(sp) 	// push x19
	add x19,x0,x0 	// i=0
L1: add x5,x19,x11 	// x5 = addr of y[i]
	lbu x6,0(x5) 	// x6 = y[i]
	add x7,x19,x10 	// x7 = addr of x[i]
	sb x6,0(x7)	 	// x[i] = y[i]
	beq x6,x0,L2 	// if y[i] == 0 then exit
	addi x19,x19, 1 // i = i + 1
	jal x0,L1 		// next iteration of loop
L2: ld x19,0(sp) 	// restore saved x19
	addi sp,sp,8 	// pop 1 doubleword from stack
	jalr x0,0(x1) 	// and return

2.10 对大立即数的 Risc-v 编址和寻址

2.10.1 大立即数

U-型指令包括 lui 指令 auipc 指令

U 型指令用来设置寄存器高位

2.11 指令与并行性:同步

在并行中避免:两个处理器共享的内存。P1写,然后P2读取。数据竞争如果P1和P2不同步

需要使用原子操作,如下

保留加载:lr.d rd,(rs1) 从地址 rs1 加载,(rs1) -> rd

条件存储:sc.d rd,rs2,(rs1) rs2->(rs1) 存储,成功则设置 rd=0,失败则 rd=1。成功条件:内存值在上一次 lr.d 之后未更改。

可以通过该方案来对并行进程进行操作

		addi x12,x0,1 		// copy locked value
again: 	lr.d x10,(x20) 		// read lock
		bne x10,x0,again 	// check if it is 0 yet
		sc.d x11,x12,(x20) 	// attempt to store
		bne x11,x0,again 	// branch if fails
Unlock:
		sd x0,0(x20) 		// free lock

2.12 翻译并启动程序

第三章 计算机的算术运算

3.1 引言

本章包含,加减法,乘法,浮点运算,运算器

3.2 加法和减法

3.3 乘法

3.3.1 串行版的乘法运算及其硬件实现

3.3.2 带符号的乘法

3.3.3 快速乘法

3.4 除法

3.5 浮点运算

3.5.1 浮点表示

IEEE 浮点标准用 V = ( − 1 ) s × M × 2 E V=(-1)^s\times M\times 2^E V=(−1)s×M×2E 的形式来表示一个数(s 符号,M 尾数,E 阶码)

有三种对应情况

  1. 最普遍的情况,当 exp 位既不全为 0,也不全为 1 时。这种情况下:

    阶码的值 E = e − B i a s E=e-Bias E=e−Bias 其中 B i a s = 2 k − 1 − 1 Bias = 2^{k-1}-1 Bias=2k−1−1,在单精度中对应为 127,双精度对应为 1023。最终阶码的取值范围为 − 126 ∼ + 127 -126\sim+127 −126∼+127(单精度), − 1022 ∼ + 1023 -1022\sim+1023 −1022∼+1023

    尾数值为 M = 1 + f M=1+f M=1+f 其中 f = 0. f n − 1 … f 1 f 0 f=0.f_{n-1}\dots f_1f_0 f=0.fn−1​…f1​f0​

    标签: 82r晶片电阻集成电路x0le154电容2sd965晶体管2x10p线对线连接器2sb1293晶体管

    锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台