周 剛,曹健輝,彭 勃
(中國電子科技集團公司第三十研究所,四川 成都 610041)
本項目中涉及到4個通道的射頻發射電路,頻段覆蓋225~400 MHz,射頻輸出幅度會隨著頻率的變化而變化。由于DA輸出屬于模擬電路,加之元器件的個體差異,常會導致相同電路、不同頻率射頻輸出幅度不一致。每個通道的輸出功率均有平坦度要求,因此每臺設備的4個通道均需根據實際輸出功率調整射頻輸出的衰減量,確定4個通道的衰減量后,編譯生成本臺設備的下載文件。根據經驗,一般1 MHz頻率內對應一個校正值。例如,175 MHz范圍只需175個矯正值即可。此種方式導致每臺設備的調試測試均需要重新編譯FPGA工程文件,工作量大且不利于FPGA程序的歸檔和使用。
考慮兩種改進方案。
方案一為傳統的FPGA+SPI Flash或者FPGA+CPLD+Flash設計方案。由于硬件已經開發完成,此方案的缺點在于需要修改硬件電路,增加單獨的Flash芯片或者CPLD芯片,因此實現難度較大,不建議采用。
方案二為直接利用Xilinx公司Spartan-3AN系列FPGA內含Flash進行設計改進。此FPGA內含16 MB內存的Flash,在PC中開發參數配置軟件,通過串口下載配置文件至FPGA中的片內Flash。因為FPGA自帶串行外圍設備接口(Serial Peripheral Interface,SPI),FPGA每次開機后自動讀取片內Flash的配置文件,也可以根據需要從FPGA的片內Flash中讀取配置文件。
Spartan-3AN FPGA平臺是Xilinx公司于2007年推出的非易失性FPGA解決方案,基于成熟的90 nm工藝的低成本FPGA構架,融合了SRAM技術和可靠的非易失性閃存技術。
以XC3S1400AN-4FGG676I為例,Spartan-3AN FPGA平臺的主要特點如下[1]:
(1)工作溫度范圍:-40~100 ℃(結溫);
(2)門數/乘積項:1 400 000門;
(3)最高工作頻率:250 MHz;
(4)傳輸延遲時間≤1.21 ns;
(5)最大用戶I/O數:502個;
(6)電源電壓:1.2 V;
(7)I/O端電壓:1.1~3.6 V;
(8)邏輯單元:25 344個;
(9)片內Flash容量:16 MB。
Flash又稱為閃存,具有可電擦寫、掉電后數據不丟失的特性,且容量大、功耗低、速度快,在現代電子產品中應用廣泛[2]。
以XC3S1400AN-4FGG676I為例,Spartan-3AN系列FPGA中片內Flash的主要特點如下[1]:
(1)片內Flash容量:16 MB;
(2)SRAM頁面緩沖區:2個;
(3)較小的空間(264 B或528 B)存儲非易失性數據;
(4)隨機存取,二進制地址可設置;
(5)最大66 MHz連續數據傳輸;
(6)支持全部擦除、塊擦除和扇區擦除;
(7)重點區域數據具備保護功能和防護措施;
(8)128 B安全存儲空間;
(9)支持100 000次擦寫;
(10)Flash數據可保存20年;
(11)支持多種Flash使用方式。
Spartan-3AN系列FPGA內部結構,如圖1所示[3]。

圖1 Spartan-3AN系列FPGA內部結構
Spartan-3AN系列FPGA中片內Flash的配置接口,如圖2所示。

圖2 Spartan-3AN系列FPGA中片內Flash的配置接口
SPI是由Motorola公司推出的一種高速、全雙工的同步串行通信總線,可以使MCU與各種外圍設備以串行方式進行通信并交換信息。SPI接口主要有4根信號線:時鐘信號線(CLK)、主輸出/從機輸入數據線(MISI)、主輸入/從機輸出數據線(MISO)和片選信號線(CSB)[4]。SPI接口框圖如圖3所示[5]。

圖3 SPI接口
目前,Spartan-3AN等FPGA內含Flash模塊,支持SPI接口。對于Spartan-3AN,FPGA是SPI主器件,SPI Flash PROM是從器件。
本文構建了一個通過SPI接口實現FPGA片內Flash數據動態加載和讀取的系統,系統架構如圖4所示。

圖4 系統架構
系統校正值寫入流程,如圖5所示。

圖5 校正值寫入流程
系統校正值讀取流程,如圖6所示。

