fpga电平约束有什么作用_FPGA从串模式
自我介紹什么的后面再說,先把原理和實現過程展示出來。
本文主要論述在ARM嵌入式系統中如何實現FPGA從串配置的方法,將系統程序及配置數據存儲在片外Flash中,利用ARM的通用I/O口產生配置時序。我們的實驗目的就是測試通過單片機外部的MCU給FPGA加載程序,實現一鍵燒寫多個FPGA程序,進而節省操作人員的時間(不用一個一個重復下載同樣的程序)
在這里我們選擇ARM家族的LPC1768:LPC1768 是NXP 公司推出的基于ARM Cortex-M3 內核的微控制器LPC17XX 系列中的一員。LPC17XX 系列Cortex-M3 微處理器用于處理要求高度集成和低功耗的嵌入式應用。LPC1700 系列微控制器的操作頻率可達100MHz。
FPGA采用xilinx公司A系列中的
| XC7A50T |
,數據手冊:A系列數據手冊-ug470;
接下來詳細討論FPGA的從串配置的時序,同時論述LPC1768從串配置A7系列FPGA的軟、硬件實現方法。
1.從串配置原理
Xilinx公司的A7系列FPGA可采用從串、主串、從并、主并、JTAG等方式進行配置,與從串配置相關的引腳功能及配置如下:
①M[2:0]:配置模式選擇位。M2,M1,M0均接上拉電阻,即M[2:O]=111時為從串模式。
②CCLK:配置時鐘位,由LPC1768微處理器提供,上升沿有效。
③DIN:串行數據輸入位。
④DOUT:串行數據輸出位,用于菊花鏈式配置。
⑤)PROG_B:低電平異步復位FPGA內部邏輯位。內部配置Memory完全復位后,該引腳指示高電平,此時才能開始配置FPGA。
⑥ INIT_B:由低電平到高電平跳變時,采樣配置模式選擇位M[2:0],確定配置方式;配置過程中若出現配置錯誤,INIT_B將呈現低電平。
⑦DONE:復位時為低電平,若配置成功則為高電平。
從串模式的時序圖如下:
數據手冊中對從串模式時序介紹
2.具體來聊聊FPGA的配置過程:
①系統上電后,首先將PROG_B置為高電平,之后將PROG_B置為低電平,復位FPGA內部邏輯重新配置FPGA,延時100 μs充分復位內部邏輯后,將PROG_B置為高電平。
②INIT_B保持低電平,將PROG_B置高電平大于50us后,FPGA將INIT_B置為高電平,在INIT_B由低向高跳變的瞬間,采樣配置模式選擇位M[2:0],采用從串配置模式。
③FPGA采樣配置模式后,微處理器開始配置FPGA時鐘CCLK和數據,在CCLK的每個上升沿,每bit數據被傳入到DIN,數據字節先發低位,再發高位,配置過程中若發生錯誤,則INIT_B呈現低電平。
④所有配置數據傳送完成,FPGA校驗無誤,則DONE呈現高電平,否則為低電平。
⑤DONE為高后,FPGA釋放全局三態(GTS),激活IO管腳,釋放全部置位復位(GSR)和全局寫使能(GWE)有效,開始執行配置區里的邏輯,從串模式配置完成。
現在開始動手來手撕代碼:
首先生成一個PROG_B由高電平再到低電平延時一段時間再拉高的時序波形,目的是為了給FPGA配置邏輯異步復位,表示設備已清除配置存儲器,相關代碼如下圖:
ARM模擬從串模式初始時序如果異步復位配置成功接下來我們應該接收到FPGA反饋的INIT_B信號,此時的INIT_B信號會被拉高,所以呢我們應該檢測它的上升沿(原理就是持續檢測低電平,滿足才可以通過while語句再檢測高電平,直到兩個while語句都通過),代碼如下圖
添加邊沿檢測INIT_B信號接下來我們要開始配置CCLK信號和數據了,這個我們參考的模擬I2C的思路(這個就是瀏覽器隨便一搜,相關講解很詳細,我就不多贅述),一個時鐘周期內發bit大小的數據(時鐘低電平的時候將數據準備好,高電平的時候發出去)每8個bit為一個byte。代碼如下圖:
配置時鐘和數據我們前期的準備工作都做好了,之后開始配置其他的一些子模塊以及寫主函數。打開芯片的數據手冊來查找我們要發送多少個字節以及一些注意事項(數據是高位先發還是低位先發等等)根據下面得圖可知我們一共需要發送17536096個bits
數據手冊相關內容有了這些信息我們再將SPIFlash里面的數據通過我們的從串模式DATAIN管腳發送給FPGA,我們的FPGA收到數據并且驗證成功之后會將DONE信號拉高,最后我們檢測到DONE信號拉高就可以判斷從串模式配置成功了,部分代碼如下
對DONE信號進行驗證主函數調用子模塊這樣我們就做好了一個從串模式的代碼,經過測試發現我們需要2分鐘左右才可以配置成功,這個時間遠遠達不到我們得要求,需要開始優化代碼,首先分析造成配置時間過長的原因:
(1)從SPIFlash讀取數據的時間太長了
(2)每次傳數據中間的延時時間太久了。為了改善這個問題我們將SPIFlash一次多讀取一些數據,還有就是將延時縮小到滿足要求的最小值。代碼如下圖:
講每次從flash中提取的數據增多提高讀取速率修改完上面的兩處變量我們就可以將配置的時間提升到13s左右(serial clock rate通過查手冊是數值越小,速率越快(最小可以取到01)。SPIFlash影響配置速度的主要原因是每次讀取數據等待的時間太久,所以我們減少讀取的次數,每次多讀取一些數據,我們取最大的值1024還可以取64,128,256,512)。
對于縮小延遲時間這個比較特殊,我們需要單獨的說明:我們的延時函數
延時函數經過我測量在i=10000的時候正好生成周期為1us的方波(LPC1768主頻是100MHZ),說明我們的延時函數還是比較精準的。再去查詢FPGA從串模式下的最小數據傳輸間隔時間為2.5ns,LPC1768運行一個語句的時間為1/100MHZ等于10ns,綜上所述我們即使不給延時也可以滿足FPGA對于時間的間隔,最后查詢建立時間和保持時間的要求,也是可以滿足的所以我們原來加延時的地方都來可以注釋掉。
實驗過程中的“坑”
!!!仔細看芯片手冊,圖上面顯示的和下面的注釋可能不一樣。比如這次LPC1768輸出數據的時候時序圖上面是低位在前,而底下注釋的是高位在前,所以導致最后傳輸數據結束后FPGA沒有配置成功。
第一次寫這種分享技術貼,哪里不對希望多多指正,介紹一下自己,我就是一個剛開始工作3個月的應屆生,這個項目是我進公司領導給頒布的第一個小項目,自己之前沒有接觸過這個從串模式,剛開始還是很抗拒的,因為是一個全新的內容,一點頭緒都沒有,而且網上還沒有例程之類的參考,完全是0到1。但是還好堅持下來了,最終完成了這個項目,所以寫點小經驗來記錄一下,如果哪里有錯誤請指出。
我也是第一次寫這個,寫作的動力還是因為看到了一個B站UP主“老石談芯”的一個視頻,大概的意思是:
1、你不必是個天才2、每天分享一點內容3、教給別人你會的東西。
所以,以后我也會經常分享工作和學習之中的感悟和經驗,我是新入職的硬件工程師,你們好
總結
以上是生活随笔為你收集整理的fpga电平约束有什么作用_FPGA从串模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 若要加载模块二进制_春哥说 | 浅谈No
- 下一篇: 如何判断两物体加速度相等_高中物理:速度