利用配置芯片實現(xiàn)啟動引導(dǎo)和數(shù)據(jù)的讀寫系統(tǒng)及方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于電子信息工程技術(shù)領(lǐng)域,涉及一種利用配置芯片實現(xiàn)啟動引導(dǎo)和數(shù)據(jù)的讀寫系統(tǒng)及方法,具體地說,涉及一種利用配置芯片實現(xiàn)現(xiàn)場可編程門陣列(Field-Programmable Gate Array,FPGA)的引導(dǎo)啟動(bootloader)和利用配置芯片實現(xiàn)啟動引導(dǎo)和數(shù)據(jù)的讀寫系統(tǒng)及方法。
【背景技術(shù)】
[0002]FPGA需要外部存儲器進行程序加載,也就是bootloader。該存儲器的主要作用是存放FPGA的配置文件。Altera公司的FPGA的配置文件一般通過后綴為Pof、Jic格式文件進行存放,其開發(fā)軟件QuartusII能識別這些格式文件,并調(diào)用下載器對外部存儲器進行編程,把Pof與Jic中有效的數(shù)據(jù)固化到外部存儲器中。在很多情況下FPGA的有效配置數(shù)據(jù)并沒占據(jù)存儲器的所有存儲空間,因此在印制電路板(Printed Circuit Board, PCB)空間狹小或為了節(jié)省成本等實際情況下,外部存儲器除了存放FPGA的配置數(shù)據(jù)以外還可以存儲用戶自定義的數(shù)據(jù)。
【發(fā)明內(nèi)容】
[0003]為了克服現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明提供一種利用配置芯片實現(xiàn)啟動引導(dǎo)和數(shù)據(jù)的讀寫系統(tǒng)及方法,把用戶自定義數(shù)據(jù)組合到Pof或JiC文件中,通過下載器把包含了FPGA配置數(shù)據(jù)以及用戶自定義數(shù)據(jù)的Pof或Jic文件下載到外部存儲器中,從而實現(xiàn)FPGA配置數(shù)據(jù)與用戶自定義數(shù)據(jù)的一并固化,同時提供了一種FPGA加載后,從外部存儲器中讀取用戶自定義數(shù)據(jù)的方法。
[0004]其技術(shù)方案如下:
[0005]一種利用配置芯片實現(xiàn)啟動引導(dǎo)和數(shù)據(jù)的讀寫系統(tǒng),包括計算機、下載器、FPGA芯片、外部存儲器,
[0006]所述計算機用于組合自定義數(shù)據(jù)和FPGA的應(yīng)用程序,生成下載文件pof/jic ;
[0007]所述下載器用于連接計算機和FPGA,實現(xiàn)pof/jic文件的下載;
[0008]所述FPGA為可編程器件,輔助實現(xiàn)pof/jic文件到外部存儲器的傳輸、應(yīng)用程序的運行以及用戶數(shù)據(jù)的讀寫;
[0009]所述外部存儲器用于存儲包含應(yīng)用程序和用戶自定義數(shù)據(jù)的pof/jic文件,它可以是EPCS系列等閃存(flash)芯片。
[0010]一種利用配置芯片實現(xiàn)啟動引導(dǎo)和數(shù)據(jù)的讀寫方法,包括以下步驟:
[0011]組合文件下載到外部存儲器;配置數(shù)據(jù)加載到FPGA ;其中:
[0012]組合文件下載到外部存儲器包括以下步驟:
[0013]I)在計算機上使用QuartusII軟件生成應(yīng)用程序的Pof/jic文件;
[0014]2)計算Pof/jic文件中地址偏置;
[0015]3)查閱后綴為map的文件,
[0016]由Addrend+l+Offsetadto? Size flash-l+Offsetaddr計算 Pof/jic 文件中可利用空間地址范圍;其中Addrend為程序的結(jié)束地址,Offsetadd,為程序頭的偏移地址,SizeflashSS儲芯片的大小。如果可用空間足夠,可進行步驟4);否則組合失敗,更換大容量的flash芯片,再進行步驟I)
[0017]4)由W、matlab等其他計算機上的工具將用戶自定義數(shù)據(jù)寫入到可利用空間地址范圍內(nèi);
[0018]5)在計算機上,由G(x) = x15+xn+x3對組合后的Pof/jic文件數(shù)據(jù)進行校驗碼計算,并替換原校驗碼;
[0019]6)在計算機上,生成新的Pof/jic文件;
[0020]7)將組合后的Pof/jic文件數(shù)據(jù)下載到外部存儲器中;
[0021]8)下載結(jié)束;
[0022]配置數(shù)據(jù)加載到FPGA包括以下步驟:
[0023]I)系統(tǒng)上電;
[0024]2)bootloader加載FPGA配置數(shù)據(jù),啟動應(yīng)用程序;
[0025]3)由應(yīng)用程序讀寫用戶自定義數(shù)據(jù),并運行相關(guān)功能;
[0026]本發(fā)明的有益效果:
[0027]本發(fā)明,將FPGA的啟動代碼和用戶數(shù)據(jù)共同存放于一個flash芯片中,既可實現(xiàn)FPGA的正常bootloader過程,又可實現(xiàn)用戶數(shù)據(jù)的讀寫,節(jié)約了系統(tǒng)的硬件成本,同時有利于PCB尺寸的減小,為設(shè)備的小型化提供條件。
【附圖說明】
[0028]圖1為利用配置芯片實現(xiàn)啟動引導(dǎo)和數(shù)據(jù)的讀寫系統(tǒng)的原理圖;
[0029]圖2為Altera FPGA配置文件內(nèi)的數(shù)據(jù)組成結(jié)構(gòu)圖;
[0030]圖3為map文件內(nèi)的地址空間范圍信息圖;
[0031]圖4為組合文件下載到外部存儲器流程圖;
[0032]圖5為配置數(shù)據(jù)加載到FPGA流程圖;
[0033]圖6為Pof/jic文件頭;
[0034]圖7為Pof/jic文件填充用戶自定義數(shù)據(jù);
[0035]圖8為SignalTapII抓取增益校正系數(shù);
[0036]圖9為SignalTapII抓取偏移校正系數(shù)。
【具體實施方式】
[0037]下面結(jié)合附圖和【具體實施方式】對本發(fā)明的技術(shù)方案作進一步詳細(xì)地說明。
[0038]系統(tǒng)框圖如圖1所示。本系統(tǒng)框圖主要是由四部分組成:計算機、下載器、FPGA芯片、外部存儲器。系統(tǒng)主要實現(xiàn)兩個功能:1)將FPGA配置數(shù)據(jù)以及用戶自定義數(shù)據(jù)文件保存到計算機上,通過計算機和下載器將該數(shù)據(jù)由JTAG(Joint Test Act1n Group, JTAG)模式或AS(Active Serial,AS)模式下載到外部存儲器中。在AS模式下,該數(shù)據(jù)直接通過主動串行存儲器接口(Active Serial Memory Interface,ASMI)結(jié)構(gòu)送到外部存儲器中;在JTAG模式下,JTAG接口不能直接訪問外部存儲器,需通過FPGA內(nèi)的串行Flash加載IP (Serial Flash Loader Intellectual Property, SFL IP)核作為 JTAG 接口和 ASMI 接口橋梁,將數(shù)據(jù)送到外部存儲器中。2)系統(tǒng)上電后,用戶對外部存儲器進行讀、寫操作。用戶可以通過SFL共享的ASMI接口,將讀、寫操作指令通過ASMI接口發(fā)送到外部存儲器,外部存儲器根據(jù)指令,做出相應(yīng)的操作,從而實現(xiàn)用戶對外部存儲器的讀、寫操作。
[0039]圖1中各個模塊的用途概括如下:
[0040]計算機:用于組合自定義數(shù)據(jù)和FPGA的應(yīng)用程序,生成下載文件pof/jic ;
[0041]下載器:連接計算機和FPGA,實現(xiàn)pof/jic文件的下載;
[0042]FPGA:可編程器件,輔助實現(xiàn)pof/jic文件到外部存儲器的傳輸、應(yīng)用程序的運行以及用戶數(shù)據(jù)的讀寫。
[0043]外部存儲器:存儲包含應(yīng)用程序和用戶自定義數(shù)據(jù)的pof/jic文件,它可以是EPCS 等 flash 芯片。
[0044]原理介紹:
[0045]Pof與Jic文件是QuartusII軟件編譯生成的FPGA編程對象文件,文件內(nèi)的數(shù)據(jù)組成結(jié)構(gòu)如圖2所示:
[0046]可以看到Pof或Jic文件由四部分組成,第一部分是Pof/jic的文件頭,文件頭主要記錄的內(nèi)容包括:①文件類型標(biāo)識、②QuartusII版本號、③被配置的FPGA型號、④外部Flash的型號;第二部分記錄了 FPGA的配置數(shù)據(jù);第三部分為對剩余空間的填充數(shù)據(jù);第四部分是Pof/jic的文件尾,文件尾主要記錄了第二部分中FPGA配置數(shù)據(jù)的分頁狀況以及數(shù)據(jù)段的起始地址、數(shù)據(jù)長度以及對整個文件的校驗碼。
[0047]其中Pof/jic文件的文件頭與文件尾僅為QuartusII軟件所識別,并不參與到實際下載中,所以實際下載并固化到外部存儲器里面的數(shù)據(jù)僅為第二部分以及第三部分的內(nèi)容,第三部分填充數(shù)據(jù)的目的就是把實際內(nèi)容長度擴展成與所選的外部存儲器容量相匹配。因此可以把用戶自定義數(shù)據(jù)替換掉第三部分的數(shù)據(jù),這樣既不影響原有的FPGA配置數(shù)據(jù),又可以把用戶自定義數(shù)據(jù)作為固化內(nèi)容加入到Pof/jic文件當(dāng)中。最后修改文件尾部校驗碼,即可生成可以被QuartusII識別的合法Pof/jic文件。
[0048]為實現(xiàn)FPGA的bootloader功能,F(xiàn)PGA與外部存儲器相連接的管腳是特殊的管腳,包括讀寫時鐘、片選使能、數(shù)據(jù)輸出、數(shù)據(jù)輸入等,這些都不是普通的1/0 口,不能被FPGA內(nèi)部用戶編寫的模塊配置和調(diào)用。為實現(xiàn)用戶通過FPGA對外部存儲器中的數(shù)據(jù)進行讀寫等操作,可使用 Altera 提供的 “Serial Flash Loader megafunct1n IP core”,在 QuartusII 11.0,可通過 Tools->MegaWizard Plug-1n Manager->Next->Create a newcustom megafunct1n variat1n->Next->JTAG-accessible Extens1ns->Serial FlashLoader的操作,調(diào)出該IP核。。
[0049]Pof/jic與用戶自定義數(shù)據(jù)的組合技術(shù)的關(guān)鍵部分有三點:
[0050]①計算Pof/jic中有效載荷內(nèi)容所在地址到外部存儲空間地址的偏置。
[0051]②定位可利用的外部存儲空間的地址范圍。
[0052]③文件校驗碼的生成。
[0053]地址偏置計算
[0054]Pof/jic文件頭與FPGA配置數(shù)據(jù)部分交接處的數(shù)據(jù)具備一定的特征,而Pof/jic頭文件由于內(nèi)容的關(guān)系,是不會出現(xiàn)這樣特征的數(shù)據(jù),因此只需要從文件頭開始尋找這種特征的數(shù)據(jù),該特征數(shù)據(jù)所在地址就是地址映射的偏置,設(shè)該地址偏置為Offsetaddr,Pof/