<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 一種基于A(yíng)RM-Linux的FPGA程序加載方法

一種基于A(yíng)RM-Linux的FPGA程序加載方法

作者: 時(shí)間:2012-11-30 來(lái)源:網(wǎng)絡(luò ) 收藏

  1、引言

  在系統上電時(shí),需要從外部載入所要運行的程序,此過(guò)程被稱(chēng)為。多數情況下,從外部專(zhuān)用的 EPROM讀入程序。這種方式速度慢,而且只能加載固定的程序。顯然,當系統需要容量大而且 要加載的程序可以根據需要有選擇的加載時(shí)不能采用這種方法。本文實(shí)現了一種基于外部處理器的加載方法,速度快,而且可以根據設置給FPGA加載相應的程序。

  對于 Xilinx公司的 FPGA芯片,有五種加載方式:JTAG模式,串行從模式,串行主模式,并行從模式和并行主模式。JTAG模式常用于調試時(shí),將主機綜合好的到FPGA,優(yōu)先級高于其他幾種模式。其他加載模式取決于 FPGA上加載模式管腳(M0,M1,M2)的設置。

  用外部處理器給 FPGA加載程序時(shí),可以采用串行從模式、并行從模式,甚至于 JTAG模式。本文選擇并行從模式,原因在于更高的配置速率。

  2、 FPGA程序數據的產(chǎn)生

  FGPA的即是要把綜合好的程序文件按一定的時(shí)序寫(xiě)入FPGA。而 Xilinx的開(kāi)發(fā)環(huán)境可以根據用戶(hù)的選擇產(chǎn)生多種文件格式,以不同的后綴名區分。不同的文件格式包含了不同的信息,有不同的用途。

  本文選擇了.bin格式的文件。此文件是只包含有程序數據的二進(jìn)制文件。產(chǎn)生此文件,要在bitgen 參數里增加-g Binary:yes 選項。

  此外,需要說(shuō)明的是,通常的微處理器 D0位是最低有效位,而 Xilinx的 FPGA在接收程序數據時(shí),D0位是最高有效位。因此,在按字節讀取.bin格式的文件之后,需要有一個(gè)轉換的過(guò)程。如從文件讀到一個(gè)字節,0x7D,即二進(jìn)制的 0111 1101,需轉換為:1011 1110。

  加載過(guò)程開(kāi)始時(shí),就要從.bin文件中順序按字節讀出數據,然后在 CCLK的上升沿寫(xiě)入 FPGA。在.bin文件中的數據都被寫(xiě)入 FPGA后,CCLK需要多出四個(gè)時(shí)鐘周期,以使得 FPGA完成啟動(dòng)過(guò)程。

  3、硬件設計

  在FPGA上,與配置有關(guān)的管腳分為兩類(lèi):專(zhuān)用管腳,包括PROG_B,HSWAP_EN,TDI, TMS,,TCK,TDO,CCLK,DONE,和M0-M2。還有一類(lèi)是可復用管腳,這類(lèi)管腳在配置階段作為配置管腳,配置結束后可以配置為通用普通的IO管腳,也可以繼續作為配置管腳。在并行從模式下,涉及到的配置管腳和功能如下:

  CS_B:片選信號,低有效; RDWR_B:寫(xiě)信號,低有效; BUSY:FPGA忙指示,高有效,一般只有在并行加載時(shí)鐘速率大于50M時(shí)才有可能用到;D0-D7:數據線(xiàn); INIT_B:芯片被復位后,此管腳為輸出信號,輸出低電平指示FPGA正在自行復位內部

  寄存器。復位結束后,此管腳浮空,處于輸入狀態(tài)。因此需要上拉電阻,指示復位結束。內部寄存器復位結束后,此管腳若被拉低,則會(huì )推遲FPGA的程序加載過(guò)程。在程序加載過(guò)程中,此管腳又變回輸入狀態(tài),對外輸出低電平指示加載的程序數據存在CRC校驗錯誤。

  PROG_B:異步復位信號,下降沿有效,此信號為低電平時(shí)復位FPGA,復位后,FPGA芯片處于內部寄存器自行復位過(guò)程,INIT_B被FPGA芯片拉低,此過(guò)程結束后,FPGA不再驅動(dòng)INIT_B管腳,INIT_B管腳處于浮空狀態(tài),此時(shí),INIT_B有上拉電阻時(shí),INIT_B呈現高電平,依次可以指示FPGA的內部寄存器自行復位結束。程序加載狀態(tài)。

  DONE:加載成功指示。 CCLK:程序加載時(shí),數據在此信號的上升沿被寫(xiě)入FPGA。在本設計中,芯片采用的是 SUMSUN公司的S3C2410,與 FPGA配置管腳相連的是此芯片的通用 IO管腳 D組。硬件連接如圖[1]所示。在 的程序中,管腳在程序加載的各階段的輸入輸出設置如下:首先,設置 GPD[10](與 FPGA的 INIT_B相連)、GPD[11](與 FPGA的 BUSY相連)為輸入管腳,以監視 FPGA內部寄存器自行復位結束和忙閑狀態(tài)。其次,設置GPD[12](與 FPGA的 PROG_B相連)為輸出狀態(tài),并使其輸出低脈沖,使 FPGA復位。然后依次設置 GPD[8](與 FPGA的 CS_B相連)、GPD[9](與 FPGA的 RDWR_B相連)、GPD[14] (與 FPGA的 CCLK相連)為輸出管腳,并使其輸出低電平,使 FPGA處于被選可接受數據狀態(tài);接著(zhù)設置D[0..7]為輸出狀態(tài)。

  至此,ARM中的程序開(kāi)始輪詢(xún)GPD[10]的狀態(tài),檢測到此信號為高時(shí),有兩種選擇,其一是因為需要而推遲 FPGA的程序加載,可以通過(guò)設置 GPD[10]為輸出,并使其輸出為低電平直至程序加載開(kāi)始。其二是開(kāi)始給 FPGA加載程序,FPGA在 CCLK的上升沿接收數據,在給 FPGA加載程序的過(guò)程中,程序需要監視GPD[10]管腳的狀態(tài),一旦為低,FPGA指示程序數據加載 CRC校驗出錯。此時(shí)需要復位FPGA,重新加載.

  采用的硬件連接如下圖:

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

上一頁(yè) 1 2 3 下一頁(yè)

關(guān)鍵詞: ARM Linux FPGA 程序加載

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>