張小虎 云 龍 江承財 馮超豪 王雪莉 王兵奇
(西安電子工程研究所 西安 710100)
目前的半導體存儲器可以分為兩大類:易失性存儲器和非易失性存儲器。易失性存儲器包括靜態隨機存取存儲器SRAM和動態隨機存取存儲器DRAM以及其它類型存儲器。RAM型存儲器的特點是易于使用,但它們共同的缺點就是都會在掉電的情況下丟失之前存儲的數據。EEPROM和FLASH都屬于非易失性存儲器,在掉電情況下之前在它們內部存儲的數據都不會丟失。其中,FLASH存儲器可以被多次擦除并且多次重復編程,更因其容量大、數據寫入后的非易失性在各種工業產品中得到了最廣泛的應用[4]。相對于其它類型的半導體存儲技術而言,FLASH存儲器具有成本低、密度大、掉電不丟失的特點,在存儲器市場所占的比例越來越大[5]。在高速數據處理領域,利用FPGA實現FLASH存儲系統控制的工程應用相當廣泛[2]。與傳統的ROM和 EPROM相比,FLASH存儲器可以通過與之相連的微處理器在線編程和擦除,這一優點使得FLASH存儲器十分適合嵌入式系統的設計和開發[1]。
在相控陣雷達波束控制電路中,在對天線測試完成后需要對大量初始相位數據進行存儲。在之前的工程應用中,我們通常將這部分數據存儲在雷達波束控制電路的主控芯片中,也就是FPGA中。上述方式雖然解決了初始相位數據存儲的問題,但還存在以下幾個方面的缺點。首先,在FPGA中所能存儲的數據量有限,較大數據量的存儲會消耗FPGA的大量資源。其次,由于每套天線測試初始相位數據都不可能一致,如果將其存儲在FPGA中會導致波束控制軟件不統一,從而使波束控制電路的軟硬件無法做到相互之間的互換。采用FLASH存儲器之后,可以實現將天線測試后所產生的大量初始相位數據存儲在外部獨立芯片中。這樣不僅提高了相控陣雷達波束控制電路中主控芯片FPGA資源的利用率,同時還提高了相控陣雷達波束控制電路的通用性和易用性。
JFM29GL256-E56是由上海復旦微公司研制的并行接口FLASH存儲器芯片,它擁有256Mbit的大容量存儲空間,重量只有1.85g。其工作電壓可以在3.0V~3.6V之間,典型訪問讀速度可達120ns,25mA典型讀電流,20mA典型擦除/編程電流,3μA典型靜態電流。其封裝采用CSOP56。JFM29GL256-E56的管腳分配如圖1所示。

圖1 JFM29GL256-E56的管腳分配
JFM29GL256-E56的存儲結構如圖2所示。

圖2 JFM29GL256-E56的存儲結構
靈活的區塊結構,該并行FLASH存儲器由256個64K字(128字節)的均勻區塊組成。通過配置BYTE#管腳,該芯片可以提供16位或者8位雙向數據讀寫功能。其中:A(23:0)是該器件的地址選擇輸入信號;DQ(15:0)是訪問該器件時的16bit雙向數據總線;CE#是片選使能信號;WE#是寫使能信號;OE#是輸出使能信號;WP#是硬件寫保護信號;RESET#是硬件復位信號;BYTE#是字節/字模式選擇信號;RY/BY#是該芯片準備/忙狀態輸出信號;VCC為電源輸入;VIO為IO電源;VSS為電源地。
JFM29GL256-E56與FPGA連接的硬件原理圖如圖3所示。

圖3 JFM29GL256-E56的硬件原理圖
WP#輸入為低電平時對內部狀態機進行異步復位,對全芯片寫保護,保證WP#為低電平時芯片強行處于待機模式,不接受任何指令,只允許讀操作。硬件復位輸入管腳RESET#可復位芯片。Ready/Busy#輸出管腳RY/BY#監測芯片上電、硬件復位、編程或者擦除操作是否結束。硬件RESET#管腳可以終止正在進行的任何操作,并把內部狀態機復位為讀陣列數據的狀態,輸出禁止。RESET#管腳可以連接到FPGA的復位電路上,這樣FPGA復位也可以同時復位該芯片。
FLASH存儲器芯片擦除操作包含6個總線指令周期。這些指令調用內嵌擦除算法,不需要FPGA在擦除之前進行預編程。內嵌擦除算法在執行電擦除前,自動預編程和檢驗整個存儲器是否為全零數據。FLASH存儲器芯片擦除成功后,FLASH存儲器芯片的所有位置均為0xFFFFh。FLASH存儲器芯片擦除指令序列以寫入兩個解鎖指令周期開始,接著是一個建立指令,然后是兩個額外的寫解鎖指令周期,最后是FLASH存儲器芯片擦除命令來啟動內嵌擦除算法。當內嵌擦除算法結束以后,芯片返回讀模式,地址不再被鎖存。FLASH存儲器芯片的擦除指令時序如圖4所示。

