取指模組目標:以最快速度連續不斷地從儲存器取出指令供處理器核執行
取指模組效能指標
首先需要保證儲存器讀延遲越小越好。片外ddr儲存器或者flash儲存器可能需要幾十個週期的延遲,片上地sram也可能要幾個週期的延遲。為了能快速取值,通常使用itcm和i-cache的方法。
itcm(instruction tightly coupled memory)itcm和i-cache的儲存一般用sram實現。sram讀埠往往寬度固定,以32位sram為例,每個時鐘週期可以按照乙個位址讀出乙個32位的資料。若一條指令處於位址不對其的位置,則需要兩個時鐘週期進行讀取再拼接。所以要想辦法實現非對齊的指令也能乙個週期進行讀取。i-cache(instruction cache)
分支跳轉指令非對齊:如果跳轉目標位址與32位位址邊界不對齊,且需要取出32位,此時剩餘快取無法實現。可以採用兩塊32位sram交錯儲存,位址不對齊的指令可以在同乙個時鐘週期訪問兩個sram各取16位進行拼接
1、分支指令型別
無條件跳轉/分支
帶條件跳轉/分支
為防止帶條件跳轉造成流水線空週期,採用分支**技術。
2、**方向
靜態**:僅依靠這條分支指令本身的資訊進行**
動態**:依賴已經執行過的指令的歷史資訊和分支指令本身的資訊綜合進行**
3、**位址
常見技術
取值時能盡快解碼獲得當前取出的指令型別
長度資訊放於低位,如果是16位指令也可以一取得就能判斷是16還是32,不必等待取完另外16指令字。而若不必支援壓縮指令子集,指令低幾位還可以忽略不計,減少指令快取開銷。
可以通過編譯器優化**,使向後跳轉的分支指令比向前跳轉的分支指令更大概率跳轉,配合硬體靜態分支**,提高效能。
使用jal指令,若目標暫存器索引值rd為x1或x5,則進行ras壓棧
對於jalr指令
軟體編譯器按照原則生成彙編**,可以保證硬體行為和軟體行為吻合,ras**準確性。
萬事開頭難,幹就完事兒了
總結今天在學習c語言巨集定義的時候發現了乙個問題。定義是這樣的 define sum a,b a b define sharp a,b a b 我們都知道c c 的巨集定義僅僅是進行字元替換。1.sum a,b 會將代入,然後求和 2.sharp a,b 會將a b組合在一起,成為乙個字串 然後進行...
python第七章 python教程(第七章)
字典和集合 字典是python中唯一,乙個對映型別 如何建立乙個字典,如下 dict dict 滲透 網路安全 怎麼理解字典呢?現實生活中的字典可以通過首字母進行查詢要查詢的漢子,python也可以這樣理解,通過 前的元素查詢到冒號後的元素。為什麼說字典是唯一乙個對映型別呢?看圖。對映型別區別與序列...
第七章 函式
1.ansi c 允許函式原型的使用,函式宣告提供給編譯器和之後的呼叫函式返回值型別,引數型別和數量的資訊,而k c用單獨的列表給出引數的型別,編譯器只記住函式的返回值型別,但不儲存函式的引數數量和型別 2.沒有return語句的函式,隱式的返回 3.函式的原型可以單獨放於乙個標頭檔案中,一定要具有...