張小虎 云 龍 江承財(cái) 馮超豪 王雪莉 王兵奇
(西安電子工程研究所 西安 710100)
目前的半導(dǎo)體存儲(chǔ)器可以分為兩大類:易失性存儲(chǔ)器和非易失性存儲(chǔ)器。易失性存儲(chǔ)器包括靜態(tài)隨機(jī)存取存儲(chǔ)器SRAM和動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器DRAM以及其它類型存儲(chǔ)器。RAM型存儲(chǔ)器的特點(diǎn)是易于使用,但它們共同的缺點(diǎn)就是都會(huì)在掉電的情況下丟失之前存儲(chǔ)的數(shù)據(jù)。EEPROM和FLASH都屬于非易失性存儲(chǔ)器,在掉電情況下之前在它們內(nèi)部存儲(chǔ)的數(shù)據(jù)都不會(huì)丟失。其中,FLASH存儲(chǔ)器可以被多次擦除并且多次重復(fù)編程,更因其容量大、數(shù)據(jù)寫入后的非易失性在各種工業(yè)產(chǎn)品中得到了最廣泛的應(yīng)用[4]。相對(duì)于其它類型的半導(dǎo)體存儲(chǔ)技術(shù)而言,FLASH存儲(chǔ)器具有成本低、密度大、掉電不丟失的特點(diǎn),在存儲(chǔ)器市場(chǎng)所占的比例越來(lái)越大[5]。在高速數(shù)據(jù)處理領(lǐng)域,利用FPGA實(shí)現(xiàn)FLASH存儲(chǔ)系統(tǒng)控制的工程應(yīng)用相當(dāng)廣泛[2]。與傳統(tǒng)的ROM和 EPROM相比,FLASH存儲(chǔ)器可以通過與之相連的微處理器在線編程和擦除,這一優(yōu)點(diǎn)使得FLASH存儲(chǔ)器十分適合嵌入式系統(tǒng)的設(shè)計(jì)和開發(fā)[1]。
在相控陣?yán)走_(dá)波束控制電路中,在對(duì)天線測(cè)試完成后需要對(duì)大量初始相位數(shù)據(jù)進(jìn)行存儲(chǔ)。在之前的工程應(yīng)用中,我們通常將這部分?jǐn)?shù)據(jù)存儲(chǔ)在雷達(dá)波束控制電路的主控芯片中,也就是FPGA中。上述方式雖然解決了初始相位數(shù)據(jù)存儲(chǔ)的問題,但還存在以下幾個(gè)方面的缺點(diǎn)。首先,在FPGA中所能存儲(chǔ)的數(shù)據(jù)量有限,較大數(shù)據(jù)量的存儲(chǔ)會(huì)消耗FPGA的大量資源。其次,由于每套天線測(cè)試初始相位數(shù)據(jù)都不可能一致,如果將其存儲(chǔ)在FPGA中會(huì)導(dǎo)致波束控制軟件不統(tǒng)一,從而使波束控制電路的軟硬件無(wú)法做到相互之間的互換。采用FLASH存儲(chǔ)器之后,可以實(shí)現(xiàn)將天線測(cè)試后所產(chǎn)生的大量初始相位數(shù)據(jù)存儲(chǔ)在外部獨(dú)立芯片中。這樣不僅提高了相控陣?yán)走_(dá)波束控制電路中主控芯片F(xiàn)PGA資源的利用率,同時(shí)還提高了相控陣?yán)走_(dá)波束控制電路的通用性和易用性。
JFM29GL256-E56是由上海復(fù)旦微公司研制的并行接口FLASH存儲(chǔ)器芯片,它擁有256Mbit的大容量存儲(chǔ)空間,重量只有1.85g。其工作電壓可以在3.0V~3.6V之間,典型訪問讀速度可達(dá)120ns,25mA典型讀電流,20mA典型擦除/編程電流,3μA典型靜態(tài)電流。其封裝采用CSOP56。JFM29GL256-E56的管腳分配如圖1所示。
圖1 JFM29GL256-E56的管腳分配
JFM29GL256-E56的存儲(chǔ)結(jié)構(gòu)如圖2所示。
圖2 JFM29GL256-E56的存儲(chǔ)結(jié)構(gòu)
靈活的區(qū)塊結(jié)構(gòu),該并行FLASH存儲(chǔ)器由256個(gè)64K字(128字節(jié))的均勻區(qū)塊組成。通過配置BYTE#管腳,該芯片可以提供16位或者8位雙向數(shù)據(jù)讀寫功能。其中:A(23:0)是該器件的地址選擇輸入信號(hào);DQ(15:0)是訪問該器件時(shí)的16bit雙向數(shù)據(jù)總線;CE#是片選使能信號(hào);WE#是寫使能信號(hào);OE#是輸出使能信號(hào);WP#是硬件寫保護(hù)信號(hào);RESET#是硬件復(fù)位信號(hào);BYTE#是字節(jié)/字模式選擇信號(hào);RY/BY#是該芯片準(zhǔn)備/忙狀態(tài)輸出信號(hào);VCC為電源輸入;VIO為IO電源;VSS為電源地。
JFM29GL256-E56與FPGA連接的硬件原理圖如圖3所示。
圖3 JFM29GL256-E56的硬件原理圖
WP#輸入為低電平時(shí)對(duì)內(nèi)部狀態(tài)機(jī)進(jìn)行異步復(fù)位,對(duì)全芯片寫保護(hù),保證WP#為低電平時(shí)芯片強(qiáng)行處于待機(jī)模式,不接受任何指令,只允許讀操作。硬件復(fù)位輸入管腳RESET#可復(fù)位芯片。Ready/Busy#輸出管腳RY/BY#監(jiān)測(cè)芯片上電、硬件復(fù)位、編程或者擦除操作是否結(jié)束。硬件RESET#管腳可以終止正在進(jìn)行的任何操作,并把內(nèi)部狀態(tài)機(jī)復(fù)位為讀陣列數(shù)據(jù)的狀態(tài),輸出禁止。RESET#管腳可以連接到FPGA的復(fù)位電路上,這樣FPGA復(fù)位也可以同時(shí)復(fù)位該芯片。
FLASH存儲(chǔ)器芯片擦除操作包含6個(gè)總線指令周期。這些指令調(diào)用內(nèi)嵌擦除算法,不需要FPGA在擦除之前進(jìn)行預(yù)編程。內(nèi)嵌擦除算法在執(zhí)行電擦除前,自動(dòng)預(yù)編程和檢驗(yàn)整個(gè)存儲(chǔ)器是否為全零數(shù)據(jù)。FLASH存儲(chǔ)器芯片擦除成功后,FLASH存儲(chǔ)器芯片的所有位置均為0xFFFFh。FLASH存儲(chǔ)器芯片擦除指令序列以寫入兩個(gè)解鎖指令周期開始,接著是一個(gè)建立指令,然后是兩個(gè)額外的寫解鎖指令周期,最后是FLASH存儲(chǔ)器芯片擦除命令來(lái)啟動(dòng)內(nèi)嵌擦除算法。當(dāng)內(nèi)嵌擦除算法結(jié)束以后,芯片返回讀模式,地址不再被鎖存。FLASH存儲(chǔ)器芯片的擦除指令時(shí)序如圖4所示。
圖4 FLASH存儲(chǔ)器芯片擦除指令時(shí)序圖
FLASH存儲(chǔ)器芯片的擦除指令分為6條,分別對(duì)應(yīng)6組數(shù)據(jù)。第一條指令:地址為0x000555,對(duì)應(yīng)總線數(shù)據(jù)為0x00AA;第二條指令:地址為0x0002AA,對(duì)應(yīng)總線數(shù)據(jù)為0x0055;第三條指令:地址為0x000555,對(duì)應(yīng)總線數(shù)據(jù)為0x0080;第四條指令:地址為0x000555,對(duì)應(yīng)總線數(shù)據(jù)為0x00AA;第五條指令:地址為0x0002AA,對(duì)應(yīng)總線數(shù)據(jù)為0x0055;第六條指令:地址為0x000555,對(duì)應(yīng)總線數(shù)據(jù)為0x0010。
在FLASH存儲(chǔ)器芯片擦除過程中,下面這幾個(gè)時(shí)序信號(hào)需要特別注意。CE#信號(hào)在這期間需要始終保持低電平,OE#、WP#、RESET#需要保持高電平。WE#信號(hào)需要配合擦除指令的地址總線和數(shù)據(jù)總線產(chǎn)生周期性的負(fù)脈沖。RY/BY#信號(hào)是FLASH存儲(chǔ)器芯片的狀態(tài)監(jiān)測(cè)信號(hào),當(dāng)FLASH存儲(chǔ)器芯片進(jìn)入擦除過程后,該信號(hào)就會(huì)被下拉為低電平,當(dāng)FLASH存儲(chǔ)器芯片的整個(gè)擦除過程完成后,該信號(hào)會(huì)被釋放為高電平。
在寫操作期間,當(dāng)提供地址、命令和數(shù)據(jù)時(shí),FPGA必須驅(qū)動(dòng)CE#和WE#為低電平,OE#為高電平。地址在WE#下降沿或CE#下降沿的后到者被鎖存,數(shù)據(jù)在WE#上升沿或CE#上升沿的前到者被鎖存。單字編程模式是一種FLASH存儲(chǔ)器芯片編程方法。在此模式下,使用4個(gè)寫命令周期對(duì)各個(gè)地址進(jìn)行編程。寫編程操作是一個(gè)4個(gè)總線指令周期的操作。編程命令序列的開頭是寫入兩個(gè)寫解鎖指令周期(Unlock write cycles),跟著是一個(gè)編程建立命令(program set-up command),然后寫入編程地址和數(shù)據(jù)來(lái)啟動(dòng)內(nèi)嵌編程算法。當(dāng)內(nèi)嵌編程算法執(zhí)行結(jié)束后,FLASH存儲(chǔ)器芯片返回讀模式,地址不再被鎖存。FPGA可以根據(jù)DQ7和DQ6來(lái)判斷寫編程操作的狀態(tài),也可以用RY/BY#來(lái)判斷寫編程操作的狀態(tài)。在沒有擦除操作的情況下,禁止對(duì)同一地址多次進(jìn)行寫編程。原來(lái)為“0”的位不能通過寫編程操作改為“1”。如果這樣做,FLASH存儲(chǔ)器芯片可能會(huì)將DQ5置為1,或者引起DQ7和DQ6狀態(tài)位指示操作成功,但是實(shí)際該數(shù)據(jù)位還為“0”。只有FLASH存儲(chǔ)器芯片擦除操作可以把數(shù)據(jù)位由“0”變?yōu)椤?”[3]。FLASH存儲(chǔ)器芯片的寫編程指令時(shí)序如圖5所示。
圖5 FLASH存儲(chǔ)器芯片寫編程指令時(shí)序圖
FLASH存儲(chǔ)器芯片的寫編程指令分為4條,分別對(duì)應(yīng)4組數(shù)據(jù)。第一條指令:地址為0x000555,對(duì)應(yīng)總線數(shù)據(jù)為0x00AA;第二條指令:地址為0x0002AA,對(duì)應(yīng)總線數(shù)據(jù)為0x0055;第三條指令:地址為0x000555,對(duì)應(yīng)總線數(shù)據(jù)為0x00A0;第四條指令:實(shí)際寫入的字編程地址為PA,對(duì)應(yīng)寫入的數(shù)據(jù)為PD。FLASH存儲(chǔ)器芯片連續(xù)24個(gè)字編程指令時(shí)序如圖6所示。
圖6 FLASH存儲(chǔ)器芯片連續(xù)24個(gè)字編程指令時(shí)序圖
在FLASH存儲(chǔ)器芯片的字編程過程中,也需要注意下面這幾個(gè)時(shí)序信號(hào)。CE#信號(hào)在這期間需要始終保持低電平,OE#、RESET#需要保持高電平。WP#信號(hào)需要在整個(gè)字編程周期的最開始階段給定一個(gè)負(fù)脈沖然后上拉為高電平。WE#信號(hào)需要配合字編程指令的地址總線和數(shù)據(jù)總線產(chǎn)生周期性的負(fù)脈沖。RY/BY#信號(hào)是FLASH存儲(chǔ)器芯片的狀態(tài)監(jiān)測(cè)信號(hào),當(dāng)FLASH存儲(chǔ)器芯片每次進(jìn)入字編程周期后,該信號(hào)就會(huì)被下拉為低電平,當(dāng)FLASH存儲(chǔ)器芯片在該周期的字編程操作過程完成后,該信號(hào)被釋放為高電平。當(dāng)新的字編程周期開始后,該信號(hào)被下拉為低電平,如此反復(fù)直至所有字編程周期操作結(jié)束后該信號(hào)被上拉為高電平。
FLASH存儲(chǔ)器芯片的讀操作沒有專門對(duì)應(yīng)的指令。在滿足讀時(shí)序的條件下,給定FLASH存儲(chǔ)器芯片的讀地址,在數(shù)據(jù)總線上就可以讀出存儲(chǔ)在FLASH芯片中該地址所對(duì)應(yīng)的數(shù)據(jù)。FLASH存儲(chǔ)器芯片單獨(dú)讀操作時(shí)序如圖7所示。
圖7 FLASH存儲(chǔ)器芯片單獨(dú)讀操作時(shí)序圖
讀取FLASH存儲(chǔ)器芯片中的數(shù)據(jù),FPGA需要將FLASH存儲(chǔ)器芯片的CE#信號(hào)和OE#信號(hào)置為低電平,CE#信號(hào)是FLASH存儲(chǔ)器芯片的電源控制和片選信號(hào),OE#信號(hào)是FLASH存儲(chǔ)器芯片輸出控制和數(shù)據(jù)到輸出管腳的開關(guān)信號(hào)。WE#信號(hào)應(yīng)保持為高電平。在FLASH存儲(chǔ)器芯片上電或硬件復(fù)位后,內(nèi)部狀態(tài)機(jī)被設(shè)置為讀數(shù)據(jù)狀態(tài)。在這種模式下不需要專門的命令來(lái)讀數(shù)據(jù),只要在讀周期發(fā)送有效的地址A23~A0,則可以在地址穩(wěn)定后將數(shù)據(jù)驅(qū)動(dòng)到DQ15~DQ0上。FLASH存儲(chǔ)器芯片連續(xù)24個(gè)讀操作時(shí)序如圖8所示。
圖8 FLASH存儲(chǔ)器芯片連續(xù)24個(gè)讀操作時(shí)序圖
在這里,為了保證讀取數(shù)據(jù)的可靠性,FPGA產(chǎn)生了一個(gè)比OE#信號(hào)更窄的脈沖信號(hào)T_OE#用來(lái)對(duì)數(shù)據(jù)總線上的讀出數(shù)據(jù)進(jìn)行實(shí)時(shí)鎖存。
為了解決相控陣?yán)走_(dá)波束控制電路中大量初始相位數(shù)據(jù)存儲(chǔ)的問題,本文提出用外部獨(dú)立的并行FLASH存儲(chǔ)芯片與FPGA進(jìn)行交互解決該問題。文中詳細(xì)分析了JFM29GL256-E56這種并行FLASH存儲(chǔ)器芯片與FPGA交互的三種方式,包括擦除操作、寫編程操作、讀操作以及具體的實(shí)現(xiàn)。采用這種方式不僅提高了相控陣?yán)走_(dá)波束控制電路中主控芯片F(xiàn)PGA資源的利用率,同時(shí)還提高了相控陣?yán)走_(dá)波束控制電路的通用性和易用性。