圖4 FLASH存儲器芯片擦除指令時序圖
FLASH存儲器芯片的擦除指令分為6條,分別對應6組數據。第一條指令:地址為0x000555,對應總線數據為0x00AA;第二條指令:地址為0x0002AA,對應總線數據為0x0055;第三條指令:地址為0x000555,對應總線數據為0x0080;第四條指令:地址為0x000555,對應總線數據為0x00AA;第五條指令:地址為0x0002AA,對應總線數據為0x0055;第六條指令:地址為0x000555,對應總線數據為0x0010。
在FLASH存儲器芯片擦除過程中,下面這幾個時序信號需要特別注意。CE#信號在這期間需要始終保持低電平,OE#、WP#、RESET#需要保持高電平。WE#信號需要配合擦除指令的地址總線和數據總線產生周期性的負脈沖。RY/BY#信號是FLASH存儲器芯片的狀態監測信號,當FLASH存儲器芯片進入擦除過程后,該信號就會被下拉為低電平,當FLASH存儲器芯片的整個擦除過程完成后,該信號會被釋放為高電平。
在寫操作期間,當提供地址、命令和數據時,FPGA必須驅動CE#和WE#為低電平,OE#為高電平。地址在WE#下降沿或CE#下降沿的后到者被鎖存,數據在WE#上升沿或CE#上升沿的前到者被鎖存。單字編程模式是一種FLASH存儲器芯片編程方法。在此模式下,使用4個寫命令周期對各個地址進行編程。寫編程操作是一個4個總線指令周期的操作。編程命令序列的開頭是寫入兩個寫解鎖指令周期(Unlock write cycles),跟著是一個編程建立命令(program set-up command),然后寫入編程地址和數據來啟動內嵌編程算法。當內嵌編程算法執行結束后,FLASH存儲器芯片返回讀模式,地址不再被鎖存。FPGA可以根據DQ7和DQ6來判斷寫編程操作的狀態,也可以用RY/BY#來判斷寫編程操作的狀態。在沒有擦除操作的情況下,禁止對同一地址多次進行寫編程。原來為“0”的位不能通過寫編程操作改為“1”。如果這樣做,FLASH存儲器芯片可能會將DQ5置為1,或者引起DQ7和DQ6狀態位指示操作成功,但是實際該數據位還為“0”。只有FLASH存儲器芯片擦除操作可以把數據位由“0”變為“1”[3]。FLASH存儲器芯片的寫編程指令時序如圖5所示。

圖5 FLASH存儲器芯片寫編程指令時序圖
FLASH存儲器芯片的寫編程指令分為4條,分別對應4組數據。第一條指令:地址為0x000555,對應總線數據為0x00AA;第二條指令:地址為0x0002AA,對應總線數據為0x0055;第三條指令:地址為0x000555,對應總線數據為0x00A0;第四條指令:實際寫入的字編程地址為PA,對應寫入的數據為PD。FLASH存儲器芯片連續24個字編程指令時序如圖6所示。

圖6 FLASH存儲器芯片連續24個字編程指令時序圖
在FLASH存儲器芯片的字編程過程中,也需要注意下面這幾個時序信號。CE#信號在這期間需要始終保持低電平,OE#、RESET#需要保持高電平。WP#信號需要在整個字編程周期的最開始階段給定一個負脈沖然后上拉為高電平。WE#信號需要配合字編程指令的地址總線和數據總線產生周期性的負脈沖。RY/BY#信號是FLASH存儲器芯片的狀態監測信號,當FLASH存儲器芯片每次進入字編程周期后,該信號就會被下拉為低電平,當FLASH存儲器芯片在該周期的字編程操作過程完成后,該信號被釋放為高電平。當新的字編程周期開始后,該信號被下拉為低電平,如此反復直至所有字編程周期操作結束后該信號被上拉為高電平。
FLASH存儲器芯片的讀操作沒有專門對應的指令。在滿足讀時序的條件下,給定FLASH存儲器芯片的讀地址,在數據總線上就可以讀出存儲在FLASH芯片中該地址所對應的數據。FLASH存儲器芯片單獨讀操作時序如圖7所示。

圖7 FLASH存儲器芯片單獨讀操作時序圖
讀取FLASH存儲器芯片中的數據,FPGA需要將FLASH存儲器芯片的CE#信號和OE#信號置為低電平,CE#信號是FLASH存儲器芯片的電源控制和片選信號,OE#信號是FLASH存儲器芯片輸出控制和數據到輸出管腳的開關信號。WE#信號應保持為高電平。在FLASH存儲器芯片上電或硬件復位后,內部狀態機被設置為讀數據狀態。在這種模式下不需要專門的命令來讀數據,只要在讀周期發送有效的地址A23~A0,則可以在地址穩定后將數據驅動到DQ15~DQ0上。FLASH存儲器芯片連續24個讀操作時序如圖8所示。

圖8 FLASH存儲器芯片連續24個讀操作時序圖
在這里,為了保證讀取數據的可靠性,FPGA產生了一個比OE#信號更窄的脈沖信號T_OE#用來對數據總線上的讀出數據進行實時鎖存。
為了解決相控陣雷達波束控制電路中大量初始相位數據存儲的問題,本文提出用外部獨立的并行FLASH存儲芯片與FPGA進行交互解決該問題。文中詳細分析了JFM29GL256-E56這種并行FLASH存儲器芯片與FPGA交互的三種方式,包括擦除操作、寫編程操作、讀操作以及具體的實現。采用這種方式不僅提高了相控陣雷達波束控制電路中主控芯片FPGA資源的利用率,同時還提高了相控陣雷達波束控制電路的通用性和易用性。