有幾點關于代碼和數(shù)據(jù)存儲區(qū)配置的一些疑問,麻煩解答一下:
問:代碼存儲器可以選擇OTP或者 extension memory,一般在最終軟件定型后使用OTP沒有問題,而在調(diào)試過程中會選擇extension memory。extension memory里有三類:EMB、SRAM和Custom,通常代碼存儲器應該是非易失存儲器,而你們這里列出來的EMB和SRAM都是下電易失的,這一點我不是很明白?難道說extension memory只是在KeilC處于debug模式時代碼運行的存儲區(qū),而非代碼下電存儲的介質(zhì)?EMB只有1K(最大可以到2K),如果設置了這個代碼存儲器,是不是KEILC DEBUG時代碼不可以超過1K?
FAE:EMB和SRAM都是易失的,用EMB是最大可支持2KB的code空間,EMB初始化的信息與FPGA配置信息一起存儲在內(nèi)嵌SPI Flash中,上電自動加載,用SRAM時,需要使用我們提供的SRAMLoader工程,利用Astro重配置特性進行加載。
問:與上面類似的疑問,關于數(shù)據(jù)存儲區(qū),兩個選項,on-ship SRAM默認勾選,這個沒有疑問。而FP應該是內(nèi)部擴展的4M Flash,應該是非易失存儲器,數(shù)據(jù)存儲器通常沒有必要是非易失的吧?我認為按照常規(guī),代碼存儲是非易失存儲器,數(shù)據(jù)存儲是易失存儲器,而你們的配置選項讓我有點糊涂。
FAE:Astro內(nèi)部為8051提供16KB專用SRAM,用作data空間。
問:另外,SPI燒錄應該是將FPGA配置數(shù)據(jù)燒錄到4M FLASH中吧?而用Configuration Packer功能應該是要將FPGA配置數(shù)據(jù)和軟件hex文件封裝成一個文件燒錄到4M flash中吧?我這么嘗試過好像下電后系統(tǒng)沒有跑起來,那么是不是在系統(tǒng)的存儲器配置中有所講究呢?
FAE:Configuration Packer可以讓Astro內(nèi)存儲多個配置文件,利用它可以在使用SRAM做code空間時打包SRAMLoader工程進行上電自動加載。附件中是關于Astro的幾個應用文檔,您先看一下,寫的比較詳細,相信對您理解Astro用法會很有幫助,謝謝!
昨天對Agate Logic負責硬件的FAE狂轟濫炸,對于其開發(fā)工具和器件的結(jié)構(gòu)都有更深入的了解和認識,上面的幾個問答只是關于51硬核的數(shù)據(jù)和代碼存儲器方面的,好一番追問之后,總算逼出了幾個像模像樣的文檔出來,消化后再做了一些實踐,然后有一點收獲和對后續(xù)項目在存儲器配置上的一些可行性的想法。另外,關于時序方面的一些疑問也得到了解答,不是很放心,也問出了一些真真確確的“問題”來,并且目前在用軟件版本的一些bug也被我問出來了,目前還需要等著廠商給我提供補丁,所以關于時序方面的博文只能暫緩進行。
特權(quán)同學問題提得比較到位,但不是很有水準。FAE回答得也不是很容易讓人明白,最后還是文檔給出了比較權(quán)威的解答。
在討論Astro系列芯片51硬核的軟件運行模式之前,要先看看Astro系列芯片到底已經(jīng)提供了哪些片內(nèi)的存儲資源,不看不要緊,一看嚇一跳——可謂品種齊全,滿足各類需求。
1. 總共1Mbit的OTP型存儲區(qū),其中64KB用于FPGA的配置數(shù)據(jù)存儲,另64KB用于51硬核的最終代碼存儲器。
2. 4Mbit(512KB)的FPGA和8051公用的SPI Flash。
3. 2塊9Kbit的可配置雙端口EMB。
4. 16KB的51硬核專用數(shù)據(jù)存儲器。
Astro系列芯片51硬核的軟件主要運行模式:
小模式:
不外掛存儲器,使用芯片現(xiàn)有資源,F(xiàn)PGA配置數(shù)據(jù)和8051代碼(小于2KB)存儲于SPI Flash中。系統(tǒng)上電后,F(xiàn)PGA配置數(shù)據(jù)先從SPI Flash中導出并配置FPGA,也包括EMB的初始化數(shù)據(jù)(即軟件代碼從SPI FLASH搬運到EMB中);完成后8051代碼直接從EMB中開始運行。
內(nèi)嵌8051在無等待周期的狀態(tài)下,最快時鐘頻率可到70MHz,性能到47MIPS的性能。主要用于8051代碼較少時,調(diào)試生產(chǎn)兩便,成本也比較低。
手記二中的測試就是基于該模式,性能還算可以。
調(diào)試模式:
外掛SRAM存儲器,F(xiàn)P Bootloader配置數(shù)據(jù)、FPGA用戶程序配置數(shù)據(jù)和8051用戶代碼分段存儲于SPI Flash中。系統(tǒng)上電先從SPI Flash中導出FP BootLoder配置數(shù)據(jù)(內(nèi)含Loader部分)。配置FP包括EMB的初始化數(shù)據(jù),完成后SRAM Loader程序?qū)徇\8051用戶代碼到外掛SRAM中;之后再從SPI Flash中導入FP用戶程序并重新配置FP,8051代碼在外掛SRAM中開始運行。
內(nèi)嵌8051在無等待周期的狀態(tài)下,最快時鐘頻率可到35MHz,性能到23MIPS的性能。此模式主要用于8051代碼超過2KB調(diào)試時用。當然也可用于生產(chǎn)。請注意外掛SRAM將增加成本。
這種模式由于不太可能使用,所以特權(quán)同學不過多研究,但這也是嵌入式系統(tǒng)中比較常見的一種BootLoder方式。
最終生產(chǎn)模式:
不外掛存儲器,8051代碼存儲于OTP存儲器中,F(xiàn)P配置數(shù)據(jù)存于OTP或SPI FLASH中。因為OTP存儲器是一次性的,所以不能用于調(diào)試階段。一般產(chǎn)品最終定型后再使用OTP存儲器可以獲得最優(yōu)的性能和最低的成本。
而當采用OTP 作為8051 代碼內(nèi)存,最高時鐘頻率可達100MHz。較理想的方法是用鎖相環(huán)PLL來產(chǎn)生8051 時鐘。CKCON SFR的低4位用來控制數(shù)據(jù)Memory 的等待周期。如果8051時鐘頻率高于45MHz,最好將value設置為大于等于2,以防止時鐘太快,數(shù)據(jù)還沒準備好。
也就是說,OTP方式可以達到51硬核代碼運行的最佳性能,甚至于性能的速度瓶頸已經(jīng)不是代碼存取,而是數(shù)據(jù)存取。
以上三種模式是比較推薦的,但是特權(quán)同學從實際工程需要來考慮,簡單的說,需要一種調(diào)試模式和一種生產(chǎn)模式。生產(chǎn)模式無可厚非的選擇OTP燒錄,而調(diào)試模式有點棘手,如果選擇小模式,代碼運行量太小,頂多不過2K,基本干不了什么事。而選擇外擴SRAM,有限的IO資源不會允許的。所以,有點苦惱,但是還好,還有一種最次的選擇——性能低下的第四種模式。
當8051的性能低于1.4MIPS時,可用spi flash作為8051的代碼存儲器。此模式的運行環(huán)境如下:
1. 選用片內(nèi) SPI FLASH;
2. FPGA的配置數(shù)據(jù)和8051代碼存放在同一個SPI FLASH 里;
3. 8051 與SPI FLASH 接口大約需要90 個LE cells;
4. 8051 的內(nèi)核時鐘最快為30MHz 左右, 8051 最快運行性能大約為1.4MIPS;
5. 順序取指需要 8 個時鐘周期,跳轉(zhuǎn)取指需要40 個周期;
在嘗試SPI FLASH模式的時候,遇到了比較有意思的事。特權(quán)同學根據(jù)實例做SPI FLASH的運行測試,結(jié)果搞不定,也找不到相關的IP核。于是求問FAE,F(xiàn)AE直接告知這個IP核還沒有集成到工具中,然后把源代碼都發(fā)過來了。呵呵,雖然工具不完善,不過服務倒是很周到。
由于基于SPI FLASH的模式是在51硬核與SPI FLASH之間使用FPGA邏輯搭建了一個FLASH讀取的模塊。所以經(jīng)過測試,確實這個FLASH讀取控制的邏輯模塊頻率不能太高,過高FLASH就要**了,理論值是30M,而特權(quán)同學用了25M。然后使用上一篇手記同樣的方法改變硬核的頻率進行測試。