Cracking Digital VLSI Verification Interview 第二章

Computer Architecture

[30] RISC和CISC的區別是什麼?

  • RSIC:精簡指令集。CISC:複雜指令集 算法

  • RISC結構具備比較少的指令,這些指令是簡單的指令(固定長度的指令和較少的尋址模式)。CISC結構具備更多的指令,更加複雜,可變長度指令和更加多的尋址方式編程

  • RISC具備較小的指令,硬件上相對沒有那麼複雜。CISC使用更加複雜的硬件來解碼和分解複雜的指令。所以RISC更加側重軟件,CSIC更加側重硬件緩存

  • CISC具備更加複雜的指令,所以可使用更加少的RAM來存儲編程指令。相對的,RISC須要更加多的RAM來存儲指令數據結構

  • RISC的指令一般須要一個週期完成,而CISC能夠能須要多個週期才能完成,具體取決於指令的複雜性。所以在RISC中能夠進行流水線化。架構

  • RISC經過減小每條指令的週期數來提升性能,而CISC經過減小每條程序的指令數來提升細嫩那個。CISC支持單條指令完成從內存讀取,執行操做,寫回內存的操做(mem2mem操做)。而RISC完成則須要三個指令。app

[31] 馮諾依曼結構和哈佛結構有什麼區別?

  • 馮諾依曼結構中,指令和數據存儲在同一個存儲器中。CPU讀取數據和指令使用同一條總線,具備存儲數據和指令的統一緩存。dom

  • 哈佛結構中,數據和指令是分開存儲的,可使用兩條不一樣的總線同時訪問數據和指令,指令和數據都具備單獨的緩存。異步

[32] 解釋內存存儲中的Little Endian 和 Big Endian的概念

字節順序是指字節在內存中的存儲順序。數據在內存中一般是按照字節尋址的,可是大多數計算即一般採用32位(4個字節)存儲操做數的。所以,爲了將一個字節存在存儲器中,由兩種方式:ide

  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中不一樣類型的寄存器有什麼區別?

  • Program Counter (PC):保存當前正在執行的指令的地址

  • Instruction Register (IR):保存當前正在執行的指令的寄存器。(PC所指向的地址上的值)

  • General Purpose Registers:通用寄存器是用於存儲程序所須要的數據,通用寄存器的數量由體系結構定義,並能夠由軟件用於運行期間零是存儲數據。

  • Stack Pointer Register (SP):堆棧指針寄存器用於存儲壓入隊長的最新數據的地址。常見的用途是存儲子函數調用時的返回地址。

[36] 解釋計算機架構中的流水線

流水線技術是在單個處理器中實現指令集並行的技術。將基本的指令週期拆分爲多個階段,無需等待每條指令完成,並行執行不一樣的步驟,在一條指令結束以前開始下一條指令。流水線能投提升指令的吞吐率,可是並不能減少指令的指令時間。

[37] 什麼是pipeline hazard?處理器中有幾種pipeline hazard?

pipeline hazard是指因爲某些緣由下一條指令沒法執行的狀況。有三種類型的hazard:

  1. Structural Hazards:因爲硬件資源不足產生的。好比若是設計結構中只有一個浮點執行單元,每次執行都須要兩個週期的時間,那麼當程序中出現背靠背的浮點指令時會致使流水線中止。除此以外內存和緩存的訪問也會致使Structural Hazards

  2. Data Hazards:因爲先後指令數據的依賴性而形成的hazard

  • A、RAW:先讀後寫register,ture data dependence

  • B、WAW:先寫後寫register,output data dependence

  • C、WAR:先寫後讀register, anti-data dependence

  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),這是映射時的最小單位。

  • 直接映射(Direct Mapping):直接映射中,主內存和cache中始終存在一對一的映射,一組只有一個數據塊。例如:在下圖中,cache大小爲128個塊,而主內存中有4096個塊。設計實現是基於模數計算獲得的,i爲cache的塊序號,j是主內存的塊編號,m是cache的行數,i = j mod m。若是塊的大小爲64B而地址爲32爲,則地址[5:0]稱爲字節偏移量,它說明字節在塊中的位置,地址[12:6]稱爲組位,說明地址地址映射到哪一組,剩下的地址位做爲標誌位,標誌說明cache映射了哪些內存中的地址。這是最簡單的映射,而且能夠經過內存地址能夠輕鬆計算cache中的數據在內存中的位置,而且只須要一個標記爲進行比較就能知道是否命中。這種映射的缺點是命中率低, Cache的存儲空間利用率低。

  • 全局關聯映射(Fully Associate Mapping):任何的內存塊都能映射到cache的任何塊中,使用和上面的圖同樣的例子,地址[5:0],做爲塊內部的索引,剩下的全部位都用於和cache中的全部標記爲進行比較,這須要很大的比較器。雖然這種方式命中率較高,Cache的存儲空間利用率高,可是線路複雜,成本高,速度低

  • 組關聯映射(Set Associate Mapping):將cache分紅u組,每組v行,主存塊存放到哪一個組是固定的,至於存到該組哪一行是靈活的,即有以下函數關係:cache總行數m=u×v,組號q=j mod u組間採用直接映射,組內爲全相聯。例如,下圖顯示了128個塊的相同高速緩存,這些高速緩存組織爲64個集合,每一個集合具備2個塊。硬件較簡單,速度較快,命中率較高,可是與分組有關係。

