|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
關于cpu 流水線 |
| 作者:telnet 欄目:MCU技術(shù) |
ST Arm9 是否具有bypass功能? 比如下指令在擁有此功能的時候不會出現(xiàn)stall ADD R2, R3, R1 DEC R4 , R2, R5 ADD R5 , R4 ,R2 跳轉(zhuǎn)延遲又是多少?是否有delay slot? |
| 2樓: | >>參與討論 |
| 作者: centimetre 于 2006/8/14 14:34:00 發(fā)布:
沒有跳轉(zhuǎn)延遲 |
|
| 3樓: | >>參與討論 |
| 作者: telnet 于 2006/8/14 14:35:00 發(fā)布:
條件跳轉(zhuǎn)下,不可能沒有延遲。 |
|
| 4樓: | >>參與討論 |
| 作者: telnet 于 2006/8/14 14:39:00 發(fā)布:
繼續(xù)補充幾句 條件跳轉(zhuǎn)下,不可能沒有延遲,除非它具有branch taget buffer, 但是即使如此,也只是減少延遲的可能性,況且這種功能不會再arm9這樣的產(chǎn)品中存在的。 |
|
| 5樓: | >>參與討論 |
| 作者: 浪淘沙 于 2006/8/14 16:00:00 發(fā)布:
顯然telnet是個高手,對高手先透露點內(nèi)幕消息,菜鳥免進 “除非它具有branch taget buffer,....,況且這種功能不會在arm9這樣的產(chǎn)品中存在的”,您說對了一半,在STR9中我們集成了這種功能,我們稱它為Branch Queue,明天的在線研討會上我們將談到這個問題,樓上的高手既然提出來了,我就先透露點內(nèi)部的東東,請看下圖:
|
|
| 6樓: | >>參與討論 |
| 作者: telnet 于 2006/8/14 16:33:00 發(fā)布:
謝謝您的幫助 但是,我接下來的問題是,為了保證特定代碼的速度,是否能夠手工的對這片buffer進行倒入導出的操作?如果預測發(fā)生不準,我是否可以利用延遲槽(delay slot) 還有,能否告訴我arm9 是否有bypass的功能,這對我們很重要. 謝謝! |
|
| 7樓: | >>參與討論 |
| 作者: 浪淘沙 于 2006/8/14 17:08:00 發(fā)布:
程序員不能對STR9的Branch Queue進行操作 telnet不用這么客氣嘛,在下非常愿意與您探討。 STR9的Branch Queue是集成在內(nèi)部,程序員只能啟動或關閉它,不能做其他操作,包括你說的“倒入導出的操作”。 “如果預測發(fā)生不準,我是否可以利用延遲槽(delay slot)”,首先不知你所說的延遲槽是否指“重新充填Pre-Fetch Queue的時間”?通常在預測發(fā)生不準的情況下指令的執(zhí)行是停止了,因為指令的預取隊列需要時間被重新充填,只有那些需要多個CPU周期的指令才有可能利用這段時間,如LDM、STM指令。 如果你想利用這段時間,不知想如何利用?我所看到的有兩種方式,一是在跳轉(zhuǎn)指令前使用LDM或STM指令,二是在跳轉(zhuǎn)指令前啟動DMA控制器,DMA操作剛好可以利用這個間隙;除此之外,我還沒有想出來,你知道還有什么技術(shù)嗎? 補充一點,Branch Queue的深度顯然是越大越好,但深度越大成本也越高,我們對Branch Queue的深度作了多方面的模擬,得出了一個合適的深度,既保證了多數(shù)情況下較高的效率,也有效地控制了成本。 另外,我不明白你說的bypass功能是指什么?請指教。 |
|
| 8樓: | >>參與討論 |
| 作者: telnet 于 2006/8/14 19:49:00 發(fā)布:
bypass 就是中文翻譯的旁路。 謝謝! 延遲槽(delay slot)就是指當我們預測錯誤的時候,我們在更新buffer queue的同時,使取進來的指令繼續(xù)運行,而不是放棄,當然這條指令應該是可做,可不做的(比如對參數(shù)的付值運算,或者用來對隨機數(shù)進行更新,因為很難有真正的隨機數(shù))。 bypass就是如下面的兩條指令: ADD R2, R3, R1 DEC R4 , R2, R5 在經(jīng)典的5級流水線中,我們必須等到WB 的同時進行ID操作但是由于有了bypass,我們可以在前條指令EXE之后,結(jié)果數(shù)據(jù)會立刻送到下面任何需要作為操作數(shù)的指令的每個階段鎖存器中 ,所以上面的指令之間沒有延遲。 如上面的第一條指令結(jié)束后會直接將EXE 執(zhí)行的結(jié)果傳遞到ID/EXE鎖存器中 中,而不需要再傳到MEM=>WB。 我想如果ARM9 具有了BRANCH TARGET BUFFER ,這個功能應該一定有了,但是因為這對我們很重要,所以我想得到確定的答復。 謝謝。 |
|
| 9樓: | >>參與討論 |
| 作者: telnet 于 2006/8/14 20:04:00 發(fā)布:
對delay slot 的補充 delay slot,我最早是看到mips上使用的,他們沒有Branch target buffer, 所以在條件跳轉(zhuǎn)下一定會有一個時鐘的延遲(ID 結(jié)束才知道結(jié)果),它允許后面的指令在延遲的時間內(nèi)執(zhí)行,來補充這個缺陷。 對于arm9不知道是否會用類似的方法,我個人傾向于這樣做,有時候簡單流暢,會使性能更加提高,設計趨向簡單。 |
|
| 10樓: | >>參與討論 |
| 作者: twentyone 于 2006/8/14 21:54:00 發(fā)布:
RE 個人看法:你們的討論里也提到了,如果有跳轉(zhuǎn)的話,不管采用什么技術(shù),肯定會引入延遲的。一跳轉(zhuǎn),流水線就有可能會被打斷。用Cache或者是Branch Queue,都只是用來降低概率的輔助方法。 另外,TELNET能否介紹一下,你是做什么的?感覺你對CPU構(gòu)架很熟悉。:-) |
|
| 11樓: | >>參與討論 |
| 作者: 浪淘沙 于 2006/8/14 22:21:00 發(fā)布:
看來我是碰到真正的高手啦 首先我要聲明,對你的問題我目前還沒有一個準確地答復,我要查一下資料,同時請教一下專家;但我可以說的是,除了上述Pre-Fetch Queue和Branch Cache,在ARM966E的基礎上ST沒有其他的擴充了,也就是說,你的問題屬于ARM966結(jié)構(gòu)的范疇,我需要詳細地研究了ARM的文檔才能有準確地答復。 你所說的Delay slot功能,我記得在SUN的Sparc中也有,這個功能需要編譯器的配合或在匯編程序中有意識地使用。根據(jù)我的理解,ARM的核心中不具備這樣的功能,因為我至今沒有找到相應的資料證明這點;我想如果要有,ARM應把它當成一個要點來強調(diào)的,可惜沒見到。 我在寫這個帖子是,正在看ARM的文檔,剛好找到對Bypass功能的說明,在ARM的文檔里稱為“Result forwarding”,請看這個文檔的4.2節(jié)。 Comparison between the ARM7 and ARM9 以上見解供你參考,我將在請教了ARM的工程師后再給你肯定的答復,也請知道上述問題答案的網(wǎng)友幫忙。 閣下為什么要了解這個問題,莫非是要做ARM9的仿真器?應該不會是想用匯編寫程序吧?請賜教,謝謝! |
|
| 12樓: | >>參與討論 |
| 作者: telnet 于 2006/8/15 10:52:00 發(fā)布:
謝謝您的幫助 我的問題基本上沒有了。 To 浪淘沙, twentyone 很高興能認識各位,長知識了! 本人僅僅是個敲代碼的,過去對linux內(nèi)核和網(wǎng)絡協(xié)議有點了解,目前因為項目需要,現(xiàn)在要寫一個簡單的編譯器,對arm系列沒有詳細地知識,所以想知道些具體的問題,來加速我們的項目。 我也認識Johnson CAO :) |
|
| 13樓: | >>參與討論 |
| 作者: gyt 于 2006/8/17 10:55:00 發(fā)布:
確實高手 原來是做編譯器的,怪不得這么厲害:) |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |