CPU指令分析 1

2021-09-30 16:46:35 字數 1185 閱讀 7995

if階段的操作有取指令,並決定下一條pc暫存器的內容。if階段由流水線暫存器與匯流排介面組成。

首先pc、指令暫存器以及流水線資料有效標誌都設定為初始值以及對應的無效值:

if_pc = 0;  

if_insn = nop[32'd0];

if_en = disable;

流水線暫存器的重新整理要在延遲訊號stall無效的時候才能重新整理,重新整理有以下三個動作* flush有效,對流水線暫存器進行重新整理操作 本操作包括設定新的pc位址,指令暫存器設定為nop,流水線資料有效標誌置為無效 * 分支處理 分支訊號有效的時候,pc設定為分支位址,指令暫存器設定為讀取的指令,流水線資料有效標誌設定為有效 * pc步進處理 在既沒有延遲,也沒有分支的情況下,pc位址+1,指令暫存器和流水線資料有效標記和分支處理中的保持一致

指令insn等於rd_data,rd_data**於兩個地方:要麼是spm裡面的資料,要麼是匯流排上的bus_rd_data。if_pc回去控制address,來控制匯流排的位址。if階段的匯流排訊號會連線到匯流排0上。

首先在bus_if_state_idle狀態,在重新整理訊號flush無效,address選通訊號as_n有效的時候進行判斷(flush是mem_flush,上電之後是無效的,as_n一直有效的[常量]) :

always @(posedge clk or `reset_edge reset) begin

if (reset == `reset_enable)

begin

rdy_n <= `disable_n;

end

else begin

if ((cs_n == `enable_n) && (as_n == `enable_n))

begin

rdy_n <= `enable_n;

end

else

begin

rdy_n <= `disable_n;

endend

end

從上述**可看出,一旦cs和as同時有效,則s0的ready訊號就有效,它們之前會有乙個clock的延時。

id階段對指令進行解碼並生成必要的訊號。資料的直通,load冒險檢測、分支的判定都在這一階段進行。id階段由指令解碼器decoder和流水線暫存器id_reg構成。

CPU指令重排序

cpu的速度至少比記憶體快100倍,為了提公升效率,會打亂原來的執行效率,會在一條指令執行過程中 比如去記憶體讀資料,大概慢100多倍 去同時執行另一條指令 前提是兩條指令沒有依賴關係 體現在 層面 就是,寫在後面的 可能比前面的 先執行。觀察下面 測試指令重排序 public class reor...

cpu分析簡介

程序占用cpu過高,一般有以下兩種原因 1 業務量過大導致程序處理負荷高,占用cpu資源 2 程式bug導致,比如死迴圈 初步檢視cpu占用情況 top進一步分析 對於程式陷入死迴圈導致cpu占用過高類問題,最好的辦法是把程序當前的堆疊資訊列印出來,根據堆疊找到 快速定位出問題。step1 檢視執行...

CPU監控分析

名稱 初始安裝 說明uptime 顯示系統執行時間和cpu負載情況 top 可以實時動態地檢視系統的整體運 況 htop top高階版 mpstat 多核cpu效能分析工具,實時檢視每個cpu的效能指標,以及所有cpu的平均指標 vmstat 檢視系統的整體使用情況 iostat 檢視cpu和磁碟i...