国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

FPGA的在應(yīng)用編程技術(shù)研究

發(fā)布時(shí)間:2010-4-24 21:23    發(fā)布者:李寬
關(guān)鍵詞: FPGA , 技術(shù) , 研究 , 應(yīng)用
引言

在FPG人中實(shí)現(xiàn)在應(yīng)用編程(In Application Pro—gramming,IAP)有兩種方法:一種是,在電路板上加外電路。例如用MCUCPLD來接收配置數(shù)據(jù),在被動(dòng)串行(PS)模式下由外電路編程FPGA或是編程Flash器件(包括EPCS和Flash),然后控制FPGA的配置復(fù)位引腳來復(fù)位整個(gè)FPGA,最后FPGA采用主串方式進(jìn)行自我配置。另一種是,通過FPGA中的Nios CPU或是專用IP來接收編程數(shù)據(jù),并編程Flash芯片,然后通過外部簡單電路將FPGA復(fù)位啟動(dòng),以主動(dòng)串行(AS)模式進(jìn)行配置。

為了減小電路板面積,節(jié)約成本,提高可靠性,本設(shè)計(jì)采用第二種方法。本設(shè)計(jì)的要求是:硬件電路須配置為主動(dòng)串行模式,即選擇MSEL[1:O]為l:O;具備EPCS,或同時(shí)具備EPCS和Flash;具有與PC機(jī)通信的功能。FPGA接收更新數(shù)據(jù),并將其存入Flash器件,然后復(fù)位Nios或FPGA 對軟硬件進(jìn)行更新。

1 系統(tǒng)的硬件設(shè)計(jì)

統(tǒng)主要由Cyclone FPGA、EPCS、Flash和串行通信等組成,硬件結(jié)構(gòu)如圖1所示。



EPCS采用Altera公司的EPCS4,容量達(dá)到4 Mb,引腳較少,成本低,支持3.3 V低電壓操作。Flash芯片采用AMD公司的Am29LV640MH/L,支持3.O V低電壓操作,具有低功耗特性,芯片容量為64 Mb,滿足大容量數(shù)據(jù)的存儲;并口操作,與Cyclone FPGA完全兼容,而且在SOPC中有與之對應(yīng)的CFI_FLASH核,便于硬件電路的設(shè)計(jì)。

2 工作原理

2.1 幾個(gè)概念

FPGA配置數(shù)據(jù):是sof文件,將sof文件編程到Flash中,上電后FPGA可以從Flash中配置。sof文件是其他配置文件的基礎(chǔ),其他文件均可由sof文件轉(zhuǎn)換得到。

軟件數(shù)據(jù):通過NiosII IDE創(chuàng)建elf文件,將用戶程序編程到Flash中,允許復(fù)位后從F1ash中加載軟件程序,從而啟動(dòng)NiosII CPU。

2.2 編程文件

編程文件為Flash格式的文件,即S—reeorld(簡稱“SREC”)格式。SREC格式是Motorola公司制定的一種燒寫格式標(biāo)準(zhǔn)。SREC 格式文件是由一組ASCII碼組成,所有的十六進(jìn)制數(shù)據(jù)均為大寫形式,結(jié)構(gòu)說明如下:

    ①起始代碼。以S作為一個(gè)數(shù)據(jù)行的開始。
    ②記錄類型。1個(gè)十進(jìn)制數(shù)字(O~9),定義數(shù)據(jù)域的類型。
    ③字節(jié)數(shù)。1個(gè)字節(jié),定義字節(jié)數(shù)之后除地址字節(jié)、校驗(yàn)字節(jié)之外其他字節(jié)的個(gè)數(shù)。
    ④地址。由4(或6、8)個(gè)字節(jié)組成,定義了第一個(gè)數(shù)據(jù)字節(jié)存儲的位置。
    ⑤數(shù)據(jù)字節(jié)。由n個(gè)字節(jié)組成,數(shù)據(jù)字節(jié)為實(shí)際有效的編程信息。
    ⑥校驗(yàn)字節(jié)。1個(gè)字節(jié),作校驗(yàn)使用,所有十六進(jìn)制字節(jié)相加后取8位,為0xFF。

2.3 AS配置模式

FPGA 的配置數(shù)據(jù)存儲在內(nèi)部SRAM單元中。由于SRAM掉電后數(shù)據(jù)會(huì)丟失,因此每次上電時(shí)必須重新將配置數(shù)據(jù)寫入SRAM中。這個(gè)過程稱為“FPGA的配置”。由此可見,F(xiàn)PGA的配置信息是存儲在FPGA內(nèi)部RAM當(dāng)中的。可知在主動(dòng)串行模式下,F(xiàn)PGA將配置數(shù)據(jù)從EPGS中讀取,然后存入內(nèi)部RAM 中。

AS配置模式支持StratixII和Cyclone系列的FPGA,通過配置MSEL[1:O]為1:0,選擇主動(dòng)配置模式(除JTAG模式不受 MSEL控制外,其他配置方式均由MSEL決定)。AS配置模式使用串行配置器件(EPCS1/EPCS4/EPCSl6/EPCS64)。在AS配置過程中,StratixlI和Cy—clone系列的FPGA是主設(shè)備,串行配置器件為從設(shè)備。如圖2所示,在AS配置模式下,F(xiàn)PGA通過DATA0接收配置數(shù)據(jù),配置數(shù)據(jù)和DCLK是同步的。每個(gè)時(shí)鐘周期傳輸1位配置數(shù)據(jù)。通過控制nCONFIG、nSTATUS、CONF_DONE來表示配置過程。串行配置芯片在DCLK上升沿時(shí)鎖存輸入信號和控制信號,在下降沿時(shí)輸出配置數(shù)據(jù)。Cyclone芯片在DCLK下降沿時(shí)輸出控制信號,并鎖存配置數(shù)據(jù)。



3 工作流程

3.1 硬件配置的更新

如圖3所示,F(xiàn)PGA的配置過程分為:復(fù)位、配置和初始化。



(1)復(fù)位FPGA

上電復(fù)位:在用戶模式下,當(dāng)nCONFIG引腳持續(xù)低電平40μs時(shí),F(xiàn)PGA將進(jìn)入復(fù)位狀態(tài)。復(fù)位時(shí),F(xiàn)P—GA采樣MSEL引腳的電平值,以確定采用的配置方式;同時(shí),nSTATUS和CONF_DONE引腳由FPGA置為低電平,所有I/0引腳為三態(tài)且FPGA內(nèi)部配置寄存器被清空。

FPGA復(fù)位的2種方法:

    ①外加RC復(fù)位電路或者復(fù)位芯片,自動(dòng)產(chǎn)生上電復(fù)位脈沖。
    ②參考芯片手冊。如果芯片提供了上電復(fù)位脈沖(一般是全局復(fù)位信號),則使用它作為復(fù)位信號;若沒有提供,則查找芯片是否給出了寄存單元上電默認(rèn)值(一般是O),利用該特性復(fù)位或者產(chǎn)生復(fù)位脈沖。

(2)配置FPGA

復(fù)位后,nCONFIG被外部上拉電阻拉高,進(jìn)入配置階段。此時(shí),nSTATUS被FPGA釋放并由外部上拉電阻拉為高電平后進(jìn)入配置狀態(tài)。 Cyclone芯片通過將nCSO輸出的信號置低來使能串行配置芯片,nCS0引腳連接配置芯片的片選段(nCS),用串行時(shí)鐘(DCLK)和串行數(shù)據(jù)輸出(ASDO)引腳來發(fā)送操作指令,及/或?qū)⒌刂沸盘栕x到串行配置芯片中。接著配置芯片將數(shù)據(jù)送到串行數(shù)據(jù)輸出(DATA)引腳,DATA引腳連接 Cyclone芯片的DATA0輸入腳。配置數(shù)據(jù)在DCLK時(shí)鐘的上升沿載入FPGA。當(dāng)接收完所有的配置位后(CRC校驗(yàn)無誤),Cyclone芯片懸空CONF_DONE引腳,該引腳由外部10 kΩ電阻拉高;同時(shí),停止驅(qū)動(dòng)DCLK信號。只有當(dāng)CONF_DONE到達(dá)一定的邏輯高電平后,初始化才開始。

(3)初始化階段

