音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(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ù)
一個關(guān)于MAM的萊鳥問題
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
怎么沒人回答?
怎么沒人回答?昨天晚上我5點發(fā)的帖子,到晚上也沒人回答以為是ZLG公司下班了,但是今天上午已經(jīng)開始看見ZLGARM給別人解答問題了,于是自己給自己頂一下,盼能給RE一下~~

3樓: >>參與討論
zlgarm
re
存儲器加速模塊的作用是匹配CPU和FLASH存儲器訪問速度,使CPU的效率更高,并不是說MAMTIM設(shè)置的值越大就越快。
至于模板中加速模塊的設(shè)置,是按照PHILIPS的推薦值。


* - 本貼最后修改時間:2005-12-13 13:52:13 修改者:zlgarm

4樓: >>參與討論
zy315
收到,多謝~
 
5樓: >>參與討論
zy315
今天讀書發(fā)現(xiàn)問題,重新定起半個月前的帖子
    今天讀《深入淺出ARM7》上冊,第410頁上數(shù)第10行寫到:“在同一cclk下,MAMTIM的值越大,速度越快(有效值有限度)”。
    而上面三樓的zlgarm提到:“并不是說MAMTIM設(shè)置的值越大就越快!币簿褪钦f其技術(shù)支持人員的解答和寫書的人解答的有矛盾,請問是怎么回事?我該聽哪位的?

6樓: >>參與討論
zlgarm
re
請注意(有效值有限度)這個描述,意思是在同一cclk下,逐漸增大MAMTIM的值會使FLASH的訪問速度加快,當(dāng)超過這個限定值后MAMTIM的值越大,反而FLASH的訪問速度會變慢。


* - 本貼最后修改時間:2006-1-6 10:32:22 修改者:zlgarm

7樓: >>參與討論
qwernet
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
謝過
    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
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
再問
    按照您的說法單個時鐘的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
re
我沒有說過7個時鐘的FLASH訪問就是一次性取7條指令啊。

一次FLASH訪問取多少條指令,只取決于是否開啟MAM加速模塊,開啟了,就是4條(ARM指令),沒開啟,就是1條。

12樓: >>參與討論
qwernet
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
reply
補充一句,MAM模塊其實可以看作是一個32字節(jié)的指令緩存(其中16字節(jié)用于順序執(zhí)行,16字節(jié)用于簡單的分支預(yù)測),從FLASH中讀取的指令都放在緩存,ARM核從緩存中取指,FLASH和緩存之間是128位,緩存與CPU之間是32或16位,這樣應(yīng)該好理解一些。

14樓: >>參與討論
zy315
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
我不用ADS哦
我一般用Keil
你設(shè)置MAMTIM的時候,MAM是開還是關(guān)?

16樓: >>參與討論
zy315
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;


參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
LCD12232 For ARMlpc214x 顯示程序移植OK.
問個關(guān)于ucosII的簡單問題
求教!不使用操作系統(tǒng)時,可以使用文件函數(shù)fread,fseek嗎?
菜鳥問題
關(guān)于cy7c028雙口RAM
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號