《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 指令擴(kuò)展接口的數(shù)據(jù)沖突消除
指令擴(kuò)展接口的數(shù)據(jù)沖突消除
2014年電子技術(shù)應(yīng)用第7期
徐 巖,郭怡惠,徐金甫
信息工程大學(xué),河南 鄭州450001
摘要: 為了解決通用RISC微處理器進(jìn)行指令擴(kuò)展時(shí)開發(fā)難度大的問題,提出一種在處理器上增加指令擴(kuò)展接口的方法。消除增加指令擴(kuò)展接口以后的數(shù)據(jù)沖突是該方法的關(guān)鍵技術(shù)。如果不能有效解決數(shù)據(jù)沖突,將導(dǎo)致處理器運(yùn)行出錯(cuò)或效率下降。介紹了處理器增加指令擴(kuò)展接口以后的結(jié)構(gòu),把處理器通用指令和擴(kuò)展指令按運(yùn)算結(jié)果產(chǎn)生時(shí)刻分為兩種類型,分析執(zhí)行不同類型指令發(fā)生數(shù)據(jù)沖突的情況,最后設(shè)計(jì)完成數(shù)據(jù)定向通道。編寫程序測(cè)試處理器指令擴(kuò)展和處理數(shù)據(jù)沖突的功能。測(cè)試結(jié)果表明,處理器增加指令擴(kuò)展接口以后能夠?qū)崿F(xiàn)指令擴(kuò)展并且能夠有效處理數(shù)據(jù)沖突。
中圖分類號(hào): TP334.7
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2014)07-0009-04
Data hazards elimination of instruction extension interface
Xu Yan,Guo Yihui,Xu Jinfu
Information Engineering University,Zhengzhou 450004,China
Abstract: In order to solve the problem that it is difficult to extend instructions when developing generic RISC microprocessor, a method of adding instruction extension interface to microprocessor was proposed. The key technology was to eliminate the data hazard when instruction extension interface was added. The processor would run an error or fall efficiency if the data hazard could not be resolved effectively. The structure added instruction extension interface to the microprocessor was introduced. Two types of generic and extended instructions of microprocessor were divided depending on the time the computing results produced. The condition was analyzed about how the data hazard occur when the different types of instruction were execute, and data direction channel was designed in the end. The verification program was written to test the function of the extension of processor instruction and data hazard. The results show that the instruction extension is realized and data hazard is resolved when instruction extension interface is added to the processor.
Key words : RISC;microprocessor;instruction extension;interface;data hazard

         RISC(精簡(jiǎn)指令集處理器)處理器完成一個(gè)指令集包含的操作只需要一條指令,而要完成一個(gè)指令集不包含的操作則需要幾條甚至幾十條基本操作指令,大大降低了處理效率[1]。針對(duì)這一問題,本文提出一種在通用RISC微處理器中增加指令擴(kuò)展接口的方法。用戶可以根據(jù)自己的需要,在擴(kuò)展接口掛接自己設(shè)計(jì)的擴(kuò)展模塊,即可簡(jiǎn)單、靈活地進(jìn)行指令擴(kuò)展。如何消除數(shù)據(jù)沖突是設(shè)計(jì)指令擴(kuò)展接口的關(guān)鍵技術(shù)。

        在編寫程序時(shí)通過(guò)人為調(diào)整指令順序可以消除數(shù)據(jù)沖突,這種方法不需要更改硬件電路,但是容易發(fā)生錯(cuò)誤,而且對(duì)于無(wú)法通過(guò)調(diào)整順序消除的沖突需要插入空指令,降低了執(zhí)行效率。另外一種簡(jiǎn)單的方法就是設(shè)置流水線互鎖部件,如果檢測(cè)到兩條指令之間存在沖突,則使流水線停頓,直到?jīng)_突消除,這種方法同樣會(huì)導(dǎo)致執(zhí)行效率的降低。

        本文將處理器通用指令和擴(kuò)展指令按照運(yùn)算結(jié)果產(chǎn)生時(shí)刻分為兩種類型,通過(guò)分析不同類型指令發(fā)生數(shù)據(jù)沖突的情況,設(shè)計(jì)數(shù)據(jù)定向通道來(lái)消除數(shù)據(jù)沖突。通過(guò)設(shè)計(jì)數(shù)據(jù)定向通道可以保證程序執(zhí)行的正確性和執(zhí)行效率。

