其他分享
首页 > 其他分享> > Cracking Digital VLSI Verification Interview 第二章

Cracking Digital VLSI Verification Interview 第二章

作者:互联网

Computer Architecture

[30] RISC和CISC的区别是什么?

[31] 冯诺依曼结构和哈佛结构有什么区别?

[32] 解释内存存储中的Little Endian 和 Big Endian的概念

字节顺序是指字节在内存中的存储顺序。数据在内存中通常是按照字节寻址的,但是大多数计算即通常采用32位(4个字节)存储操作数的。因此,为了将一个字节存在存储器中,由两种方式:

  1. 高字节存在低地址中,这称之为Big Endian

  2. 低字节存在低地址中,这称之为Little Endian

例如,当cpu向地址0x1000中写入0xDDCCBBAA时,两种方式就会出现差异

[33] SRAM和DRAM的区别是什么?

DRAM:Dynamic Random Access Memory。动态随机存储,数据以电荷的形式存储,每个存储单元是由晶体管和电容组成的,数据存在电容中。DRAM是易失性设备,电容会因为漏电而流失电荷,所以需要定时刷新。

SRAM:Static Random Access Memory。静态随机存储,不需要属性,只需要电源即可,SRAM的存储单元由六个晶体管组成,因此与DRAM相比,占用面积更加多。

SRAM速度快,成本搞,常用于高速缓存。DRAM密度小,速度慢,常用于主存储器

[34] 对于256KB的内存,如果按字节寻址,需要多少位的地址线?

256KB=2^8*2^10Bytes,需要18位地址线

[35] CPU中不同类型的寄存器有什么区别?

[36] 解释计算机架构中的流水线

流水线技术是在单个处理器中实现指令集并行的技术。将基本的指令周期拆分为多个阶段,无需等待每条指令完成,并行执行不同的步骤,在一条指令结束之前开始下一条指令。流水线能投提高指令的吞吐率,但是并不能减小指令的指令时间。

[37] 什么是pipeline hazard?处理器中有几种pipeline hazard?

pipeline hazard是指由于某些原因下一条指令无法执行的情况。有三种类型的hazard:

  1. Structural Hazards:由于硬件资源不足产生的。比如如果设计结构中只有一个浮点执行单元,每次执行都需要两个周期的时间,那么当程序中出现背靠背的浮点指令时会导致流水线停止。除此之外内存和缓存的访问也会导致Structural Hazards

  2. Data Hazards:由于前后指令数据的依赖性而造成的hazard

  1. Control Hazards:当碰到跳转指令时,processor会stall一个cycle。 因为processor在处理指令时会分两个stage:取指令和解码指令。 当一条指令进入到解码阶段时,才会被发现需要跳转,所以在取指令阶段 的那条指令会被废掉,故浪费掉一个cycle。

[38] 如何避免三种pipeline hazard?

  1. Structural Hazards:将一个function unit切分成更小的stage或对设计相同功能的硬件等,总之,就是让硬件资源够用。

  2. Data Hazards:A情况是真正的数据依赖,会产生hazard,可以用forwarding技术来减少或消除它;而B和C是在当指令顺序被compiler或者是硬件调整后才会出现的数据依赖。如果出现了B和C的情况,可以有一种技术来消除它,叫做register renaming。

  3. Control Hazards:可以在program中加入likely()or unlikely()来帮助compiler预测taken or not taken的可能性。另外,compiler可以通过delayed-branch的技术来消除branch hazard,但是该技术很少用在很长的pipeline中。最后,可以通过硬件的技术消除Brach hazard。以上的技术都是compiler或hardware的技术,programmer可以不关心,但好的if语句应该 如下:

 if(unlikely(condition))  
 {  
  几率小  
 }  
 else  
 {  
  几率大  
 }  
 注意:将几率大的语句放在not taken下面,将几率小的语句放在taken下,这样会节省4个
 cycle左右(由pipeline的深度决定)。另外,还有一种写法就是将unlikely改为likely,将几率大的和几率小的对调,这种方法比第一种方法要慢或持平(至于原因有compiler的原因,有pipeline的原因,所以它依赖于compiler和chip的设计)。

[39] 如果一个流水线由十个阶段,每个阶段需要1ns执行。假设没有hazards,那么处理100个数据需要多久?

第一个数据需要10ns完成,此后1ns完成一个数据的处理,因此总时间位10+99=109ns

[40] 指令有多少种寻址方式?

  1. 立即数寻址,操作数作为指令的一部分

 add r0 r1 0x12 将r1+0x12的结果存在r1
  1. 直接寻址,操作数的地址直接出现在指令中

 load r0 0x10000 将地址0x10000的数据存到r0中
  1. 寄存器寻址,操作数被存在寄存器中,寄存器的名字出现在指令中

 mul r0, r1 , r2 将r1*r2的结果存在r0中
  1. 偏移量寻址,操作数的地址由一个寄存器的数据加上一个立即数的偏移量得到

 load r0 r1 offset r1包含了及地址,r1+offset才是真实的地址

[41] 什么是时间局域性和空间局域性?

局域性原理:程序常常重复使用它们最近用过的数据和指令。一条广泛适用的经验规律是:一个程序90%的执行时间花费在仅10%的代码中。局域性意味着我们可以根据一个程序最近访问的指令和数据,比较准确地预测它近期会使用哪些内容。局域性的原理也适应于数据访问,不过不像代码访问那样明显。

[42] 计算机系统中有哪些存储?

  1. Register

  2. Cache

  3. Main Memory/Primary Memory

  4. Secondary Memory (Magnetic/Optical)

[43] 什么是cache?

cache是小型的快速存储。通常在Main Memory和CPU之间,有时放置于CPU内。

[44] 概述cache操作,cache功能的原理是?

每当CPU请求存储位置的内容时,都会首先检查cache中是否有此数据。如果cache中存在数据,则CPU直接从cache中获取数据。 由于不需要CPU进入该数据的Main Memory,因此速度更快。 如果缓存中不存在数据,则将一块数据从Main Memory读取到cache中,然后以字块的形式从cache中传输到CPU。

[45] 什么是cache的miss和hit?

在cache中查找地址时,若缓存中包含该内存位置,称之为cache hit。如果在cache找不到,则称之为cache miss。

[46] 如果一台机器存在cache,那么在链表和向量中搜索一个值的性能表现有什么差异?

链表是一种将其元素存储在非连续存储位置中的数据结构,而向量是一种将元素存储在连续位置中的数据结构。 对于具有cache的设计:如果cache中存在一块数据,则很可能在cache中也存在后续的连续数据,因为通常是从主存储器到高速缓冲存储器的任何取指令 根据缓存行(通常为64或128字节)获取。 因此,在拥有cache的机器上,通过向量进行搜索将比链表进行搜索更快。

[47] 将内存映射到cache有哪些机制?请比较他们的优缺点

一共有三种主要的映射方法。这三种映射中,主存储器和cache都被划分为存储块(blocks of memory,也称cache line,每个64bytes),这是映射时的最小单位。

[48] 更高关联性的缓存有什么缺点?

更高关联性的cache意味着需要更加大的比较器,用于将传入的地址和标签进行对比,会导致更加大的硬件需求和功耗。

[49] 一个按字节寻址的CPU的cache具有以下特征:a)与大小为1byte的块直接映射 b)块的cache索引位4位。那么cache中包含多少个块,作为cache的一部分,需要存储多少个标记为?

cache的索引位有4位,因此cache包含2^4=16个块,每个块只有1byte所以不需要块内索引,剩下的16-4=12位全部作为标记位

[50] 一个四路组关联的cache总大小为256KB,如果每个cache line的大小为64byte,那么cache中有多少组?标记位需要多少位?假设地址位宽位32位。

cache的块的数量为256K/64=4096,而cache为四路关联,则组数量为4096/4=1024。64byte的cache line 需要6位进行块内索引,10位进行集合索引,剩下的32-6-10=16位作为标记为

