印象中FPGA市場(chǎng)基本是Altera和Xilinx一統(tǒng)天下,他們的明爭(zhēng)暗斗決定著FPGA的未來(lái),甚至他們各自的家族產(chǎn)品都是對(duì)著干的。Lattice、Actel、Atmel各有其小眾市場(chǎng),再有別的廠(chǎng)商,基本上是不太叫得上來(lái)了。
國(guó)產(chǎn)FPGA?是不是聽(tīng)錯(cuò)了,沒(méi)有。記得第一次聽(tīng)說(shuō)FPGA前面加了個(gè)定冠詞“國(guó)產(chǎn)”應(yīng)該可以追溯到還和價(jià)格堪比年薪的軍品糾結(jié)的歲月。不過(guò)那個(gè)“國(guó)產(chǎn)”二字總感覺(jué)和“盜版”諧音,真的不是損誰(shuí),只是實(shí)事求是的說(shuō)。也許這種模式也叫“中國(guó)特色”吧,好歹比那天忘了在哪位大俠博客看到的“二次包裝”的“中國(guó)制造”強(qiáng)上千百倍。Xilinx早期的XC4打頭的FPGA,也只有ISE4以前的版本支持,“低端”軍品也就這幾款了。所以國(guó)內(nèi)的XX所也很牛,居然能夠逆向設(shè)計(jì)將他們的“國(guó)產(chǎn)”FPGA做得和它完全兼容,不止是PIN2PIN,甚至連開(kāi)發(fā)工具他們都不用徒手打造了,告訴我們完全替代現(xiàn)有的Xilinx器件。
有時(shí)候不得不感嘆,中國(guó)人很牛。外國(guó)人可以做到的,基本上沒(méi)有中國(guó)人做不到的。時(shí)光荏苒,已不再需要靠那些“可靠”換“性能”的片子干活了。而FPGA的成本卻越來(lái)越成為產(chǎn)品開(kāi)發(fā)中揮之不去的夢(mèng)魘,于是乎,老板想盡辦法要壓榨FPGA的成本,這次找來(lái)了又一個(gè)“國(guó)產(chǎn)”準(zhǔn)備在低端低成本的應(yīng)用中大干一場(chǎng)。不過(guò)幾番觀(guān)察下來(lái),特權(quán)同學(xué)開(kāi)始對(duì)此“君”頗有好感,它也許算不上真正意義上的“國(guó)產(chǎn)”,但是多少讓人感受到了它走的是一條“正規(guī)”有“前途”的路子。
其實(shí)也只是昨天才開(kāi)始正式的和這家名為Agate Logic的FPGA廠(chǎng)商有了一些“親密”接觸。它的開(kāi)發(fā)工具,它的開(kāi)發(fā)流程,它的主打芯片結(jié)構(gòu)、特點(diǎn)、性能都有所了解,但要真*實(shí)彈的用這個(gè)家伙干活,還得有更深入的嘗試和驗(yàn)證。對(duì)這些嘗試做些記錄,也許,是一次蠻有意思的嘗試。
今天先簡(jiǎn)單的沒(méi)主題的隨便扯談吧。首先,這家公司是提供了兩個(gè)系列的產(chǎn)品,其中一個(gè)系列工藝先進(jìn)些,據(jù)說(shuō)性能好一些,只不過(guò)年初剛量產(chǎn),還不是主推產(chǎn)品,姑且不詳談,畢竟特權(quán)同學(xué)的DEMO板上的主角兒也不是它。另一個(gè)低端點(diǎn)的系列叫Astro,別小看它了,先羅列一下參數(shù)大家瞧瞧。
★ 硬核——可以跑到100MHz的8051硬核,標(biāo)準(zhǔn)外設(shè)IIC一個(gè)、SPI一個(gè)、USART兩個(gè)、定時(shí)器數(shù)個(gè)。
★ 1Mbit一次性可編程存儲(chǔ)(OTP)——加密的利器啊。
★ 1個(gè)PLL——3個(gè)可選輸出,相位可調(diào)。
★ 可選的內(nèi)部4Mbit FLASH。
★ 2個(gè)9Kbit可配置存儲(chǔ)器——雖然對(duì)于片內(nèi)存儲(chǔ)要求很高的特權(quán)同學(xué)有點(diǎn)“巧婦難為無(wú)米之炊”了,不過(guò)低端應(yīng)用犧牲一些“性能”還是可以接受的。
有這些東西還不算,最主要的還是它保持著傳統(tǒng)“中國(guó)特色”的“便宜”,基本上3個(gè)美金可以拿到有1024個(gè)LUT的器件了。若是要和當(dāng)前的Altera相關(guān)解決方案比比,那真得是蠻有競(jìng)爭(zhēng)力的。MAX II系列CPLD除了邏輯真得沒(méi)有別的用處了,而邏輯資源遜色不少的EPM570(EPM1270不說(shuō)了)目前市場(chǎng)上估計(jì)是有缺貨的因素,居然賣(mài)到30好幾個(gè)RMB了。而如果選擇Cyclone系列最便宜的EP1C3好像也只要30多RMB,但是要跑個(gè)最經(jīng)濟(jì)的NIOS也有點(diǎn)困難。而且有個(gè)很有意思的現(xiàn)象,正規(guī)代理商會(huì)很無(wú)奈的告訴你這樣的老器件要30的數(shù)倍價(jià)格才能搞到,而外面的小商小販賣(mài)的就是30的準(zhǔn)“白菜價(jià)”(當(dāng)然不排除買(mǎi)到“散新貨”的可能)。而Astro卻連配置器件和外掛MCU的成本都省了,雖然它也是基于SRAM的結(jié)構(gòu)。(不行,越比發(fā)現(xiàn)這東西越好。先申明一下,這里不是推銷(xiāo),只是比較,特權(quán)同學(xué)是用芯片的,不是賣(mài)芯片的。嘿嘿)
今天花了一上午把它們的開(kāi)發(fā)工具Primace的Help過(guò)了一遍。再說(shuō)個(gè)題外話(huà),昨天到它們的上海辦事處,感覺(jué)上這般人對(duì)版本的管理不是很好,動(dòng)不動(dòng)來(lái)一個(gè)版本,讓我們當(dāng)時(shí)一個(gè)版本裝另一個(gè)版本卸的來(lái)回折騰好幾次才看到Primace的本來(lái)面目。還有那個(gè)USB下載線(xiàn),MCU要一個(gè)JTAG,F(xiàn)PGA也要一個(gè)JTAG,如果能二合一的干活多好啊,就像咱的NIOS2。
FPGA開(kāi)發(fā),確切的說(shuō)硬件系統(tǒng)的開(kāi)發(fā)都是有賴(lài)于Primace的,軟件是KEIL,它們提供了一套接口,用上去還算方便。這個(gè)Primace整個(gè)一ISE或者Quartus II的簡(jiǎn)化版,畢竟也是剛起步,勉強(qiáng)可以接受,怎么說(shuō)咱當(dāng)年在ISE10大行其道的年代也有過(guò)被迫無(wú)奈“玩轉(zhuǎn)”ISE4的經(jīng)歷。
截個(gè)圖,如圖1,它們的開(kāi)發(fā)流程也算是軟硬兼施,F(xiàn)PGA的流程很簡(jiǎn)化,看上去很“清爽”。最終把FPGA配置文件bitgen和KeilC的Hex一起在軟件里生成個(gè)新文件下載就行。
圖1
開(kāi)發(fā)工具真的很“簡(jiǎn)陋”。時(shí)序約束和分析特權(quán)同學(xué)還沒(méi)摸懂怎么回事,就那么兩三個(gè)GUI選項(xiàng),只能說(shuō)是比Classic timing analyzer還Classic,這一點(diǎn)是特權(quán)同學(xué)最擔(dān)憂(yōu)的;提供的板級(jí)調(diào)試手段也很有限,好像就一個(gè)稱(chēng)為Signal monitor的家伙,沒(méi)有嘗試,就不妄下定論,好在本來(lái)它的邏輯資源也不多,調(diào)試起來(lái)有沒(méi)有在線(xiàn)手段也無(wú)關(guān)緊要。
51硬核性能測(cè)試
IO口速度測(cè)試,使用以下程序測(cè)試高電平脈寬。
while(1)
{
P0 = 0xf;
P0 = 0x0;
}
同等條件下與其他MCU比較:
?
工作頻率 |
高脈沖寬度 |
|
ASTRO 8051硬核 |
25MHz |
約1us |
ASTRO 8051硬核 |
50MHz |
約500ns |
ASTRO 8051硬核 |
100MHz |
約250ns |
STC89C516 |
11.0592MHz |
約2.16us |
NIOS II/e 32位軟核 |
25MHz |
約2.5us |
NIOS II/s 32位軟核 |
25MHz |
約160ns |
NIOS II/f 32位軟核 |
25MHz |
約160ns |
在兩次操作之間插入延時(shí)函數(shù),分別延時(shí)delay(1)、delay(2)、delay(3)、delay(4)。測(cè)試延時(shí)函數(shù)如下:
void delay(uchar cnt)
{
uchar i =0;
while(i 《 cnt)
{
i++;
}
}
由于delay()函數(shù)調(diào)用一次會(huì)有一些額外開(kāi)銷(xiāo)(如賦初值等),所以我們通過(guò)不同延時(shí)值的實(shí)際延時(shí)差來(lái)看指令運(yùn)行的速度。換句話(huà)說(shuō),對(duì)前面的程序,可以通過(guò)每次delay()函數(shù)的差值來(lái)計(jì)算每多執(zhí)行一次i++和一次i
特權(quán)同學(xué)曾使用相同條件測(cè)試了51單片機(jī),通常11.0592MHz下工作的51單片機(jī)每多執(zhí)行一次i++和一次i
延時(shí)函數(shù)ASTRO 8051硬核NIOS II/s 32位軟核
50MHz100MHz25MHz50MHz
Delay(1)5.0us2.5us6.5us4us
Delay(2)6.6us3.3us9us6us
Delay(3)8.3us4.2us11.5us7.5us
Delay(4)9.9us5.0us14us9.5us
i++與i約1.63us約0.83us約2.5us約1.25us
簡(jiǎn)單的一些性能測(cè)試,發(fā)現(xiàn)這個(gè)51硬核還是有花頭的,至于穩(wěn)定性和可靠性上還需繼續(xù)驗(yàn)證和嘗試。當(dāng)然,本文的測(cè)試是使用了片內(nèi)的存儲(chǔ)器作為代碼和數(shù)據(jù)存儲(chǔ),實(shí)際速度性能和存儲(chǔ)器的性能關(guān)系非常大,是需要進(jìn)一步考核的項(xiàng)目。
?
存儲(chǔ)器
有幾點(diǎn)關(guān)于代碼和數(shù)據(jù)存儲(chǔ)區(qū)配置的一些疑問(wèn),麻煩解答一下:
問(wèn):代碼存儲(chǔ)器可以選擇OTP或者extension memory,一般在最終軟件定型后使用OTP沒(méi)有問(wèn)題,而在調(diào)試過(guò)程中會(huì)選擇extension memory。extension memory里有三類(lèi):EMB、SRAM和Custom,通常代碼存儲(chǔ)器應(yīng)該是非易失存儲(chǔ)器,而你們這里列出來(lái)的EMB和SRAM都是下電易失的,這一點(diǎn)我不是很明白?難道說(shuō)extension memory只是在KeilC處于debug模式時(shí)代碼運(yùn)行的存儲(chǔ)區(qū),而非代碼下電存儲(chǔ)的介質(zhì)?EMB只有1K(最大可以到2K),如果設(shè)置了這個(gè)代碼存儲(chǔ)器,是不是KEILC DEBUG時(shí)代碼不可以超過(guò)1K?
FAE:EMB和SRAM都是易失的,用EMB是最大可支持2KB的code空間,EMB初始化的信息與FPGA配置信息一起存儲(chǔ)在內(nèi)嵌SPI Flash中,上電自動(dòng)加載,用SRAM時(shí),需要使用我們提供的SRAMLoader工程,利用Astro重配置特性進(jìn)行加載。
問(wèn):與上面類(lèi)似的疑問(wèn),關(guān)于數(shù)據(jù)存儲(chǔ)區(qū),兩個(gè)選項(xiàng),on-ship SRAM默認(rèn)勾選,這個(gè)沒(méi)有疑問(wèn)。而FP應(yīng)該是內(nèi)部擴(kuò)展的4M Flash,應(yīng)該是非易失存儲(chǔ)器,數(shù)據(jù)存儲(chǔ)器通常沒(méi)有必要是非易失的吧?我認(rèn)為按照常規(guī),代碼存儲(chǔ)是非易失存儲(chǔ)器,數(shù)據(jù)存儲(chǔ)是易失存儲(chǔ)器,而你們的配置選項(xiàng)讓我有點(diǎn)糊涂。
FAE:Astro內(nèi)部為8051提供16KB專(zhuān)用SRAM,用作data空間。
問(wèn):另外,SPI燒錄應(yīng)該是將FPGA配置數(shù)據(jù)燒錄到4M FLASH中吧?而用Configuration Packer功能應(yīng)該是要將FPGA配置數(shù)據(jù)和軟件hex文件封裝成一個(gè)文件燒錄到4M flash中吧?我這么嘗試過(guò)好像下電后系統(tǒng)沒(méi)有跑起來(lái),那么是不是在系統(tǒng)的存儲(chǔ)器配置中有所講究呢?
FAE:Configuration Packer可以讓Astro內(nèi)存儲(chǔ)多個(gè)配置文件,利用它可以在使用SRAM做code空間時(shí)打包SRAMLoader工程進(jìn)行上電自動(dòng)加載。附件中是關(guān)于A(yíng)stro的幾個(gè)應(yīng)用文檔,您先看一下,寫(xiě)的比較詳細(xì),相信對(duì)您理解Astro用法會(huì)很有幫助,謝謝!
昨天對(duì)Agate Logic負(fù)責(zé)硬件的FAE狂轟濫炸,對(duì)于其開(kāi)發(fā)工具和器件的結(jié)構(gòu)都有更深入的了解和認(rèn)識(shí),上面的幾個(gè)問(wèn)答只是關(guān)于51硬核的數(shù)據(jù)和代碼存儲(chǔ)器方面的,好一番追問(wèn)之后,總算逼出了幾個(gè)像模像樣的文檔出來(lái),消化后再做了一些實(shí)踐,然后有一點(diǎn)收獲和對(duì)后續(xù)項(xiàng)目在存儲(chǔ)器配置上的一些可行性的想法。另外,關(guān)于時(shí)序方面的一些疑問(wèn)也得到了解答,不是很放心,也問(wèn)出了一些真真確確的“問(wèn)題”來(lái),并且目前在用軟件版本的一些bug也被我問(wèn)出來(lái)了,目前還需要等著廠(chǎng)商給我提供補(bǔ)丁,所以關(guān)于時(shí)序方面的博文只能暫緩進(jìn)行。
特權(quán)同學(xué)問(wèn)題提得比較到位,但不是很有水準(zhǔn)。FAE回答得也不是很容易讓人明白,最后還是文檔給出了比較權(quán)威的解答。
在討論Astro系列芯片51硬核的軟件運(yùn)行模式之前,要先看看Astro系列芯片到底已經(jīng)提供了哪些片內(nèi)的存儲(chǔ)資源,不看不要緊,一看嚇一跳——可謂品種齊全,滿(mǎn)足各類(lèi)需求。
1. 總共1Mbit的OTP型存儲(chǔ)區(qū),其中64KB用于FPGA的配置數(shù)據(jù)存儲(chǔ),另64KB用于51硬核的最終代碼存儲(chǔ)器。
2. 4Mbit(512KB)的FPGA和8051公用的SPI Flash。
3. 2塊9Kbit的可配置雙端口EMB。
4. 16KB的51硬核專(zhuān)用數(shù)據(jù)存儲(chǔ)器。
Astro系列芯片51硬核的軟件主要運(yùn)行模式:
小模式:
不外掛存儲(chǔ)器,使用芯片現(xiàn)有資源,F(xiàn)PGA配置數(shù)據(jù)和8051代碼(小于2KB)存儲(chǔ)于SPI Flash中。系統(tǒng)上電后,F(xiàn)PGA配置數(shù)據(jù)先從SPI Flash中導(dǎo)出并配置FPGA,也包括EMB的初始化數(shù)據(jù)(即軟件代碼從SPI FLASH搬運(yùn)到EMB中);完成后8051代碼直接從EMB中開(kāi)始運(yùn)行。
內(nèi)嵌8051在無(wú)等待周期的狀態(tài)下,最快時(shí)鐘頻率可到70MHz,性能到47MIPS的性能。主要用于8051代碼較少時(shí),調(diào)試生產(chǎn)兩便,成本也比較低。
手記二中的測(cè)試就是基于該模式,性能還算可以。
調(diào)試模式:
外掛SRAM存儲(chǔ)器,F(xiàn)P Bootloader配置數(shù)據(jù)、FPGA用戶(hù)程序配置數(shù)據(jù)和8051用戶(hù)代碼分段存儲(chǔ)于SPI Flash中。系統(tǒng)上電先從SPI Flash中導(dǎo)出FP BootLoder配置數(shù)據(jù)(內(nèi)含Loader部分)。配置FP包括EMB的初始化數(shù)據(jù),完成后SRAM Loader程序?qū)徇\(yùn)8051用戶(hù)代碼到外掛SRAM中;之后再?gòu)腟PI Flash中導(dǎo)入FP用戶(hù)程序并重新配置FP,8051代碼在外掛SRAM中開(kāi)始運(yùn)行。
內(nèi)嵌8051在無(wú)等待周期的狀態(tài)下,最快時(shí)鐘頻率可到35MHz,性能到23MIPS的性能。此模式主要用于8051代碼超過(guò)2KB調(diào)試時(shí)用。當(dāng)然也可用于生產(chǎn)。請(qǐng)注意外掛SRAM將增加成本。
這種模式由于不太可能使用,所以特權(quán)同學(xué)不過(guò)多研究,但這也是嵌入式系統(tǒng)中比較常見(jiàn)的一種BootLoder方式。
評(píng)論
查看更多