周 剛,曹健輝,彭 勃
(中國電子科技集團公司第三十研究所,四川 成都 610041)
本項目中涉及到4個通道的射頻發(fā)射電路,頻段覆蓋225~400 MHz,射頻輸出幅度會隨著頻率的變化而變化。由于DA輸出屬于模擬電路,加之元器件的個體差異,常會導致相同電路、不同頻率射頻輸出幅度不一致。每個通道的輸出功率均有平坦度要求,因此每臺設(shè)備的4個通道均需根據(jù)實際輸出功率調(diào)整射頻輸出的衰減量,確定4個通道的衰減量后,編譯生成本臺設(shè)備的下載文件。根據(jù)經(jīng)驗,一般1 MHz頻率內(nèi)對應(yīng)一個校正值。例如,175 MHz范圍只需175個矯正值即可。此種方式導致每臺設(shè)備的調(diào)試測試均需要重新編譯FPGA工程文件,工作量大且不利于FPGA程序的歸檔和使用。
考慮兩種改進方案。
方案一為傳統(tǒng)的FPGA+SPI Flash或者FPGA+CPLD+Flash設(shè)計方案。由于硬件已經(jīng)開發(fā)完成,此方案的缺點在于需要修改硬件電路,增加單獨的Flash芯片或者CPLD芯片,因此實現(xiàn)難度較大,不建議采用。
方案二為直接利用Xilinx公司Spartan-3AN系列FPGA內(nèi)含F(xiàn)lash進行設(shè)計改進。此FPGA內(nèi)含16 MB內(nèi)存的Flash,在PC中開發(fā)參數(shù)配置軟件,通過串口下載配置文件至FPGA中的片內(nèi)Flash。因為FPGA自帶串行外圍設(shè)備接口(Serial Peripheral Interface,SPI),F(xiàn)PGA每次開機后自動讀取片內(nèi)Flash的配置文件,也可以根據(jù)需要從FPGA的片內(nèi)Flash中讀取配置文件。
Spartan-3AN FPGA平臺是Xilinx公司于2007年推出的非易失性FPGA解決方案,基于成熟的90 nm工藝的低成本FPGA構(gòu)架,融合了SRAM技術(shù)和可靠的非易失性閃存技術(shù)。
以XC3S1400AN-4FGG676I為例,Spartan-3AN FPGA平臺的主要特點如下[1]:
(1)工作溫度范圍:-40~100 ℃(結(jié)溫);
(2)門數(shù)/乘積項:1 400 000門;
(3)最高工作頻率:250 MHz;
(4)傳輸延遲時間≤1.21 ns;
(5)最大用戶I/O數(shù):502個;
(6)電源電壓:1.2 V;
(7)I/O端電壓:1.1~3.6 V;
(8)邏輯單元:25 344個;
(9)片內(nèi)Flash容量:16 MB。
Flash又稱為閃存,具有可電擦寫、掉電后數(shù)據(jù)不丟失的特性,且容量大、功耗低、速度快,在現(xiàn)代電子產(chǎn)品中應(yīng)用廣泛[2]。
以XC3S1400AN-4FGG676I為例,Spartan-3AN系列FPGA中片內(nèi)Flash的主要特點如下[1]:
(1)片內(nèi)Flash容量:16 MB;
(2)SRAM頁面緩沖區(qū):2個;
(3)較小的空間(264 B或528 B)存儲非易失性數(shù)據(jù);
(4)隨機存取,二進制地址可設(shè)置;
(5)最大66 MHz連續(xù)數(shù)據(jù)傳輸;
(6)支持全部擦除、塊擦除和扇區(qū)擦除;
(7)重點區(qū)域數(shù)據(jù)具備保護功能和防護措施;
(8)128 B安全存儲空間;
(9)支持100 000次擦寫;
(10)Flash數(shù)據(jù)可保存20年;
(11)支持多種Flash使用方式。
Spartan-3AN系列FPGA內(nèi)部結(jié)構(gòu),如圖1所示[3]。
圖1 Spartan-3AN系列FPGA內(nèi)部結(jié)構(gòu)
Spartan-3AN系列FPGA中片內(nèi)Flash的配置接口,如圖2所示。
圖2 Spartan-3AN系列FPGA中片內(nèi)Flash的配置接口
SPI是由Motorola公司推出的一種高速、全雙工的同步串行通信總線,可以使MCU與各種外圍設(shè)備以串行方式進行通信并交換信息。SPI接口主要有4根信號線:時鐘信號線(CLK)、主輸出/從機輸入數(shù)據(jù)線(MISI)、主輸入/從機輸出數(shù)據(jù)線(MISO)和片選信號線(CSB)[4]。SPI接口框圖如圖3所示[5]。
圖3 SPI接口
目前,Spartan-3AN等FPGA內(nèi)含F(xiàn)lash模塊,支持SPI接口。對于Spartan-3AN,F(xiàn)PGA是SPI主器件,SPI Flash PROM是從器件。
本文構(gòu)建了一個通過SPI接口實現(xiàn)FPGA片內(nèi)Flash數(shù)據(jù)動態(tài)加載和讀取的系統(tǒng),系統(tǒng)架構(gòu)如圖4所示。
圖4 系統(tǒng)架構(gòu)
系統(tǒng)校正值寫入流程,如圖5所示。
圖5 校正值寫入流程
系統(tǒng)校正值讀取流程,如圖6所示。
圖6 校正值讀取流程
SPI_ACCESS原語用來連接FPGA應(yīng)用層和系統(tǒng)Flash。使用中,F(xiàn)PGA應(yīng)用層是主,系統(tǒng)Flash是從。該原語包括MISO、MOSI、CSB和CLK四個管腳。
MISO:主入從出,串行數(shù)據(jù)從系統(tǒng)Flash存儲空間中輸出至FPGA應(yīng)用層邏輯;
MOSI:主出從入,串行數(shù)據(jù)從FPGA應(yīng)用層邏輯中輸出至系統(tǒng)Flash存儲空間;
CSB:系統(tǒng)Flash片選使能信號,低電平有效;
CLK:系統(tǒng)Flash操作時鐘,由FPGA應(yīng)用層邏輯給出。
SPI_ACCESS原語屬性定義包括以下內(nèi)容:
(1)SIM_DVICE:用來定義目標芯片類型,type為String,本實現(xiàn)中賦值“3S1400AN”;
(2)SIM_USE_ID:用來定義SPI存儲器安全寄存器中的編程用戶ID,type為16進制數(shù)據(jù),本實現(xiàn)中賦值“0XFF”;
(3)SIM_MEM_FILE:用來指定存儲初始化值的文件,type為String,本實現(xiàn)中賦值“NONE”;
(4)SIM_FACTORY_ID:用來指定安全寄存器中的用戶識別號,type為16進制數(shù)據(jù),本實現(xiàn)中賦值“0X00”;
(5)SIM_DELAY_TYPE:用來指定仿真延時類型,type為String,本實現(xiàn)中賦值“SCALED”。
XC3S1400AN內(nèi)部SPI FLASH基礎(chǔ)構(gòu)成是page。page是系統(tǒng)FPGA中的最小可擦除單元,每個page包含528個字節(jié),8個page可組成一個block,32個block組成一個sector。
應(yīng)用層可針對page、block和sector單獨進行擦除操作,并且可對sector單獨進行鎖住和保護。內(nèi)部SPI Flash存儲結(jié)構(gòu)如圖7所示。
圖7 內(nèi)部SPI Flash存儲結(jié)構(gòu)
XC3S1400AN系列FPGA的默認尋址方式,如圖8所示[5],本文即采用這種默認地址分配模式。
狀態(tài)寄存器讀取命令時序,如圖9所示[5]。
圖8 XC3S1400AN FPGA默認尋址方式
圖9 狀態(tài)寄存器讀取命令時序
(1)在開始發(fā)送讀取命令前,CSB必須開始拉低,并在整個讀取過程中一直保持低電平;
(2)讀取狀態(tài)寄存器命令為0XD7,并伴隨時鐘下降沿以二進制形式“11010111”傳至MOSI;
(3)系統(tǒng)Flash伴隨時鐘上升沿捕捉傳來的數(shù)據(jù);
(4)在狀態(tài)結(jié)果輸出之前,MISO一直保持高電平;
(5)在讀取命令傳輸完畢后,系統(tǒng)存儲器伴隨時鐘下降沿將狀態(tài)寄存器內(nèi)的內(nèi)容一一輸出,高位在前,低位在后;
(6)FPGA應(yīng)用層伴隨時鐘上升沿捕捉系統(tǒng)存儲器的狀態(tài)信息;
(7)在系統(tǒng)存儲器狀態(tài)信息讀取完畢后,將CSB拉高,結(jié)束讀取過程。
系統(tǒng)Flash讀取命令有多種讀取方式,包括快速讀取、自由讀取、頁緩存至Buffer讀取和Buffer讀取等。本應(yīng)用采取自由讀取,原因是快速讀取適合小數(shù)據(jù)量、自由讀?。蛔x取數(shù)據(jù)無延時,讀取時鐘可達33 MHz,滿足本系統(tǒng)的使用需求。
讀取命令格式及要求如表1所示。
表1 讀取命令格式及要求
注意事項:
(1)讀取輸出數(shù)據(jù)無延時;
(2)當CSB保持低電平時,MISO數(shù)據(jù)隨時鐘下降沿串行輸出,高位先出,地址會自動增加,無需人為控制;
(3)當CSB拉高時,結(jié)束數(shù)據(jù)讀取操作。
讀取命令的Chipscope截圖,如圖10所示。
系統(tǒng)Flash讀取命令有多種讀取方式,包括Buffer寫、頁擦除Buffer寫、頁不擦除Buffer寫、頁Buffer寫、頁Buffer比對和自動頁寫。本應(yīng)用采取頁Buffer寫,原因是頁Buffer寫是將Buffer寫和Buffer頁擦除合二為一,用一條指令就完成了兩個操作,減少了命令條數(shù),簡化了操作步驟,降低了出錯概率,提高了寫數(shù)據(jù)的效率。
寫數(shù)命令格式及要求如表2所示。
表2 寫數(shù)命令格式及要求
寫數(shù)命令的Chipscope截圖,如圖11所示。
圖11 寫數(shù)命令的Chipscope截圖
擦除有三種擦除模式:頁擦除、block擦除和sector擦除。為防止sector誤擦除和非授權(quán)的擦除,可實現(xiàn)sector保護和sector鎖住。
頁擦除、block擦除和sector擦除命令格式及要求如表3所示。
表3 擦除命令格式及要求
擦除完畢后,相應(yīng)擦除存儲空間里的數(shù)據(jù)為0XFF。
Sector保護寄存器狀態(tài)讀?。合鄳?yīng)的命令控制字為0X32。
Sector保護寄存器擦除:相應(yīng)的命令控制字為0X3D+0X2A+0X7F+0XCF。
Sector保護寄存器擦除格式如表4所示。
表4 Sector保護寄存器擦除格式
擦除Sector保護寄存器后,Sector保護寄存器每個字節(jié)的值變?yōu)?XFF,代表所有的Sector均被保護。
Sector保護寄存器寫入:相應(yīng)的命令控制字為0X3D+0X2A+0X7F+0XFC。
Sector保護寄存器寫入格式如表5所示。
表5 Sector保護寄存器寫入格式
Sector保護寄存器讀出:相應(yīng)的命令控制字為0X32。
Sector保護寄存器讀取格式如表6所示。
表6 Sector保護寄存器讀取格式
Sector保護寄存器使能:相應(yīng)的命令控制字為0X3D+0X2A+0X7F+0XA9。
Sector保護寄存器寄存器使能格式如表7所示。
表7 Sector保護寄存器使能格式
Sector保護寄存器禁用:相應(yīng)的命令控制字為0X3D+0X2A+0X7F+0X9A。
Sector保護寄存器禁用格式如表8所示。
表8 Sector保護寄存器禁用格式
參數(shù)配置軟件布置于一臺普通PC中,通過串口與射頻控制模塊的FPGA相連,實現(xiàn)COM選擇、通道選擇、參數(shù)文件的讀取和存儲。參數(shù)配置軟件截圖如圖12所示。
圖12 參數(shù)配置軟件截圖
制備顯控小軟件一個,該軟件具備以下功能:能通過RS232協(xié)議與FPGA應(yīng)用層進行通信;可下發(fā)系統(tǒng)Flash擦除、寫入、回讀和sector保護功能等;可將要寫入的數(shù)據(jù)和地址一一對應(yīng)保存在文本文件中;待寫入完畢后,進行寫入數(shù)據(jù)回讀并一一比對,判定是否寫入成功。若寫入成功,則結(jié)束燒寫;失敗則再重寫,直到燒寫成功。
系統(tǒng)FPGA應(yīng)用軟件一套,該軟件具備以下功能:能通過RS232協(xié)議與FPGA應(yīng)用層進行通信,能正確接收顯控下發(fā)的命令信息,執(zhí)行相應(yīng)的系統(tǒng)Flash擦除、寫入、回讀和sector保護等操作。在系統(tǒng)上電后,該系統(tǒng)運行后稍做延時,會執(zhí)行從Flash讀數(shù)據(jù)的操作,根據(jù)系統(tǒng)需要將讀取到的數(shù)據(jù)保存至雙口RAM,待程序需要該數(shù)據(jù)時會根據(jù)索引從相應(yīng)的RAM地址中讀取數(shù)據(jù)并使用,增加了系統(tǒng)應(yīng)用的靈活性。
當系統(tǒng)程序控制DA發(fā)射射頻時,系統(tǒng)會根據(jù)發(fā)射頻率計算應(yīng)該取雙口RAM哪個地址中的矯正值。例如,發(fā)射頻率范圍為200~400 MHz,則200~201 MHz對應(yīng)的矯正值保存在第1個地址中,201~202 MHz對應(yīng)的矯正值保存在第2個地址中;以此類推,399~400 MHz對應(yīng)的矯正值保存在第200個地址中,400 MHz對應(yīng)的矯正值保存在第201個地址中。具體實現(xiàn)中,讀校正值地址可通過addr=(Freqence-200 000 000)/1 000 000計算,即對結(jié)果取整獲取所需的地址值;其他的讀操作邏輯控制相應(yīng)的給出,即可正確讀出校正值。然后,矯正值被提出并轉(zhuǎn)化為對應(yīng)頻率的功率補償,進而實現(xiàn)DA輸出幅度的平坦性。
參數(shù)配置軟件寫入截圖,如圖13所示。
參數(shù)配置軟件讀取截圖,如圖14所示。
本文設(shè)計并實現(xiàn)了一種基于FPGA片內(nèi)Flash進行數(shù)據(jù)加載和讀取的方法:以裝在普通PC中的參數(shù)配置軟件作為配置主控制器,通過串口對FPGA片內(nèi)的Flash進行控制,成功實現(xiàn)了對FPGA的數(shù)據(jù)動態(tài)加載和讀取。
在應(yīng)用該系統(tǒng)前,需根據(jù)每個頻率測量求得一個校正值,并將校正值寫入系統(tǒng)應(yīng)用程序中。這樣做的缺點是:針對每臺設(shè)備校正值不同,需要重新修改源代碼中相應(yīng)的校正值,并對源代碼進行編譯燒寫。這樣不便于程序的版本控制,需對每臺設(shè)備準備一套與之對應(yīng)的版本程序,給設(shè)備后期維護帶來了較大不便,尤其當設(shè)備大批量生產(chǎn)時。
圖13 寫入截圖
圖14 讀取截圖
應(yīng)用該系統(tǒng)后,程序版本只需要一個版本,矯正值會存入Flash中,并可以根據(jù)DA發(fā)射頻率將校正值讀取出使用。后期設(shè)備維修維護時只需讀出Flash中的校正值并保存至文本文件。硬件更換后,根據(jù)需要修改更換后硬件部分對應(yīng)的校正值,并再次保存歸檔。當新的矯正數(shù)據(jù)寫入完畢后,還可通過回讀命令自動進行校正值的回讀和比對,確保矯正值完全讀寫正確,提高了設(shè)備的穩(wěn)定性,簡化了操作的復雜性,節(jié)省了大量人力,尤其在設(shè)備大批量生產(chǎn)時。