32位DSP設計中的流水線數據相關問題及解決辦法
引言 在航空微電子中心的某預研項目中,需要開發(fā)設計某32位浮點通用數字信號處理器(DSP)。本系統(tǒng)控制通路部分的設計采用超級哈佛及五級流水線結構。本文分析了該流水線的設計過程,并對遇到的數據相關問題提出了一種新的解決方法。 1 流水線結構 流水線處理器一般把一條指令的執(zhí)行分成幾個步驟,或稱為級(stages)。每一級在一個時鐘周期內完成,也就是說在每個時鐘周期,處理器啟動并執(zhí)行一條指令。如果處理器的流水線有m級,則同時可重疊執(zhí)行的指令總條數為m。由于每條指令處在不同的執(zhí)行階段,因此,如果分級分得好,每一級都沒有時間上的浪費,這就是最理想的情況。流水線處理器在理想情況下與非流水線處理器的性能加速比為: 式中,I為一個程序被執(zhí)行的總的指令條數,它在流水線處理器和非流水線處理器中是相等的。CPInp是每條指令總體平均所需的時鐘周期數。因為流水線處理器把一條指令的執(zhí)行時間理想地分成了m級,故有m條指令在同時(重疊)執(zhí)行。T是每個時鐘周期的時間長度,本例可假設它在兩種處理器中也是相同的,那么,最后總的加速比為m(即等于流水線的級數)。并不是說把流水線級數分得越多,處理器的性能就越好。流水線處理器性能提高的關鍵在于每個時鐘周期處理器都應當能啟動一條指令的執(zhí)行。 在上述程序段中,I1指令把寄存器r2和r3的內容相加,并將結果存人寄存器r1,這樣,它下面的4條指令均與I1相關,其使用I1的結果如圖1給出的數據相關關系圖。從圖中可見,當每個周期結束時,在時鐘上升沿應把數據打入寄存器。在數據沒被打入之前,任何從該寄存器讀出的數據都是過時的。圖1中的I2到I4的3條指令就屬于這種情況。它們從r1寄存器讀出的數據都是過時的,是不能使用的。I5則沒關系,當它讀r1寄存器時,I1已將結果寫入。 I1下面有3條指令不能從寄存器r1讀出正確的數據。為了減少數據相關指令的條數,設計時可以讓寫寄存器堆的操作提前半個周期,即由時鐘的下降沿打入。實踐證明這樣做是可行的,因為假定一個時鐘周期是10 ns,寄存器堆的訪問只需要5 ns。這樣,數據相關的指令條數就減至兩條,其操作示意圖如圖2所示。 3 數據相關問題的解決 由于一條指令中的兩個源操作數都可能與上一條指令的目的操作數相關,因此,總的數據相關DEPEN由A DFPEN和B_DEPEN兩部分組成。A_DEPEN指的是源寄存器rs1數據相關,B_DE-PEN指的是源寄存器rs2數據相關。另外,兩條指令I2和I3也都可能與I1相關。如果是在流水線ID級檢測數據相關,那么,對于I2來講,I1處在EXE級;對于I3來講,I1處在MEM級,因此,A_DEFPEN包括EXE_A_DEPEN和MEM_B_DEPEN兩部分。EXE_A_DEPEN的意思是處在ID級的指令與處在EXE級的指令數據相關。同理,MEM_A_DEPEN的意思是處在ID級的指令與處在MEM級的指令數據相關。同樣,B_DEPEN也包括EXE_B_DEPEN和MEM_B_DEPEN兩部分。 EXE_A_DEPEN為真的條件是:I2的rs1與I1的rd相等(ID_rs1==EXE_rd),rs1字段是寄存器(ID_rs1IsReg),并且I1的rd確實是目的寄存器(EXE_WREG==1)。后一個條件是為排除store指令而加上的。EXE_B_DEPEN與EXE_A_DEPEN類似,源寄存器號(ID_rs2IsReg)所包含的指令要比ID_rs1IsReg少得多。I3與I1的數據相關判斷與此類似。 (1) 封鎖當前正譯碼的指令的寫控制信號; |