圖6 校正值讀取流程
SPI_ACCESS原語用來連接FPGA應用層和系統Flash。使用中,FPGA應用層是主,系統Flash是從。該原語包括MISO、MOSI、CSB和CLK四個管腳。
MISO:主入從出,串行數據從系統Flash存儲空間中輸出至FPGA應用層邏輯;
MOSI:主出從入,串行數據從FPGA應用層邏輯中輸出至系統Flash存儲空間;
CSB:系統Flash片選使能信號,低電平有效;
CLK:系統Flash操作時鐘,由FPGA應用層邏輯給出。
SPI_ACCESS原語屬性定義包括以下內容:
(1)SIM_DVICE:用來定義目標芯片類型,type為String,本實現中賦值“3S1400AN”;
(2)SIM_USE_ID:用來定義SPI存儲器安全寄存器中的編程用戶ID,type為16進制數據,本實現中賦值“0XFF”;
(3)SIM_MEM_FILE:用來指定存儲初始化值的文件,type為String,本實現中賦值“NONE”;
(4)SIM_FACTORY_ID:用來指定安全寄存器中的用戶識別號,type為16進制數據,本實現中賦值“0X00”;
(5)SIM_DELAY_TYPE:用來指定仿真延時類型,type為String,本實現中賦值“SCALED”。
XC3S1400AN內部SPI FLASH基礎構成是page。page是系統FPGA中的最小可擦除單元,每個page包含528個字節,8個page可組成一個block,32個block組成一個sector。
應用層可針對page、block和sector單獨進行擦除操作,并且可對sector單獨進行鎖住和保護。內部SPI Flash存儲結構如圖7所示。

圖7 內部SPI Flash存儲結構
XC3S1400AN系列FPGA的默認尋址方式,如圖8所示[5],本文即采用這種默認地址分配模式。
狀態寄存器讀取命令時序,如圖9所示[5]。

圖8 XC3S1400AN FPGA默認尋址方式

圖9 狀態寄存器讀取命令時序
(1)在開始發送讀取命令前,CSB必須開始拉低,并在整個讀取過程中一直保持低電平;
(2)讀取狀態寄存器命令為0XD7,并伴隨時鐘下降沿以二進制形式“11010111”傳至MOSI;
(3)系統Flash伴隨時鐘上升沿捕捉傳來的數據;
(4)在狀態結果輸出之前,MISO一直保持高電平;
(5)在讀取命令傳輸完畢后,系統存儲器伴隨時鐘下降沿將狀態寄存器內的內容一一輸出,高位在前,低位在后;
(6)FPGA應用層伴隨時鐘上升沿捕捉系統存儲器的狀態信息;
(7)在系統存儲器狀態信息讀取完畢后,將CSB拉高,結束讀取過程。
系統Flash讀取命令有多種讀取方式,包括快速讀取、自由讀取、頁緩存至Buffer讀取和Buffer讀取等。本應用采取自由讀取,原因是快速讀取適合小數據量、自由讀取;讀取數據無延時,讀取時鐘可達33 MHz,滿足本系統的使用需求。
讀取命令格式及要求如表1所示。

表1 讀取命令格式及要求
注意事項:
(1)讀取輸出數據無延時;
(2)當CSB保持低電平時,MISO數據隨時鐘下降沿串行輸出,高位先出,地址會自動增加,無需人為控制;
(3)當CSB拉高時,結束數據讀取操作。
讀取命令的Chipscope截圖,如圖10所示。
系統Flash讀取命令有多種讀取方式,包括Buffer寫、頁擦除Buffer寫、頁不擦除Buffer寫、頁Buffer寫、頁Buffer比對和自動頁寫。本應用采取頁Buffer寫,原因是頁Buffer寫是將Buffer寫和Buffer頁擦除合二為一,用一條指令就完成了兩個操作,減少了命令條數,簡化了操作步驟,降低了出錯概率,提高了寫數據的效率。
寫數命令格式及要求如表2所示。

表2 寫數命令格式及要求
寫數命令的Chipscope截圖,如圖11所示。

圖11 寫數命令的Chipscope截圖
擦除有三種擦除模式:頁擦除、block擦除和sector擦除。為防止sector誤擦除和非授權的擦除,可實現sector保護和sector鎖住。
頁擦除、block擦除和sector擦除命令格式及要求如表3所示。