在Cyclone芯片中,初始時(shí)鐘源是Cyclone芯片的lOMHz(典型的)內(nèi)部晶振,或者是可供選擇的CLKUSR引腳。內(nèi)部晶振是默認(rèn)的初始化時(shí)鐘源。如果用了內(nèi)部時(shí)鐘,則Cyclone芯片為正確的初始化提供足夠的時(shí)鐘。使用內(nèi)部時(shí)鐘的好處在于,初始化時(shí)不需要從外部發(fā)送其他的時(shí)鐘到 CLKUSR引腳,而且可以把CLKUSR引腳當(dāng)作I/O引腳。

(4)用戶模式

初始化結(jié)束后,F(xiàn)PGA進(jìn)入用戶模式。在用戶模式下,用戶I/O引腳不再有弱上拉電阻,而是執(zhí)行設(shè)計(jì)中分配的功能。Cyclone芯片可以通過將 nCONFIG拉低而開始重新配置。nCONFIG低信號應(yīng)該至少持續(xù)40μs。當(dāng)nCONFIG被拉低時(shí),Cyclone芯片被復(fù)位并進(jìn)入復(fù)位階段。 Cyclone芯片也會(huì)把nSTATUS和CONF_DONE拉低,所有的I/O引腳處于三態(tài)。一旦nCONFIG回到邏輯高電平,Cyclone芯片將釋放nSTATUS,重新開始配置。

(5)配置時(shí)出現(xiàn)的錯(cuò)誤

如果在配置時(shí)出現(xiàn)錯(cuò)誤,則Cyclone芯片將nSTA—TUS信號置低來表明一個(gè)數(shù)據(jù)幀錯(cuò)誤,CONF_DONE信號為低。如果在Quartus軟件的 Device&Pin Options窗口的General項(xiàng)中,選中Auto—restart configuration aftererror選項(xiàng),則Cyclone芯片通過激活nCSO來實(shí)現(xiàn)復(fù)位,在復(fù)位失效時(shí)間(40μs)后釋放nSTATUS,并再次嘗試配置。如果該選項(xiàng)未被選中,則外部系統(tǒng)必須監(jiān)視nSTA—TUS信號以防出錯(cuò),然后將nCONFIG信號拉低并持續(xù)至少40μs來重新配置。

計(jì)算機(jī)與目標(biāo)板上的Nios程序建立連接,通過通信接口將Flash文件傳輸給FPGA;Nios程序判斷出傳輸文件的針對目標(biāo)后,將編程數(shù)據(jù)存放在 EPCS或Flash中。接收到的數(shù)據(jù)首先暫存入SDRAM,而不是直接對EPCS和Flash進(jìn)行操作。這樣做的好處是,一旦傳輸失敗或中止,不會(huì)破壞原有EPCS和Flash中的數(shù)據(jù)。

通過sof2Flash命令來生成Flash文件時(shí),可以通過SOPC Builder打開NioslI command shell,使用“sof2 Flash—epcs-input=<輸入文件名.sof>一output=<輸出文件名.Flash>”命令,生成的 Flash文件存在于工程目錄下。也可以將sof文件復(fù)制到“〈quartus安裝目錄〉\kits\nios2_60\examples”下,直接打開 NiosII command shell,使用“sof2Flash-epcs—input=<輸入文件名.sof>一output=<輸出文件名.Flash& gt;”,生成的Flash文件存在于“〈quartus安裝目錄〉\kits\nios2_60\examples”下。

3.2 軟件程序的更新

如前所述,軟件程序既可以存放在Flash中,也可以存放在EPCS中。生成軟件Flash文件的最簡單的方式是,在NiosII IDE環(huán)境下對系統(tǒng)進(jìn)行編譯,生成的Flash文件存在于“<目標(biāo)工程>\software\debug\<軟件工程>\Debug\obj\”目錄下。

Nios程序可以存放在Flash中,在SDRAM或On—chip RAM(以下統(tǒng)稱“RAM”)中運(yùn)行。這種情況需要有一個(gè)專門的Bootloader,該文件存在于“ quartus安裝目錄>\kits\nios2_60\components\altera_nios2”目錄下,名稱為 “boot_loader_cfi.srec”。它把存放在Flash中的各個(gè)程序段搬到程序執(zhí)行時(shí)各個(gè)段真正的位置。