1 指令擴(kuò)展接口結(jié)構(gòu)

        指令擴(kuò)展接口在RISC處理器的基礎(chǔ)上設(shè)計(jì),本文選用的 RISC處理器以MIPS指令集為標(biāo)準(zhǔn),采用哈佛結(jié)構(gòu)程序空間與數(shù)據(jù)空間相互獨(dú)立,設(shè)立5級(jí)流水線[2]。5級(jí)流水線包括:

        (1)指令獲取(Instruction Fetch,IF);

        (2)指令譯碼(Instruction Decode,ID);

        (3)指令執(zhí)行(Instruction Execute,EX);

        (4)內(nèi)存讀寫(Memory Access,MEM);

        (5)寄存器回寫(Write Back,WB)。

        整個(gè)微處理器系統(tǒng)[3]劃分為兩部分:一部分是數(shù)據(jù)單元,另一部分是控制單元。在每條指令執(zhí)行的過(guò)程中,控制單元控制數(shù)據(jù)通路正確無(wú)誤地執(zhí)行每條指令,完成數(shù)據(jù)的各種運(yùn)算,實(shí)現(xiàn)處理器的各項(xiàng)功能。

        設(shè)計(jì)完成的指令擴(kuò)展接口支持兩種類型的擴(kuò)展指令:一種為A型簡(jiǎn)單指令,該指令用于實(shí)現(xiàn)簡(jiǎn)單的邏輯運(yùn)算;另一種為B型復(fù)雜指令,該指令用于實(shí)現(xiàn)一些復(fù)雜的操作。用戶在進(jìn)行指令擴(kuò)展時(shí),根據(jù)運(yùn)算的復(fù)雜度選擇相應(yīng)的指令類型,可以降低難度,提高效率。

        對(duì)于A型指令,由于只是實(shí)現(xiàn)簡(jiǎn)單的邏輯運(yùn)算,可以通過(guò)擴(kuò)展流水線執(zhí)行級(jí)的ALU(邏輯運(yùn)算單元)實(shí)現(xiàn),是單個(gè)時(shí)鐘周期內(nèi)組合邏輯電路。這種擴(kuò)展方法與Nios II的定制指令相似[4-5]

        對(duì)于B型指令,外圍擴(kuò)展模塊要占用EX和MEM兩個(gè)流水級(jí)[6],這是因?yàn)椋?1)擴(kuò)展指令不能對(duì)處理器數(shù)據(jù)存儲(chǔ)區(qū)進(jìn)行訪問,所以處理器執(zhí)行擴(kuò)展指令時(shí)系統(tǒng)EX和MEM級(jí)處于空閑狀態(tài);(2)如果用戶設(shè)計(jì)的邏輯運(yùn)算單元關(guān)鍵路徑太長(zhǎng),延時(shí)大于時(shí)鐘周期,就需要在運(yùn)算單元中間插入一級(jí)寄存器;(3)用戶可能需要自建存儲(chǔ)區(qū)域,需要兩個(gè)時(shí)鐘周期才能完成存取操作?;谝陨?點(diǎn)原因,使擴(kuò)展模塊占用兩個(gè)流水級(jí)能夠給外部擴(kuò)展模塊預(yù)留足夠的設(shè)計(jì)空間,更好地滿足設(shè)計(jì)需求。B型指令擴(kuò)展結(jié)構(gòu)在處理器與外部擴(kuò)展模塊之間增加了一個(gè)接口單元。接口單元的作用是隔離系統(tǒng)的控制通路,使擴(kuò)展接口只保留數(shù)據(jù)信號(hào)[7]。

2 數(shù)據(jù)沖突分析

        數(shù)據(jù)沖突是指令在流水線中重疊執(zhí)行時(shí)因需要用到前面指令的執(zhí)行結(jié)果而發(fā)生的沖突。流水線沖突除了數(shù)據(jù)沖突還有結(jié)構(gòu)沖突和控制沖突。由于加入指令擴(kuò)展接口以后,只對(duì)處理器的數(shù)據(jù)沖突產(chǎn)生重大影響,所以本文對(duì)如何消除結(jié)構(gòu)沖突和控制沖突就不再介紹,只介紹處理器的數(shù)據(jù)沖突以及如何將其消除。

        為了能夠更加清楚地說(shuō)明增加指令擴(kuò)展接口以后流水線數(shù)據(jù)沖突的情況,本文用數(shù)據(jù)路徑的快照形式反映流水線的執(zhí)行過(guò)程。在時(shí)空?qǐng)D中數(shù)據(jù)路徑的快照示例如圖1所示。

        在圖1中,將處理器的指令(包括通用指令和兩種類型擴(kuò)展指令)按照運(yùn)算結(jié)果產(chǎn)生時(shí)刻分為兩類:(1)在流水線第三級(jí)(執(zhí)行級(jí))產(chǎn)生結(jié)果,這種指令包括處理器自身的數(shù)據(jù)操作指令和A型擴(kuò)展指令,用圖1中(a)表示;(2)在流水線第四級(jí)(內(nèi)存讀寫級(jí))產(chǎn)生結(jié)果,這種指令包含處理器load指令和B型擴(kuò)展指令,用圖1中(b)表示。在圖2所示的時(shí)空?qǐng)D中將采用上面兩種數(shù)據(jù)路徑快照表示相應(yīng)指令的執(zhí)行過(guò)程。

        將指令分為(a)、(b)兩種類型以后,相鄰兩條指令存在數(shù)據(jù)沖突的情況就可以歸結(jié)為以下四種情況。

        在圖2中,箭頭代表數(shù)據(jù)需要傳輸?shù)穆窂?,箭頭起點(diǎn)為第一條指令數(shù)據(jù)最早產(chǎn)生的位置,箭頭終點(diǎn)為第二條指令最遲需要數(shù)據(jù)的位置。從圖2可以看出,(1)、(2)兩種情況下數(shù)據(jù)產(chǎn)生的時(shí)刻比數(shù)據(jù)需要的時(shí)刻早,對(duì)于這種情況采取措施將前一條指令的運(yùn)算結(jié)果通過(guò)專用通道提前送給當(dāng)前指令需要數(shù)據(jù)的位置,流水線可以順序執(zhí)行。而對(duì)于(3)、(4)兩種情況,前一條指令結(jié)果產(chǎn)生的時(shí)刻比后一條指令需要數(shù)據(jù)的時(shí)刻晚,所以無(wú)論采取什么措施,都無(wú)法得到前一條指令的運(yùn)算結(jié)果,對(duì)于這種情況,流水線必須暫停一個(gè)時(shí)鐘周期,等前一條指令運(yùn)算完成以后數(shù)據(jù)通過(guò)定向通道送給第二條指令,流水線才能繼續(xù)執(zhí)行。

        上面分析的是簡(jiǎn)單數(shù)據(jù)沖突,第二條指令只與前面一條指令發(fā)生數(shù)據(jù)沖突。還有一種更復(fù)雜的情況是后面一條指令與前面兩條指令都發(fā)生數(shù)據(jù)沖突。為了能夠更形象地體現(xiàn)這種情況,將圖1中(a)型指令的數(shù)據(jù)路徑快照稍微修改,即為如圖3所示的復(fù)雜情況的數(shù)據(jù)沖突。

        在圖3中,第三條指令中執(zhí)行級(jí)的源操作數(shù)a是第一條指令的目的操作數(shù),源操作數(shù)b是第二條指令的目的操作數(shù)。此時(shí)源操作數(shù)a通過(guò)定向通道已經(jīng)準(zhǔn)備好了,而源操作數(shù)b還沒有運(yùn)算完成,所以執(zhí)行第三條指令時(shí)需插入一個(gè)氣泡。流水線停頓一個(gè)時(shí)鐘周期以后,第二條指令的運(yùn)算結(jié)果可以通過(guò)定向通道送給第三條指令的執(zhí)行級(jí)。但是此時(shí)第一條指令的運(yùn)算結(jié)果已經(jīng)回寫到數(shù)據(jù)寄存器,通過(guò)定向通道送過(guò)來(lái)的數(shù)據(jù)已經(jīng)不是第三條指令所需的數(shù)據(jù),這樣就導(dǎo)致運(yùn)算結(jié)果出錯(cuò)。

        對(duì)于這種情況,需要對(duì)第一條指令定向過(guò)來(lái)的數(shù)據(jù)寄存一級(jí),流水線停頓一個(gè)時(shí)鐘周期以后源操作數(shù)a使用寄存以后的數(shù)據(jù),源操作數(shù)b使用定向通道送來(lái)的數(shù)據(jù)。