[51] 直写式缓存和回写式缓存有什么区别?优缺点是什么?

回写缓存在内存带宽利用方面更好,因为仅在需要时才回写数据。 如果系统中存在多个可以缓存同一地址的cache,则维护数据一致性非常复杂,因为内存可能并不总是具有最新数据。

[52] inclusive 和 exclusive cache之间有什么区别?

cache的inclusive和exclusive属性适用于具备多级缓存的设计。

exclusive cache的优点之一是多级cache可以一起存储更多的数据。一般使用inclusive cache类型,每次cache miss,可以从下一级的cache中寻找,load。而exclusive cache,每次cache miss,只能去main memory中load。但是exclusive cache比较节省cache size。

[53] 组关联映射中用于替换cache line的算法有什么不同?

以下是一些可用于替换cache line的算法

[54] 缓存一致性的问题是什么?

在多个处理器拥有自己的cache的共享多处理器系统中,相同数据(相同地址)的多个副本可能会同时存在于不同的cache中。 如果允许每个处理器自由更新cache,则可能导致内存视图不一致。 这称为高速缓存一致性问题。 例如:如果允许两个处理器将值写入同一地址,则在不同处理器上读取同一地址可能会看到不同的值。

[55] 基于监听和基于目录的缓存一致性协议之间有什么区别?

Snoop based CoherenceDirectory based Coherence Protocol
对于小的系统来说,如果带宽足够,基于监听的协议速度会更加快 基于目录的协议需要使用查找表,这将会导致较长的时延
基于监听的协议不适合大型系统,因为它需要将将每一个请求信息进行广播 由于不需要广播,基于目录的协议更加适合大型系统

[56] 什么是MESI协议?

MESI协议时多处理器系统中最常用的cache一致性协议。MESI 是指4中状态的首字母。每个Cache line有4个状态,可用2个bit表示,它们分别是:

状态描述监听任务
M 修改 (Modified) 该Cache line有效,数据被修改了,和内存中的数据不一致,数据只存在于本Cache中。 缓存行必须时刻监听所有试图读该缓存行相对就主存的操作,这种操作必须在缓存将该缓存行写回主存并将状态变成S(共享)状态之前被延迟执行。
E 独享、互斥 (Exclusive) 该Cache line有效,数据和内存中的数据一致,数据只存在于本Cache中。 缓存行也必须监听其它缓存读主存中该缓存行的操作,一旦有这种操作,该缓存行需要变成S(共享)状态。
S 共享 (Shared) 该Cache line有效,数据和内存中的数据一致,数据存在于很多Cache中。 缓存行也必须监听其它缓存使该缓存行无效或者独享该缓存行的请求,并将该缓存行变成无效(Invalid)。
I 无效 (Invalid) 该Cache line无效。

[57] 什么是MESIF和MOESIF协议?

是对于MESI协议的扩展,引入了两个新状态“F”“O”:

[57] 什么是虚拟内存?

虚拟内存是一致内存管理技术,及时实际的物理内存很小,虚拟处理器也允许处理器查看地址的虚拟连续空间。操作系统管理虚拟地址空间以及从辅助设备(如磁盘)到物理主内存的内存分配。CPU中的地址转换硬件(memory management unit,MMU)将虚拟地址转换为物理地址。 此地址转换使用分页的概念,其中将连续的内存地址块(称为页)用于虚拟内存和实际物理内存之间的映射。

[58] 虚拟内存地址和物理内存地址的区别是什么?

软件程序或进程用来访问其地址空间中存储位置的地址称为虚拟地址。 然后,操作系统连同硬件将其转换为另一个地址,该地址可用于实际访问DRAM上的主内存位置,该地址称为物理地址。 地址转换是使用分页的概念完成的,如果主内存或DRAM没有此位置,则在OS的协助下,数据将从辅助内存(如磁盘)移至主内存。

[59] 什么是页的概念?

所有虚拟内存都将虚拟地址空间划分为页,页内的虚拟内存地址是连续的。页是内存从辅助存储移动到物理内存以管理虚拟内存的最小单位。大多数计算机系统的页至少为4KB.当需要更大的实际内存是,某些结构还支持更大的页。页表用于将应用程序看到的虚拟地址转换为物理地址,是一种数据结构,用于多页情况下,在内存中虚拟地址到物理地址的映射。

[60] 什么是TLB?

TLB: Translation Lookaside Buffer。根据功能可以译为快表,直译可以翻译为旁路转换缓冲,也可以把它理解成页表缓冲。里面存放的是一些页表文件(虚拟地址到物理地址的转换表)。当处理器要在主内存寻址时,不是直接在内存的物理地址里查找的,而是通过一组虚拟地址转换到主内存的物理地址,TLB就是负责将虚拟内存地址翻译成实际的物理内存地址,而CPU寻址时会优先在TLB中进行寻址。处理器的性能就和寻址的命中率有很大的关系。

[61] 什么是页面错误(page fault)?

当程序访问映射到虚拟地址空间但未加载到主存储器中的内存页时,计算机硬件[内存管理单元(MMU)]会发起中断。 此中断称为页面错误。

[62] 如果CPU正在执行一个任务,如何停止他并运行另一个任务?

可以使用外部中断源来中断CPU上的程序执行。

[63] 什么是中断和异常,它们有何不同?

通常由外部硬件(I / O设备或其他外围设备)生成,并且不会与指令执行边界同步。例如:键盘,存储设备或USB端口可能会发生中断。当前指令执行结束后,总是对中断进行服务,并且CPU跳转到执行中断服务程序。

异常当处理器在执行指令时检测到任何预定义条件时生成的同步事件。例如:当程序遇到被零除或未定义的指令时,它将生成异常。异常又分为三种类型,程序流的改变方式取决于类型:

  1. 故障:在发生故障的指令之前由处理器检测到故障并对其进行维修

  2. 陷阱:在导致陷阱的指令之后对陷阱进行维修。最常见的陷阱是用于调试的用户定义中断。

  3. 中止:中止仅用于在执行不再继续的情况下发出严重的系统问题信号

[64] 什么是向量中断?

向量中断是一种中断,终端设备使用该中断特有的代码将处理器定向到正确的中断服务程序中,该代码由中断设备与该中断一起发送给处理器。

而非向量中断,中断服务程序需要读取中断寄存器,解码出导致中断的中断源,然后执行特定的中断服务程序

[65] 有哪些技术可以提高从内存提取指令的性能?

指令缓存和预取算法将在实际的指令解码和执行阶段之前继续提取指令,这可以较小设计中指令提取阶段的存储等待时间延迟。

分支预测基于历史指令预测是否将发生条件分支,而分支目标预测将有助于在处理器计算之前预测目标。 这能最大程度地减少指令提取停顿,因为提取算法可以根据预测保持提取指令。

[66] 内存映射I/O(memory mapped I/O,MMIO)是什么意思?

Memory Mapped I/O (MMIO)是一种在CPU与I/O或外围设备之间执行输入/输出(I/O)的方法.CPU使用相同的地址总线来访问内存和I/O设备(包括I/O设备内部的寄存器或内部的任何内存)。在系统地址映射中,为I/ O设备保留了一些内存区域,并且当CPU访问该地址时,响应访问并监视该地址总线的相应I/ O设备。例如:如果CPU具有32位地址总线:它可以访问0到2\^32之间的地址,并且在该区域中,我们可以为一个或多个I/O设备保留地址(例如0到2^10)。

[67] 独热码在设计中有什么好处?

独热码中,状态转换时,会有两位改变,一位清零,一位置一。它的优点时,不需要进行解码就能知道当前的状态。独热码会使用更多的触发器,但是更加少的组合逻辑,在时序电路中不需要用解码逻辑进行区分状态。

标签:缓存,VLSI,cache,地址,指令,Verification,Cracking,CPU,内存
来源: https://www.cnblogs.com/icparadigm/p/12266540.html