|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
一個關(guān)于MAM的萊鳥問題 |
| 作者:zy315 欄目:ARM技術(shù) |
LPC213x系列ARM的MAMTIM寄存器那個CCLK數(shù)目設(shè)置是越大加速越快還是越小加速越快?設(shè)成7快還是設(shè)成1快?為什么20MHZ以下設(shè)成1,20-40MHZ設(shè)成2,40MHZ以上設(shè)成3?這么設(shè)定有什么科學(xué)根據(jù)嗎? |
| 2樓: | >>參與討論 |
| 作者: zy315 于 2005/12/13 10:03:00 發(fā)布:
怎么沒人回答? 怎么沒人回答?昨天晚上我5點發(fā)的帖子,到晚上也沒人回答以為是ZLG公司下班了,但是今天上午已經(jīng)開始看見ZLGARM給別人解答問題了,于是自己給自己頂一下,盼能給RE一下~~ |
|
| 3樓: | >>參與討論 |
| 作者: zlgarm 于 2005/12/13 11:27:00 發(fā)布:
re 存儲器加速模塊的作用是匹配CPU和FLASH存儲器訪問速度,使CPU的效率更高,并不是說MAMTIM設(shè)置的值越大就越快。 至于模板中加速模塊的設(shè)置,是按照PHILIPS的推薦值。 * - 本貼最后修改時間:2005-12-13 13:52:13 修改者:zlgarm |
|
| 4樓: | >>參與討論 |
| 作者: zy315 于 2005/12/14 11:51:00 發(fā)布:
收到,多謝~ |
|
| 5樓: | >>參與討論 |
| 作者: zy315 于 2006/1/6 9:12:00 發(fā)布:
今天讀書發(fā)現(xiàn)問題,重新定起半個月前的帖子 今天讀《深入淺出ARM7》上冊,第410頁上數(shù)第10行寫到:“在同一cclk下,MAMTIM的值越大,速度越快(有效值有限度)”。 而上面三樓的zlgarm提到:“并不是說MAMTIM設(shè)置的值越大就越快!币簿褪钦f其技術(shù)支持人員的解答和寫書的人解答的有矛盾,請問是怎么回事?我該聽哪位的? |
|
| 6樓: | >>參與討論 |
| 作者: zlgarm 于 2006/1/6 10:29:00 發(fā)布:
re 請注意(有效值有限度)這個描述,意思是在同一cclk下,逐漸增大MAMTIM的值會使FLASH的訪問速度加快,當(dāng)超過這個限定值后MAMTIM的值越大,反而FLASH的訪問速度會變慢。 * - 本貼最后修改時間:2006-1-6 10:32:22 修改者:zlgarm |
|
| 7樓: | >>參與討論 |
| 作者: qwernet 于 2006/1/6 11:47:00 發(fā)布:
zlgarm的解釋不對吧? MAMTIM存放的是FLASH的訪問時鐘數(shù),應(yīng)該是越大越慢!1是最快的,單周期訪問。但是由于FLASH的訪問周期需要在50ns以上,所以,當(dāng)主頻大于20MHZ時,如果仍然把MAMTIM設(shè)1的話,那么FLASH的訪問周期將小于50ns,可能導(dǎo)致數(shù)據(jù)讀取出錯,因此,需要把MAMTIM設(shè)為2,以符合FLASH訪問周期的要求。同理,40MHZ以上要設(shè)成3。 不過,如果打開了MAM加速功能,由于FLASH每次讀取的4條指令A(yù)RM至少需要用4個周期才能執(zhí)行完(ARM模式下),所以在緩存命中的條件下,MAMTIM無論是設(shè)1、2還是3,對運行速度沒有影響。但是假如沒有命中需要啟動FLASH取指的話,那就需要額外花多MAMTIM個周期數(shù)。 |
|
| 8樓: | >>參與討論 |
| 作者: zy315 于 2006/1/7 9:27:00 發(fā)布:
謝過 qwernet解釋的有道理,MAMTIM越大應(yīng)該是越慢!這個我在一個月前讀到《深入淺出ARM7》上冊的P100的時候就是這么認為的!P100有個表格,里面列出數(shù)字后面的解釋表明MAMTIM的值就是MAM取值占用多少個處理器時鐘,按照常理,當(dāng)然是時鐘數(shù)越多就越慢了。!但該頁上數(shù)第3行說:“單個時鐘的FLASH訪問實際上關(guān)閉了MAM!薄AM是加速模塊,關(guān)閉了MAM就意味著不加速了,也就是單個周期反倒不加速,時鐘越多反倒加速越快,只能這么理解!然而這種理解和表格的說明恰恰相反!有些矛盾!于是當(dāng)時我就發(fā)了這個帖子問了一問。 然而昨天上午我讀到本書410頁的時候發(fā)現(xiàn)寫到:“可見,在同一cclk下,MAMTIM的值越大,速度越快(有效值有限度)!痹俅萎a(chǎn)生疑惑,于是重新頂起本貼。按照410頁實驗1,將MAMTIM設(shè)為7就比設(shè)為2快了!怎么使用時鐘數(shù)越多反而又快了呢?請qwernet和zlgarm再次做解!而按照P410實驗2的測量結(jié)果的表格(在411頁上面),發(fā)現(xiàn)第二行和第三行和實驗1又有矛盾,第二行的MAMTIM=2,第三行的MAMTIM=3,而第二行680ms,第三行脈沖寬度1.012s,和實驗1結(jié)論又正好相反,這次是MAMTIM越大越慢了!而第二行和第三行的MAMCR都是0,并未啟動加速,應(yīng)該和第一行沒有初始化的時間(2.37s)相同。≡趺碝AM沒有初始化和初始化但不啟用還不是一樣嗎?這些都沒想明白。! |
|
| 9樓: | >>參與討論 |
| 作者: qwernet 于 2006/1/7 11:32:00 發(fā)布:
re “單個時鐘的FLASH訪問實際上關(guān)閉了MAM! 把FLASH設(shè)成了單個周期訪問,加速模塊當(dāng)然沒用了。你仔細想想,一個周期就能取1條指令,流水線不會被打斷,還要加速模塊來干什么呢?只有在流水線經(jīng)常由于取指緩慢而打斷的情況下,加速模塊才能發(fā)揮作用。這并不等于MAMTIM越大,加速越多。它只有加速與不加速之分。 你舉的例子,我沒有書哦,不知道具體情況,不好解釋。 不過你的第二個例子也很好解釋,MAMTIM是FLASH訪問周期數(shù),與開不開啟加速模塊無關(guān)。MAM沒有初始化的時候,MAMTIM默認為7,當(dāng)然最慢了。在沒有開啟加速模塊的時候,執(zhí)行時間基本上與FLASH的訪問周期數(shù)成正比(因為這時候每條指令的實際執(zhí)行時間基本上就是FLASH的訪問周期數(shù)),所以你給出的時間也很正常。 |
|
| 10樓: | >>參與討論 |
| 作者: zy315 于 2006/1/7 14:32:00 發(fā)布:
再問 按照您的說法單個時鐘的FLASH.html">FLASH訪問就是說一個周期就能取1條指令嗎?如果這樣的話7個時鐘的FLASH訪問就是一次性取7條指令嗎?顯然不是!它是128位寬度的,一次取4條ARM指令或者取8條Thumb指令,MAMTIM是說用多長時間來取這4條ARM指令(或8條Thumb指令)。我的理解好像就是:讓一個裁縫去縫100件衣服,衣服肯定是100件,關(guān)鍵時她能用多長時間干完,是用一天還是兩天還是七天的問題。用一天縫完的是最快的裁縫,應(yīng)該是工資最高的!如此看來,“單個時鐘的FLASH.html">FLASH訪問實際上關(guān)閉了MAM!睂嵲谑遣缓美斫! “MAMTIM是FLASH.html">FLASH訪問周期數(shù),與開不開啟加速模塊無關(guān)。”這句話我理解了,411頁的那個表格的實測數(shù)字我也徹底理解了,謝謝! 還有就是他書上410頁有個實驗,是用軟件延時的方式控制LED的閃爍,當(dāng)MAMTIM=2的時候閃的很慢,當(dāng)MAMTIM=7的時候閃的很快。這個客觀事實和我們的理論分析所認知的結(jié)論有差別! |
|
| 11樓: | >>參與討論 |
| 作者: qwernet 于 2006/1/7 19:53:00 發(fā)布:
re 我沒有說過7個時鐘的FLASH訪問就是一次性取7條指令啊。 一次FLASH訪問取多少條指令,只取決于是否開啟MAM加速模塊,開啟了,就是4條(ARM指令),沒開啟,就是1條。 |
|
| 12樓: | >>參與討論 |
| 作者: qwernet 于 2006/1/7 20:11:00 發(fā)布:
re “單個時鐘的FLASH訪問實際上關(guān)閉了MAM”意思是,如果你把FLASH設(shè)為單周期訪問,那么開不開MAM效果都是一樣。仔細想想,為什么要用MAM?因為一般情況下,主頻比FLASH的訪問快得多,如果沒有MAM,每次取指都要N個周期的話,后面的譯碼、執(zhí)行流水線肯定要停下來等待取指的完成,這樣性能大打折扣。用了MAM,每次取指仍要N個周期,但是可以取得4條指令,這樣,只要N<=4,后面的流水線就不會被取指打斷(順序執(zhí)行的情況下),充分發(fā)揮CPU的性能。 如果你把FLASH訪問周期設(shè)為1(當(dāng)然,要求主頻小于20MHZ),那么,本身就具備了單周期取指的能力了,還要MAM來干什么呢? 書上的程序能否發(fā)上來看看?你的主頻是多少? |
|
| 13樓: | >>參與討論 |
| 作者: qwernet 于 2006/1/7 20:37:00 發(fā)布:
reply 補充一句,MAM模塊其實可以看作是一個32字節(jié)的指令緩存(其中16字節(jié)用于順序執(zhí)行,16字節(jié)用于簡單的分支預(yù)測),從FLASH中讀取的指令都放在緩存,ARM核從緩存中取指,FLASH和緩存之間是128位,緩存與CPU之間是32或16位,這樣應(yīng)該好理解一些。 |
|
| 14樓: | >>參與討論 |
| 作者: zy315 于 2006/1/9 9:05:00 發(fā)布:
re 謝謝qwernet的熱心幫助,這回我是徹底明白了。 我系統(tǒng)的晶振是11.0592,主頻是44.2368,外頻是11.0592! 書上的程序如下: #include "config.h" const uint32 LED1 = (1 << 18); // P1.18控制LED1,低電平點亮 void DelayNS (uint32 dly) { uint32 i; for ( ; dly>0; dly--) for (i=0; i<50000; i++); } int main (void) { PINSEL1 = 0x00000000; // 設(shè)置管腳連接GPIO IO1DIR = LED1; // 設(shè)置LED1控制口為輸出 while (1) { IO1SET = LED1; // LED1熄滅 DelayNS(50); IO1CLR = LED1; // LED1點亮 DelayNS(50); } return 0; } 但這只是主程序文件main.c,要改變MAMTIM的值需要改變它的工程模板里的文件target.c,這個文件很長,需要改動的部分如下: /* 設(shè)置存儲器加速模塊 */ /* Set MEMORY accelerater MODULE*/ MAMCR = 0; #if Fcclk < 20000000 MAMTIM = 1; #else #if Fcclk < 40000000 MAMTIM = 2; #else MAMTIM = 3; #endif #endif MAMCR = 2; 您方便留下E_mail嗎?我將把這個程序的整個ADS工程給您發(fā)過去! |
|
| 15樓: | >>參與討論 |
| 作者: qwernet 于 2006/1/10 12:58:00 發(fā)布:
我不用ADS哦 我一般用Keil 你設(shè)置MAMTIM的時候,MAM是開還是關(guān)? |
|
| 16樓: | >>參與討論 |
| 作者: zy315 于 2006/1/10 15:13:00 發(fā)布:
re 我設(shè)置MAMTIM的時候先關(guān)MAM,也就是MAMCR=0;然后設(shè)置MAMTIM,最后全速運行MAM,也即MAMCR=2;上面發(fā)言的程序?qū)懥,就是這段: MAMCR = 0; #if Fcclk < 20000000 MAMTIM = 1; #else #if Fcclk < 40000000 MAMTIM = 2; #else MAMTIM = 3; #endif #endif MAMCR = 2; |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |