<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 獨立于硬件技術(shù)的XC166單片機的DSP程序優(yōu)化方法

獨立于硬件技術(shù)的XC166單片機的DSP程序優(yōu)化方法

作者: 時(shí)間:2012-02-13 來(lái)源:網(wǎng)絡(luò ) 收藏

  

本文引用地址:http://dyxdggzs.com/article/172110.htm

  1.4 指令流水線(xiàn)重排

  指令流水線(xiàn)重排的意思是通過(guò)軟件中的指令重排來(lái)改變指令流水線(xiàn),以此來(lái)排除由于硬件引起的指令堵塞,從而加快的運行時(shí)間。這種操作通常用在匯編中,指令流水線(xiàn)重排是一個(gè)一般的原理,把這個(gè)原理用于不同類(lèi)型的可以導出不同的與硬件相關(guān)的。下面介紹的基于的優(yōu)化主要是應用這個(gè)優(yōu)化原理得到的。

  2 與芯片相關(guān)的優(yōu)化技術(shù)

  2.1 指令流水線(xiàn)

  單片機指令流水線(xiàn)共有7級,前兩級為取指令流水線(xiàn),后5級為執行流水線(xiàn),所有指令都必須經(jīng)過(guò)5級執行流水線(xiàn)的每一級。

  第1級--指令預取。這一級根據預測順序,把指令從程序管理單元(PMU)取出,取出的指令在跳轉檢測單元進(jìn)行前期處理,以檢測是否有跳轉,預測邏輯決定是否接收轉移。

  第2級--取指令。根據轉移預測規則計算出下一條被取指令的指針。對于零機器周期轉移,轉移合并單元先預處理,并將檢測到的轉移與正在執行的指令結合起來(lái)。預取出的指令存在FIFO緩存器中,同時(shí),下一條要執行的指令輸出FIFO緩存器,進(jìn)入執行流水線(xiàn)。

  第3級--譯碼。指令被譯碼,如需要,在間接尋址模式中,寄存器文件將被訪(fǎng)問(wèn),以讀取通用寄存器GPR。

  第4級--尋址。計算所有操作數地址,對于所有隱含訪(fǎng)問(wèn)系統堆棧的指令,堆棧指針遞減或增加。

  第5級--存儲。所有需要的操作數被取出。

  第6級--執行。使用已取出的操作數進(jìn)行MAC單元操作。對于非MAC單元指令,在這一級中,指令將由算術(shù)邏輯單元(ALU)執行。條件標志被更新,執行所有直接對CPU特殊功能寄存器CPU_SFRs進(jìn)行寫(xiě)操作的指令,在間接尋址時(shí),作為地址指針的GPRs自動(dòng)遞減或增加。

  第7級--寫(xiě)回。所有外部操作數以及剩余的,在內部DPRAM空間內的操作器被寫(xiě)回。定位在內部SRAM中的操作數進(jìn)入寫(xiě)回緩沖區。

  下面給出一個(gè)具體例子:

  

  

  上面程序的指令流水線(xiàn)如表1所列,(Tn表示機器周期)

  2.2 數據相關(guān)性排除

  在XC166的CPU中,由于指令流水線(xiàn)的設計要求,在使用通用寄存器(GPRs)的指令之間存在一些數據相互依賴(lài)的情況,盡管XC166單片機已經(jīng)使用了專(zhuān)用硬件來(lái)檢測及解決數據相關(guān)性,但仍然有一些不可避免的數據相關(guān)性。在編程時(shí),可以充分利用數據相關(guān)性來(lái)達到程序優(yōu)化的目的,比如,在用GPR作為間接尋址指針時(shí),如果PGR中的地址值被改變,間接尋址操作必須等待2個(gè)機器指令周期后,才能使用GPR作為地址指針尋址。在這種情況下,可以在這2個(gè)等待機器周期內插入2條其他單機器周期指令,充分利用這2個(gè)周期的等待時(shí)間以便程序更優(yōu)化。

  下面舉一個(gè)例子:

  

  另外一種數據相關(guān)性發(fā)生在間接尋址訪(fǎng)問(wèn)內存時(shí),XC166單片機中的地址產(chǎn)生單元使用推測原理,在地址譯碼前,數據的讀取路經(jīng)將根據歷史記錄表中選出;在歷史記錄表中,每個(gè)GPR都有一個(gè)入口。這些入口記錄了用相應GPR所訪(fǎng)問(wèn)的內存空間情況。如果這種預測發(fā)生錯誤,讀取操作必須重新開(kāi)始。

  因此,如果用GPR作為間接尋址,GPR最好能指向相同內存空間。如果更新后的GPR指向不同內存空間,下一個(gè)操作將出現訪(fǎng)問(wèn)錯誤,讀操作必須重復,這就產(chǎn)生了指令流水線(xiàn)堵塞。例如:

  



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>