李 淼 吳必旗 李娟娟 王興波
南京熊貓漢達科技有限公司
隨著衛(wèi)星通信系統(tǒng)規(guī)模擴大、復雜程度加深,兩個或多個芯片的集成在邏輯設計中的應用也越來越多。在芯片之間,數(shù)據(jù)的互相傳遞是經常會遇到的問題。兩個不同的芯片之間會存在硬件電路的開銷有限,為了使數(shù)據(jù)能夠成功、可靠傳輸,本文在設計FPGA接口時,選擇了同步串行接口(Serial Peripheral Inter face,SPI)的高速分時復用/解復用的方式。
與I2C、UART、HDLC等總線接口相比,SPI有全雙工模式、電路結構簡單、速度快、通信可靠等優(yōu)點,在集成電路飛速發(fā)展的近幾年應用非常廣泛。利用SPI接口具有硬件開銷小的特點,本文設計了一種基于SPI接口高速復用模塊的方法,此外,采用XILINX公司的Kintex-7系列開發(fā)芯片,實現(xiàn)了電路的硬件驗證。在應用于通信系統(tǒng)時,設計過程中很多變量(如:變量1,變量2,變量3等)都采用參數(shù)形式,在應用于具體的工程實踐中,可以根據(jù)實際需要更改參數(shù)。FPGA的SPI高速分時復用/解復用實現(xiàn)流程如圖1所示,由復用模塊、解復用模塊、保密機共3個功能模塊組成。
圖1 FPGA實現(xiàn)流程
復用模塊和解復用模塊的FPGA設計思路:(1)復用模塊,主要功能是通過提速實現(xiàn)數(shù)據(jù)的分時復用。首先,在復用模塊(即FPGA 1)中用主時鐘分頻的業(yè)務速率鐘對4路(可變參數(shù)1)SPI總線數(shù)據(jù),分別采用兩個異步fifo進行32 bit(可變參數(shù)2)的乒乓緩存,使數(shù)據(jù)的速率提升至10 MB級別;其次,在每小包前加上8 bit(可變參數(shù)3)的接口協(xié)議,包括業(yè)務類型及包序號,進行4∶1復用。復用輸出的1路SPI總線數(shù)據(jù)以快時鐘下降沿輸出。(2)解復用模塊,主要功能是通過降速還原4路SPI數(shù)據(jù)。首先,在解復用模塊(即FPGA 2)中將快時鐘同步至主時鐘,并用快時鐘上升沿對SPI總線數(shù)據(jù)進行采樣;其次,采用異步雙口ram讀寫進行1∶4解復用,使數(shù)據(jù)的速率下降到原來的業(yè)務速率,從而保證了bit流不會斷。解復用將模塊FPGA 1中輸出的1路SPI總線數(shù)據(jù)還原成4路SPI總線數(shù)據(jù),并將其送入保密機進行加解密。
需要說明的是,快時鐘的周期T是主時鐘的整數(shù)倍,為了保證主時鐘能夠進行可靠的采樣,本文推薦快時鐘的周期至少大于6個主時鐘周期。
利用該設計方法在XILINX FPGA器件上實現(xiàn)兩個Kintex-7芯片之間的SPI總線數(shù)據(jù)傳輸,如圖2所示,其中,圖2(a)展示了一組利用復用方法實現(xiàn)SPI總線數(shù)據(jù)高速傳輸過程的仿真波形圖,4路數(shù)據(jù)同一時刻發(fā)送,傳輸?shù)臄?shù)據(jù)為7 bit固定數(shù)“1110100”,方便觀察。
(1)復用模塊先用主時鐘分頻的時鐘上升沿脈沖clken1、clken2、clken3、clken4分別對4路待發(fā)送數(shù)據(jù)din1、din2、din3、din4進行32 bit的循環(huán)計數(shù),并做乒乓緩存,最終實現(xiàn)4∶1高速復用輸出。圖2中的cout、eout、dout為復用的輸出SPI總線,前8 bit為接口協(xié)議。圖2(b)展示了放大后的時序圖,可觀察到使能和數(shù)據(jù)與輸出時鐘下降沿對齊。
圖2 FPGA實例利用復用實現(xiàn)數(shù)據(jù)傳輸過程仿真波形圖
(2)復用模塊中的關鍵技術難點在于異步fifo需要同時讀數(shù)時優(yōu)先級的選擇,需要用狀態(tài)機進行讀請求的輪詢,實現(xiàn)SPI接口的分時復用。仿真得到的波形如圖3所示。仿真代碼是通過三段式狀態(tài)機來實現(xiàn)的,當前狀態(tài)(current_state)包括4種循環(huán)狀態(tài):idle = 3'b000,wait = 3'b001,read1 = 3'b011,read2 = 3'b100,其中,idle為初始態(tài),wait等待是對fifo的讀請求進行輪詢。首先,將8個fifo的讀請求從低到高分別存入8位寄存器ok_reg中;其次,輪詢方式為flag循環(huán)計數(shù),計數(shù)器的計數(shù)范圍為0~8,當ok_reg[flag]=1時,響應讀請求,狀態(tài)跳變至讀取狀態(tài)read1,加上8 bit接口協(xié)議,完成后跳變至fifo讀取狀態(tài)read2,對應fifo的讀使能拉高,讀至fifo為空,并在狀態(tài)機外清空對應的ok_reg[flag]。上述狀態(tài)完成后,再次進入初始態(tài)idle,開始第二次輪詢。FPGA狀態(tài)機實現(xiàn)過程仿真波形圖如圖3所示。
(3)進入解復用模塊后,先將SPI接口總線同步到模塊FPGA 2的主時鐘中;然后,將cin上升沿采樣輸入的SPI數(shù)據(jù),并用異步雙口ram進行1∶4解復用,從1路SPI數(shù)據(jù)中還原出4路解復用后的數(shù)據(jù)SPI1、SPI2、SPI3和SPI4;最后,經下降沿對齊后送入保密機。
為了展示該方法的實用性,本文還對編寫好的程序經JTAG端口下載到FPGA開發(fā)板上進行實驗驗證,并利用調制解調進行中頻自環(huán),CPU通過hdlc接口與FPGA接口進行數(shù)據(jù)交互,實驗結果顯示中頻自環(huán)無丟包、無誤碼。
從仿真數(shù)據(jù)和實驗結果可以看出,本文提出的SPI接口復用、解復用實現(xiàn)數(shù)據(jù)傳輸?shù)姆椒ú粌H適用于芯片之間的傳輸,也適用于跨板子之間的數(shù)據(jù)傳輸,且延時小、操作簡單。此外,本方法在無丟包、無誤碼的前提下還可以有效節(jié)省硬件線路的開銷(如實例:在模塊FPGA 1中節(jié)省了3路SPI總線數(shù)據(jù)),從而大大提高了數(shù)據(jù)傳輸效率,具有較強的可操作性和應用價值。