如圖4所示,Bootloader代碼位于Flash的低地址處,NiosII就被邏輯中的復(fù)位電路復(fù)位,從reset地址處開始執(zhí)行代碼。如果 reset地址設(shè)置在Flash中,那么復(fù)位后首先運(yùn)行Flash前面的Bootloader代碼,由Bootloader代碼將后面的用戶程序引導(dǎo)到指定位置。執(zhí)行elf2Flash應(yīng)用程序在elf文件前會(huì)插入一個(gè)引導(dǎo)復(fù)制(Boot—copier)程序,前提是,elf將被鏈接到RAM中運(yùn)行。



Bootloader的工作流程如圖5所示。



NiosII C程序在運(yùn)行之前需要做一些初始化工作。如果程序直接從Flash中運(yùn)行,則Crt0.S是最先執(zhí)行的代碼;如果程序不是直接從Flash中運(yùn)行,則 Crt0.S是執(zhí)行完Bootloader后最開始執(zhí)行的代碼。

運(yùn)行完Bootloader后仍然要執(zhí)行CrtO.s,但此時(shí)Crt0.s的流程和程序在Flash中直接運(yùn)行的情況有一些區(qū)別:它沒有初始化指令 Cache,也不會(huì)企圖去裝載別的段,這些步驟已經(jīng)在Boot—loader中完成。程序映像已經(jīng)包含這些段,在搬移程序映像的同時(shí)也裝載了相應(yīng)的段 (.rodata段,.rwdata段和.exceptions段)。程序映像中不包含.bss段和棧,所以仍然需要清.bss段,以及設(shè)置棧指針sp和全局指針gp。Bootloader沒有讀寫存儲器數(shù)據(jù),因此沒有初始化數(shù)據(jù)Cache,所以Crt0.S仍然要初始化數(shù)據(jù)Cache。如圖6所示,當(dāng) Bootloader讀取到L時(shí),L=0表示前面所有的程序記錄已經(jīng)處理完畢,這是最后的程序記錄,所以就直接跳到地址A的地方執(zhí)行。顯然A必須是程序的入口地址。如果L=Oxffffffff(即一1),那么就忽略A并停機(jī),這樣,即使是一個(gè)只有FPGA配置數(shù)據(jù)而沒有程序的EPCS也是安全的。當(dāng)一個(gè) EPCS只有配置數(shù)據(jù)而沒有程序時(shí),sof2Flash會(huì)在配置數(shù)據(jù)的末尾增加4個(gè)字節(jié)的Oxff,使Bootloader不會(huì)有誤動(dòng)作。 Bootloader的工作流程與Flash中相同,如圖5所示。



4 軟件編程

Altera公司提供給客戶兩種類型的函數(shù):SimpleFlash Access(簡單的Flash訪問),以及Fine—GrainedFlash Access(細(xì)粒度Flash訪問)。本文使用Fine—Grained Flash Access函數(shù),雖然比Simple Flash Access復(fù)雜一些,但可以避免通常的跨塊擦除問題。因?yàn)镕lash是按照塊(Block)組織起來的,通常一次擦除一整個(gè)塊。如果寫Flash的地址與Flash塊的組織結(jié)構(gòu)不吻合,比如跨越了Flash塊的邊緣,那么可能會(huì)擦除掉其余的數(shù)據(jù)。在使用Flash的讀寫函數(shù)時(shí),頭文件中要包含 “sys/alt_Flash.h”和“sys/alt_Flash_dev.h”,這兩個(gè)頭文件提供了訪問Flash器件的驅(qū)動(dòng)接口。

使用之前要打開Flash。打開Flash,就像C程序打開硬盤中的數(shù)據(jù)文件一樣。這里使用alt_Flash_open_dev()打開Flash,它返回一個(gè)句柄。例如:



其中,fd是alt_Flash_open_dev()返回的句柄;offset是相對Flash基地址的偏移量,是讀操作中要讀出數(shù)據(jù)第一個(gè)字節(jié)的地址;length是本次操作的數(shù)據(jù)長度,單位是字節(jié)。當(dāng)返回值為時(shí),表示讀操作成功。



其中,fd是a1t_Flash_open_dev()返回的句柄;offset是相對Flash基地址的偏移量,是寫操作中要寫入的數(shù)據(jù)第一個(gè)字節(jié)的地址;length是本次操作的數(shù)據(jù)長度,單位是字節(jié)。當(dāng)返回值為 O時(shí),表示寫操作成功。