3 數(shù)據(jù)定向通道設(shè)計(jì)

        數(shù)據(jù)定向通道就是將EX級(jí)和MEM級(jí)操作完成以后的數(shù)據(jù)和目的寄存器的地址直接送到EX級(jí)輸入端?;厮湍康募拇嫫鞯刂酚糜跈z測(cè)數(shù)據(jù)沖突,沖突檢測(cè)部件的工作過(guò)程:(1)比較當(dāng)前指令源操作數(shù)寄存器的地址與回送的目的寄存器地址是否相同;(2)檢測(cè)前面指令運(yùn)算結(jié)果是否有效;(3)檢測(cè)當(dāng)前指令源地址是否有效;(4)條件全部滿足以后,發(fā)出流水線沖突信號(hào)。

        控制單元檢測(cè)沖突類型,如果流水線不需要停頓,則控制EX級(jí)內(nèi)部的數(shù)據(jù)選擇器選擇定向通道的數(shù)據(jù);如果需要停頓,則控制流水線停頓。

        對(duì)于B型擴(kuò)展指令,如果在接口單元內(nèi)部再設(shè)計(jì)一套沖突檢測(cè)部件和數(shù)據(jù)定向通道,則會(huì)造成資源浪費(fèi)。在執(zhí)行B型擴(kuò)展指令時(shí),處理器EX級(jí)和MEM級(jí)處于空閑狀態(tài),因此可以利用EX級(jí)中的部分資源。最后設(shè)計(jì)數(shù)據(jù)定向通道后處理器的局部數(shù)據(jù)路徑如圖4所示。

        在圖4中只顯示與數(shù)據(jù)流動(dòng)有關(guān)的部件。圖中接口單元和EX級(jí)使用相同的數(shù)據(jù)定向通道[8],數(shù)據(jù)沖突檢測(cè)部件也使用同一個(gè)。接口單元在執(zhí)行B型擴(kuò)展指令且沒有發(fā)生數(shù)據(jù)沖突時(shí),接口單元控制信號(hào)才有效,接口單元通過(guò)指令擴(kuò)展接口向外傳遞有效數(shù)據(jù),而且只有在控制信號(hào)有效時(shí),接口單元接收到的數(shù)據(jù)才送到回寫單元,否則將接收到的數(shù)據(jù)丟棄。雖然控制單元不能直接控制外部擴(kuò)展模塊,但是通過(guò)控制接口單元導(dǎo)通、關(guān)斷數(shù)據(jù)的方式,可使外部擴(kuò)展模塊準(zhǔn)確地工作在流水線中。圖4中右上角“Reg”寄存器的作用是對(duì)MEM級(jí)定向的數(shù)據(jù)寄存一級(jí),用于解決3條指令存在數(shù)據(jù)沖突的問題。