表3 擦除命令格式及要求
擦除完畢后,相應擦除存儲空間里的數據為0XFF。
Sector保護寄存器狀態讀取:相應的命令控制字為0X32。
Sector保護寄存器擦除:相應的命令控制字為0X3D+0X2A+0X7F+0XCF。
Sector保護寄存器擦除格式如表4所示。

表4 Sector保護寄存器擦除格式
擦除Sector保護寄存器后,Sector保護寄存器每個字節的值變為0XFF,代表所有的Sector均被保護。
Sector保護寄存器寫入:相應的命令控制字為0X3D+0X2A+0X7F+0XFC。
Sector保護寄存器寫入格式如表5所示。

表5 Sector保護寄存器寫入格式
Sector保護寄存器讀出:相應的命令控制字為0X32。
Sector保護寄存器讀取格式如表6所示。

表6 Sector保護寄存器讀取格式
Sector保護寄存器使能:相應的命令控制字為0X3D+0X2A+0X7F+0XA9。
Sector保護寄存器寄存器使能格式如表7所示。

表7 Sector保護寄存器使能格式
Sector保護寄存器禁用:相應的命令控制字為0X3D+0X2A+0X7F+0X9A。
Sector保護寄存器禁用格式如表8所示。

表8 Sector保護寄存器禁用格式
參數配置軟件布置于一臺普通PC中,通過串口與射頻控制模塊的FPGA相連,實現COM選擇、通道選擇、參數文件的讀取和存儲。參數配置軟件截圖如圖12所示。

圖12 參數配置軟件截圖
制備顯控小軟件一個,該軟件具備以下功能:能通過RS232協議與FPGA應用層進行通信;可下發系統Flash擦除、寫入、回讀和sector保護功能等;可將要寫入的數據和地址一一對應保存在文本文件中;待寫入完畢后,進行寫入數據回讀并一一比對,判定是否寫入成功。若寫入成功,則結束燒寫;失敗則再重寫,直到燒寫成功。
系統FPGA應用軟件一套,該軟件具備以下功能:能通過RS232協議與FPGA應用層進行通信,能正確接收顯控下發的命令信息,執行相應的系統Flash擦除、寫入、回讀和sector保護等操作。在系統上電后,該系統運行后稍做延時,會執行從Flash讀數據的操作,根據系統需要將讀取到的數據保存至雙口RAM,待程序需要該數據時會根據索引從相應的RAM地址中讀取數據并使用,增加了系統應用的靈活性。
當系統程序控制DA發射射頻時,系統會根據發射頻率計算應該取雙口RAM哪個地址中的矯正值。例如,發射頻率范圍為200~400 MHz,則200~201 MHz對應的矯正值保存在第1個地址中,201~202 MHz對應的矯正值保存在第2個地址中;以此類推,399~400 MHz對應的矯正值保存在第200個地址中,400 MHz對應的矯正值保存在第201個地址中。具體實現中,讀校正值地址可通過addr=(Freqence-200 000 000)/1 000 000計算,即對結果取整獲取所需的地址值;其他的讀操作邏輯控制相應的給出,即可正確讀出校正值。然后,矯正值被提出并轉化為對應頻率的功率補償,進而實現DA輸出幅度的平坦性。
參數配置軟件寫入截圖,如圖13所示。
參數配置軟件讀取截圖,如圖14所示。
本文設計并實現了一種基于FPGA片內Flash進行數據加載和讀取的方法:以裝在普通PC中的參數配置軟件作為配置主控制器,通過串口對FPGA片內的Flash進行控制,成功實現了對FPGA的數據動態加載和讀取。
在應用該系統前,需根據每個頻率測量求得一個校正值,并將校正值寫入系統應用程序中。這樣做的缺點是:針對每臺設備校正值不同,需要重新修改源代碼中相應的校正值,并對源代碼進行編譯燒寫。這樣不便于程序的版本控制,需對每臺設備準備一套與之對應的版本程序,給設備后期維護帶來了較大不便,尤其當設備大批量生產時。

圖13 寫入截圖

圖14 讀取截圖
應用該系統后,程序版本只需要一個版本,矯正值會存入Flash中,并可以根據DA發射頻率將校正值讀取出使用。后期設備維修維護時只需讀出Flash中的校正值并保存至文本文件。硬件更換后,根據需要修改更換后硬件部分對應的校正值,并再次保存歸檔。當新的矯正數據寫入完畢后,還可通過回讀命令自動進行校正值的回讀和比對,確保矯正值完全讀寫正確,提高了設備的穩定性,簡化了操作的復雜性,節省了大量人力,尤其在設備大批量生產時。