[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] 直寫式緩存和回寫式緩存有什麼區別?優缺點是什麼?

  • 直寫式緩存方式: 當CPU要將數據寫入內存時,除了更新緩衝內存上的數據外,也將數據寫在SDRAM中以維持主存與緩衝內存的一致性,當要寫入內存的數據多起來的話,速度天然就慢了下來.

  • 回寫式緩存方式: 當CPU要將數據寫入內存時,只會先更新緩衝內存上的數據,隨後再讓緩衝內存在總線不塞車的時候才把數據寫回SDRAM,因此速度天然快得多

回寫緩存在內存帶寬利用方面更好,由於僅在須要時纔回寫數據。 若是系統中存在多個能夠緩存同一地址的cache,則維護數據一致性很是複雜,由於內存可能並不老是具備最新數據。

[52] inclusive 和 exclusive cache之間有什麼區別?

cache的inclusive和exclusive屬性適用於具有多級緩存的設計。

  • 當CPU試圖從某地址load數據時,首先從L1 cache中查詢是否命中,若是命中則把數據返回給CPU。若是L1 cache缺失,則繼續從L2 cache中查找。當L2 cache命中時,數據會返回給L1 cache以及CPU。若是L2 cache也缺失,很不幸,咱們須要從主存中load數據,將數據返回給L2 cache、L1 cache及CPU。這種多級cache的工做方式稱之爲inclusive cache。某一地址的數據可能存在多級緩存中。

  • 與inclusive cache對應的是exclusive cache,這種cache保證某一地址的數據緩存只會存在於多級cache其中一級。也就是說,任意地址的數據不可能同時在L1和L2 cache中緩存。

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的算法

  • LRU(Least Recently Used):將最近最少使用的內容替換出cache

  • MRU (Most Recently Used):與MRU,將最近常常的內容提出cache

  • PLRU (Pseudo LRU):關聯性很大的時候,LRU的實現成本很高。若是實際狀況在丟棄任一個最近最少使用的數據就能知足,那麼僞LRU算法就派上用場了,它爲每個緩存數據設立一個標誌位就能夠工做。

  • LFU (Least Frequently Used):這個緩存算法使用一個計數器來記錄條目被訪問的頻率。經過使用LFU緩存算法,最低訪問數的條目首先被移除。這個方法並不常用,由於它沒法對一個擁有最初高訪問率以後長時間沒有被訪問的條目緩存負責。

  • Random replacement:在該算法中,不存儲任何信息,而且在須要替換時選擇一條隨機行。

[54] 緩存一致性的問題是什麼?

在多個處理器擁有本身的cache的共享多處理器系統中,相同數據(相同地址)的多個副本可能會同時存在於不一樣的cache中。 若是容許每一個處理器自由更新cache,則可能致使內存視圖不一致。 這稱爲高速緩存一致性問題。 例如:若是容許兩個處理器將值寫入同一地址,則在不一樣處理器上讀取同一地址可能會看到不一樣的值。

[55] 基於監聽和基於目錄的緩存一致性協議之間有什麼區別?

  • Snoop based Coherence Protocol:來自處理器的數據請求將發送到共享系統一部分的全部其餘處理器。 其餘全部處理器都監聽此請求,並查看它們是否具備數據副本並作出相應響應。 所以,每一個處理器都須要維護存儲器的一致性視圖。

  • Directory based Coherence Protocol:目錄用於跟蹤哪些處理器正在訪問和緩存哪些地址。 發出新請求的任何處理器都將檢查此目錄,以瞭解其餘代理是否有副本,而後能夠向該代理髮送點對點請求以獲取最新的數據副本。

Snoop based Coherence Directory 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」:

  • F (Forward): 在MOESI協議中,S狀態的定義發生了細微的變化。當一個Cache行狀態爲S時,其包含的數據並不必定與存儲器一致。若是在其餘CPU的Cache中不存在狀態爲O的副本時,該Cache行中的數據與存儲器一致;若是在其餘CPU的Cache中存在狀態爲O的副本時,Cache行中的數據與存儲器不一致。

  • O (Owned): O位爲1表示在當前Cache 行中包含的數據是當前處理器系統最新的數據拷貝,並且在其餘CPU中必定具備該Cache行的副本,其餘CPU的Cache行狀態爲S。若是主存儲器的數據在多個CPU的Cache中都具備副本時,有且僅有一個CPU的Cache行狀態爲O,其餘CPU的Cache行狀態只能爲S。與MESI協議中的S狀態不一樣,狀態爲O的Cache行中的數據與存儲器中的數據並不一致。

[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] 獨熱碼在設計中有什麼好處?

獨熱碼中,狀態轉換時,會有兩位改變,一位清零,一位置一。它的優勢時,不須要進行解碼就能知道當前的狀態。獨熱碼會使用更多的觸發器,可是更加少的組合邏輯,在時序電路中不須要用解碼邏輯進行區分狀態。

相關文章
相關標籤/搜索