4 功能測(cè)試 

        最后在RISC微處理器基礎(chǔ)上設(shè)計(jì)完成指令擴(kuò)展接口,預(yù)留的A型和B型擴(kuò)展指令各有200條,對(duì)增加了指令擴(kuò)展接口的處理器進(jìn)行數(shù)據(jù)沖突測(cè)試。擴(kuò)展一條A型指令,指令格式:AR3 Rd,Rt;指令功能:將Rt寄存器的值按位取反,結(jié)果賦給Rd寄存器。擴(kuò)展一條B型指令,指令格式:BR1 Rd,Rs,Rt;指令功能:Rs寄存器的值和Rt寄存器的值按位同或,結(jié)果賦給Rd寄存器。編寫一段針對(duì)性強(qiáng)的程序,用于測(cè)試增加指令擴(kuò)展接口以后處理器處理數(shù)據(jù)沖突的能力。測(cè)試程序如圖5所示,圖6為測(cè)試結(jié)果。

        圖5中的4條測(cè)試程序包含了可能的數(shù)據(jù)沖突的情況。圖6為使用EDA(Electronic Design Automation)軟件仿真得到的波形圖。從圖中可以看出,除了第三條指令,其他指令數(shù)據(jù)沖突都通過(guò)數(shù)據(jù)定向解決,流水線沒有停頓;第三條指令和前兩條指令產(chǎn)生沖突,流水線停頓一個(gè)時(shí)鐘周期以后得到正確的運(yùn)算結(jié)果。

        如果使用指令調(diào)度解決數(shù)據(jù)沖突,同樣是執(zhí)行圖5中的程序,則需要編譯軟件或者人為地在存在數(shù)據(jù)沖突的指令之間插入空指令,最后處理器實(shí)際執(zhí)行的指令如下:

        AR3 R4,R1;

        NOP;NOP;NOP;

        BR1 R5,R2,R4;

        NOP;NOP;NOP;

        ADDU R6,R5,R4;

        NOP;NOP;NOP;

        OR R7,R6,R1;

        使用流水線停頓解決數(shù)據(jù)沖突,處理器最后執(zhí)行效果與上面結(jié)果相同,只是使用指令調(diào)度處理器通過(guò)執(zhí)行空指令等待前面程序運(yùn)行完成,而流水線停頓是通過(guò)內(nèi)部設(shè)置的流水線互鎖部件使流水線停頓等待前面程序運(yùn)行完成。上面兩種方法使用軟件仿真得到測(cè)試結(jié)果如圖7所示。

        從圖6、圖7中可以看出,執(zhí)行相同的程序,圖6使用的時(shí)鐘數(shù)明顯比圖7中使用的時(shí)鐘數(shù)多。為了能夠更直觀地對(duì)比處理器的執(zhí)行效率,引入每條指令的平均時(shí)鐘周期數(shù)CPI(Cycles Per Instruction)。通過(guò)簡(jiǎn)單計(jì)算可知,執(zhí)行上面的測(cè)試程序時(shí)本文方法的CPI=5/4=1.25,而使用軟件調(diào)度或者流水線停頓方法的CPI=13/4=3.25。可見,使用數(shù)據(jù)定向通道可以提高處理器的執(zhí)行效率。

        在進(jìn)行SoC設(shè)計(jì)時(shí),使用具有指令擴(kuò)展接口的處理器,只需要設(shè)計(jì)擴(kuò)展模塊就可以完成指令擴(kuò)展,實(shí)現(xiàn)復(fù)雜操作,而且不會(huì)對(duì)處理器自身產(chǎn)生任何影響,在保證系統(tǒng)穩(wěn)定性的前提下,增加了系統(tǒng)的運(yùn)算能力。如果本文的設(shè)計(jì)方法能夠廣泛應(yīng)用到微處理器的設(shè)計(jì)中,則具有指令擴(kuò)展接口的RISC 微處理器將會(huì)極大地促進(jìn)SoC設(shè)計(jì)的進(jìn)步。

參考文獻(xiàn)

[1] 夏軍.32位RISC微處理器設(shè)計(jì)研究[D].武漢:華中科技大學(xué),2004.

[2] 張晨曦,王志英.計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)[M].北京:高等教育出版社,2011.

[3] 鄭緯民.計(jì)算機(jī)組成和設(shè)計(jì)[M].北京:清華大學(xué)出版社,2003.

[4] 李蘭英.Nios II嵌入式軟核SoPC設(shè)計(jì)原理及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2009.

[5] 屈文新,樊曉椏.一種高代碼密度RISC結(jié)構(gòu)微控器的設(shè)計(jì)[J].小型微型計(jì)算機(jī)系統(tǒng),2006,27(7):1242-1244.

[6] 劉元鋒.RISC架構(gòu)微處理器擴(kuò)展對(duì)稱密碼處理指令的研究[D].鄭州:解放軍信息工程大學(xué),2006.

[7] 張琰,戴紫彬.RISC結(jié)構(gòu)微處理器專用存儲(chǔ)單元的研究與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2008,34(7):140-146.

[8] 李秀娟,王祖強(qiáng),張?zhí)?一種8位嵌入式RISC MCU IP核數(shù)據(jù)通道模型設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2006,32(4):105-106.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。