基于JTAG接口實(shí)現(xiàn)ARM的FPGA在線配置
?、谧止?jié)碼(Byte—Code)格式文件,STAPL源文件編譯好之后的字節(jié)碼文件,文件后綴名是“.jbc”。對(duì)于同樣的配置信息,該格式比.jam格式體積小,節(jié)省存儲(chǔ)空間;其缺點(diǎn)是,無(wú)法直接閱讀其中的配置信息。
與之對(duì)應(yīng),Jam Player也有兩種:普通Jam Player,負(fù)責(zé)對(duì).jam文件的解釋;Jam Byte一Code Player,負(fù)責(zé)對(duì).jbc文件的解釋。從AItera*****上可以免費(fèi)下載到用C語(yǔ)言編寫的兩種Player源代碼。
4 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
4.1 系統(tǒng)硬件設(shè)計(jì)
系統(tǒng)硬件連接方案如圖2所示。系統(tǒng)中只使用JTAG配置方式,所以與AS、PS相關(guān)的nCONFIG、MSELO和MSEL1引腳都不使用,而將nCONFIG拉高,MSELO和MSEL1接地。DATA0和DCLK引腳可以任意配置,在這里都接地。使用S3C2410的通用引腳GPB7、GPB8、GPB9、GPBlO引腳分別作為JTAG接口的TMS、TDl、TCK和TDO。
4.2 系統(tǒng)軟件設(shè)計(jì)
4.2.1 生成Jam配置文件
使用Jam STAPL進(jìn)行JTAG配置,需要有Jam配置文件。集成開(kāi)發(fā)環(huán)境QuartusII默認(rèn)生成的是.sol和.pof格式的配置文件,要生成.jam和.jbc文件,可以使用2種方法:
第1種方法,在工程編譯之前設(shè)置QuartusII的生成配置文件選項(xiàng)。在QuartusII的主菜單中,選擇【Assign—ments】→【【)evice】菜單,進(jìn)入【Setting】窗口,單擊“Device.Pin Options…”按鈕,在彈出的對(duì)話框中選擇“Program—ming Files”標(biāo)簽,在該標(biāo)簽頁(yè)中選擇.jam或者.jbc文件格式,單擊“0K”按鈕即可。
第2種方法,編譯完成后利用QuartusII自帶的文件格式轉(zhuǎn)換工具,將.sof或.pof文件轉(zhuǎn)換為.jam或.jbc文件類型。在QuartusII的主菜單中,選擇【File】→【ConvertProgramming Flies】菜單,進(jìn)入【Convert ProgrammingFiles】窗口。在該窗口的“Programming file type'’中選擇.jam或者.jbc類型,在“File name”中指定文件保存路徑和文件名(默認(rèn)使用與.sof或.pof同路徑同名),最后單擊“OK”按鈕,即可生成.jam或者.jbc配置文件。
4.2.2 移植Jam Player
Altera公司提供的Jam Player源程序文件包含了DOS、Windows和Unix三種平臺(tái)的代碼。在類似Unix的Linux平臺(tái)中使用,必須進(jìn)行定制和移植。
Jam Player源程序組織結(jié)構(gòu)如圖3所示。與配置平臺(tái)的I/O處理相關(guān)的功能都安排在jbis—tub.c文件中,使用Jam Player的用戶只需要根據(jù)平臺(tái)和硬件環(huán)境修改jbistub.c中的函數(shù),而不需要修改其他的文件。
將Jam Player移植到嵌入式Linux中,主要進(jìn)行下列的定制:
?、俑钠脚_(tái)預(yù)定義環(huán)境,添加預(yù)處理語(yǔ)句,去除不必要的源代碼;
?、趯TAG信號(hào)映射到具體硬件引腳;
?、鄱ㄖ棋e(cuò)誤信息輸出方式;
④根據(jù)具體微處理器的處理能力,定制延時(shí)函數(shù)。
關(guān)于更詳細(xì)的定制和移植過(guò)程可參考文獻(xiàn)[7]和[8]。
為了幫助Jam Player移植過(guò)程,Altera公司提供了調(diào)試和驗(yàn)證使用的idcode文件。該文件有.jam格式和.jbc格式,分別供移植普通Jam Player和Jam Byte一CodePlayer使用。其功能都是讀取目標(biāo)設(shè)備的IDCODE(每種型號(hào)的FPGA芯片都有一個(gè)與其一一對(duì)應(yīng)的IDC0DE,可參見(jiàn)芯片的數(shù)據(jù)手冊(cè))。如果移植成功,Jam Player會(huì)將讀取的IDCODE和對(duì)應(yīng)的芯片型號(hào)打印出來(lái);否則輸出詳細(xì)的相關(guān)錯(cuò)誤信息,以供調(diào)試使用。
4.2.3 JTAG驅(qū)動(dòng)程序
由于Jam Player運(yùn)行在嵌入式Linux環(huán)境中,無(wú)法直接訪問(wèn)ARM芯片的引腳寄存器,也就無(wú)法直接操作引腳的輸入輸出。所以還必須為用于JTAG接口的引腳編寫驅(qū)動(dòng)程序,將它們封裝成Jam Player可以讀寫的字符型文件。
該驅(qū)動(dòng)遵守普通Linux字符型文件驅(qū)動(dòng)編寫規(guī)則,無(wú)需向系統(tǒng)申請(qǐng)中斷和實(shí)現(xiàn)中斷函數(shù),最關(guān)鍵的就是對(duì)引腳讀寫時(shí),要符合JTAG接口引腳的時(shí)序控制。JTAG接口的引腳時(shí)序如圖4所示。從圖中可知,對(duì)于ARM的JTAG接口,TDI和TMS輸出信號(hào)是在TCK時(shí)鐘信號(hào)的下降沿鎖存的,而TDO反饋信號(hào)是在TCK時(shí)鐘信號(hào)的上升沿有效。
fpga相關(guān)文章:fpga是什么
評(píng)論