使用完后別忘記關(guān)閉該Flash,就像讀寫完硬盤中的數(shù)據(jù)文件后要關(guān)閉一樣。其原型如下:

void alt_Flash_close_dev(alt_Flash_fd*fd);

其中,fd是alt_Flash_open_dev()返回的句柄。

編者注:Flash器件讀寫程序略。

結(jié)語

目前,在FPGA的開發(fā)過程中,每次進(jìn)行程序的調(diào)試和更新時(shí)都需要將產(chǎn)品與計(jì)算機(jī)直連,進(jìn)行在線操作,這樣就限制了程序調(diào)試和更新的空間范圍。而基于 FPGA的在應(yīng)用編程技術(shù)就是為了打破這種限制而設(shè)計(jì)的。在應(yīng)用編程技術(shù)對硬件要求極低,只要滿足FPGA是Cy—clone系列,具有Flash器件,具有上下位機(jī)的通信能力,無需增加太多的硬件資源,都可以實(shí)現(xiàn)在應(yīng)用編程。如果產(chǎn)品具有網(wǎng)絡(luò)功能或無線功能,那么在惡劣的工業(yè)現(xiàn)場和野外可以免除到現(xiàn)場反復(fù)拆卸、調(diào)試的麻煩。對于保密產(chǎn)品,該項(xiàng)技術(shù)可以保護(hù)知識產(chǎn)權(quán),通過網(wǎng)絡(luò)更新產(chǎn)品的軟硬件,增加了更新過程中被破解的難度。

參考文獻(xiàn)

   1. 徐光輝.程東旭.黃如 基于FPGA的嵌入式開發(fā)與應(yīng)用 2006
   2. 李蘭英 NiosII 嵌入式軟核 SPOC設(shè)計(jì)原理及應(yīng)用 2006
   3. 彭澄廉.周博.邱衛(wèi)東 基于NIOS的SOPC設(shè)計(jì)與實(shí)踐 2004
   4. Altera Cyclone datasheet 2008

作者:中國海洋大學(xué) 綦聲波  馬秀明
來源:單片機(jī)與嵌入式系統(tǒng)應(yīng)用 2009 (1)
本文地址:http://www.qingdxww.cn/thread-10776-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
redsunshine 發(fā)表于 2010-6-11 19:28:56
是好文章
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • Cortex-M4外設(shè) —— TC&TCC結(jié)合事件系統(tǒng)&DMA優(yōu)化任務(wù)培訓(xùn)教程
  • 更佳設(shè)計(jì)的解決方案——Microchip模擬開發(fā)生態(tài)系統(tǒng)
  • 我們是Microchip
  • 你仿真過嗎?使用免費(fèi)的MPLAB Mindi模擬仿真器降低設(shè)計(jì)風(fēng)險(xiǎn)
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)在線工具

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 快看天堂在线免费 | 国产精品久久久久免费视频 | 欧洲不卡一卡2卡三卡4卡网站 | 韩国理论午夜 | 色噜噜色噜噜天天拍一拍 | 向日葵app在线观看 向日葵app看片视频在线观看 | 国产精品成人va在线观看 | 在线看日本 | 日韩久久精品一区二区三区 | 恐怖片在线观看高清 | 亚洲欧美在线观看播放 | 四虎播播 | 国产女人久久精品 | 亚洲成人一级片 | 日本免费不卡视频一区二区三区 | 美女视频黄的免费视频网页 | 善良朋友的妻子在线观看 | 亚洲欧美日韩在线线精品 | 99热热热 | 亚洲一区欧美一区 | 婷婷免费视频 | 欧美一区二区在线播放 | 欧美日韩视频综合一区无弹窗 | 欧美激情一区二区三区不卡 | 久久国产精品一区二区三区 | 成人黄色一级视频 | 国产99er66在线视频 | 亚洲欧美一区二区三区图片 | 亚洲国产欧美日韩一区二区三区 | 999精品| 天天操天天谢 | 国产高清网站 | 日韩视频一区二区在线观看 | 国产免费观看网站黄页 | 亚洲国产精品一区二区三区久久 | 日本www色视频成人免费免费 | 久久一本热 | 青青操精品 | 欧美一区二区免费 | 99视频免费看| 性xxx中文视频|