一步步分析MIPS數據通路(單周期)


一步步分析MIPS數據通路

R型指令CPU數據通路:

此時的控制信號有:ALU_OP , Write_Reg。

如何確定單周期CPU完成指令的過程?

  1. 分析時序電路和組合邏輯:時序電路(需要clk,可以從圖上看到clk有四處):指令存儲器的讀操作、PC值更新、寄存器寫操作、標志寄存器的更新。 組合邏輯(不需要clk):寄存器讀操作、ALU運算。

  2. 設計時序:clk上升沿,啟動指令存儲器依據PC讀出指令;

    clk高電平(組合邏輯操作):PC自增、指令譯碼、寄存器讀、ALU運算。

    Clk下降沿:目的寄存器的寫入、PC值更新、標志寄存器更新。

    從圖中可以看出,紅框為clk產生處,只有指令存儲器的取指令部分是正的clk,PC的自增、標志寄存器的更新、寄存器堆的寫入都是clk#,故可以從圖中獲得設計的信息。

  3. 數據通路(通過一條指令來說明):(clk上升)使用當前PC寄存器的值取出一條指令

    (clk高電平)指令送到IR寄存器,分段直接送往譯碼單元和寄存器堆,獲得ALU_OP和Write_Reg信號。ALU接收到ALU_OP對兩個讀出的數據進行運算,同時計算標志寄存器的值。

    (clk下降沿)同時激活PC自增、目標寄存器的寫入、標志寄存器的更新,根據高電平生成的控制信號來確定是否寫入。

添加I型指令后的數據通路:

​ 首先確定為什么要修改和要修改什么?I型指令不像R型只能完成算術運算,其作用更多是用於數據傳輸、分支(轉移)、訪存。訪存決定了需要增加到存儲器的數據通路。分支跳轉決定了需要有對PC進行修改的手段。同時,I型指令格式的不同也代表要對指令寄存器IR指令分段時的結構進行修改。

​ 由於引入了立即數(偏移量)字段,其指令格式從655556(前三個5是寄存器)的分段變成了655 16的形式。只有兩個5,因此目的寄存器從原先的第三個5變成了第二個5.添加了控制信號rd_rt_s(1時W_Addr變成rt,否則仍然是rt)來修改W_Data,以控制寫入位置寫入的寄存器。同時由於要同時兼容R型和I型指令,故把數據的[5:0]同樣作為func輸入譯碼,而[15:0]作為立即數imm。為了確定立即數的擴展方式,添加了控制信號imm_s(1則符號擴展,0則0擴展,可以看出新手段往往用1來控制,且命名格式也有規律)。現在,只有兩個寄存器,一個作為源、一個作為目的。那么要進行I型指令的運算,另一個源操作數就是擴展后的imm了。於是,添加rt_imm_s(1則imm,0則rt(這里其實指代的是R型指令下rt指向的數據))作為ALU的第二個輸入。

​ 還需要解決的問題就是和存儲器的交互。在sw(在rs寄存器加上偏移量后指向的地址中寫入rt的數據)和lw(取出rs寄存器加上偏移量后的地址指向的數據,再放回到rt寄存器中,因此W_Addr為1)指令中,上面的imm會作為偏移量offset來使用,因此此時imm_s 和rt_imm_s信號都應該置為1(是的,是符號擴展)。通過ALU運算之后,獲得需要存放(sw)或者取數(lw)的地址。為了能夠表示讀還是寫入,增加Mem_Write信號(0時為讀時為寫)如果是讀出數據,那么就要寫回到寄存器堆中,由於R型指令(或者I型中的立即數算數指令)是直接把ALU的結果寫回寄存器堆,為了控制寫回的是哪一數據,添加alu_mem_s信號(0為alu數據,1為存儲器mem讀出數據)。注意,讀可以當作組合邏輯看待(高頻時鍾),寫需要clk(具體看題目中的clk)。

數據通路:以sw為例

​ (clk上跳沿)指令存儲器利用PC讀取指令

​ (clk高電平)指令分段、譯碼、運算(具體過程同R型)

​ (clk下跳沿)同時激活PC自增、目標寄存器的寫入、標志寄存器的更新。將運算結果寫入存儲器。

添加轉移指令后的數據通路

​ 轉移指令主要修改的部件是PC,典型指令有jr(R型指令,無條件跳轉),beq(I型指令相等跳轉),jal(J型指令,無條件跳轉,且當前PC值要存入ra寄存器(一般是堆的高處))。

​ 此處插播子程序調用知識:主程序CALL調用子程序,把PC+4放到堆棧,把新的地址置給PC,運行到RET指令,把堆棧中的PC+4還給PC,然后繼續運行。

​ 上圖中紅色部分是修改的部分。PC的來源從PC_new擴展到了rs(jr指令)、PC+4+offset<<2(beq)、PC+4高四位和指令低26位左移兩位拼接。因此需要4選一。

​ Jr指令的源寄存器應該寫為31,因此需要把rd_rt_s改成w_r_s中,添加2作為31號寄存器的地址。同時,由於要把PC+4的值寫入寄存器堆,alu_mem_s改名為wr_data_s需要擴展一個2接收PC_new 。

條件轉移中PC_s的兩種情況:分別對應着轉移和不轉移。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM