歐春湘++楊嘉偉++任曉松
摘 要: 為了完成高頻率下相關器的時分復用,相關器的低頻輸入數據須通過循環移位寄存器移位。提出了在FPGA中采用多級串聯FIFO核實現循環移位寄存器。對上述方案進行FPGA仿真實驗,經實測表明基于FIFO的循環移位寄存器工作穩定,能夠實時地提供準確數據給時分復用相關器模塊。
關鍵詞: FIFO; 移位寄存器; FPGA; 相關器
中圖分類號: TN915.04?34 文獻標識碼: A 文章編號: 1004?373X(2014)19?0060?03
Implementation of circulating shift?register based on FIFO
OU Chun?xiang1, YANG Jia?wei2, REN Xiao?song1
(1. Information Technology Academy of China Aerospace Science & Industry Corporation, Beijing 100071, China;
2. Defense Technology Academy of China Aerospace Science & Industry Corporation, Beijing 100854, China )
Abstract: Since the low frequency input data of the correlator should be shifted by circulating shift?register to accomplish time division multiplexing of the correlator in high frequency, an implementation method of circulating shift?register which adopts series FIFO (First input first output) core in FPGA is proposed. FPGA simulation of the scheme mentioned above was performed. The results shows that the shift?register based on FIFO works stable and can provide accurate data to the time division multiplexing correlator.
Keywords: FIFO; shift?register; FPGA; correlator
0 引 言
在高動態接收機的時域相關+FFT捕獲算法中需要進行大量的高速相關運算[1?2],因此在FPGA實現中需要產生大量的相關器。為了節省有限的FPGA資源、降低成本,同時相關運算頻率[f1]是相關輸入數據(后簡稱“輸入數據”)頻率[f2]的整數倍,因此時分復用相關器是達到目的的可行方法[3?4]。
輸入數據在頻率[f1]下經過普通移位寄存器會造成數據的丟失。只有經過循環移位才能保證在下一個輸入數據來之前,寄存器內之前的[N(N=f1f2)]個輸入數據均在[f1]頻率下進行了相關運算。由于FIFO先進先出的原理,利用深度為[N]的FIFO實現循環移位寄存器。
1 FIFO簡介
FIFO(First Input First Output)是一種先進先出的數據緩存器,如圖1所示。它與普通存儲器的區別是沒有外部讀寫地址線,控制邏輯簡單。缺點是只能順序讀寫數據,其數據地址由內部讀寫指針自動加1完成,不能像普通存儲器那樣可以由地址線決定讀取或寫入某個指定的地址[5]。
FIFO的主要參數是它的寬度和深度。FIFO的寬度指的是FIFO一次讀寫操作的數據位;深度指的是FIFO可以存儲N(設寬度為N)位數據的個數[6]。
根據FIFO工作的時鐘域,可以將FIFO分為同步FIFO和異步FIFO[7]。同步FIFO是指讀時鐘和寫時鐘為同一個時鐘。在時鐘沿來臨時同時發生讀寫操作。異步FIFO是指讀寫時鐘不一致,讀寫時鐘是互相獨立的。在本文中采用的是同步FIFO。
2 方案設計
在工程中需要2 560個相關器在124 MHz時鐘下做2 560次相關運算。輸入數據頻率為15.5 MHz,因此在124 MHz時鐘下可以使用320個相關器時分復用8次以實現2 560次相關。FPGA中的320個同步FIFO核在124 MHz時鐘下對輸入數據進行循環移位,每一個FIFO的輸出數據作為320個相關器的輸入數據進行相關運算[8]。整體方案結構如圖2所示。
320個FIFO模塊以串聯模式工作。圖2中FIFO_0和FIFO_1分別為前后兩個串聯的FIFO模塊。每個FIFO的深度為8,寬度為6 b。輸入數據在15.5 MHz時鐘下寫入至FIFO_0,每124 MHz時鐘FIFO內部數據進行一次移位,同時將最先進入FIFO的數據即移位到0位置的數據輸出給累加器ADD做相關運算。一個ADD模塊在124 MHz時鐘下時分復用8次,相當于8個相關器add7~add0。在15.5 MHz時鐘的控制下,將當前0位置上第一次輸出給ADD模塊的數據同時輸出給下一個FIFO模塊FIFO_1。每個FIFO的工作模式均與FIFO_0的一致。
以第一個FIFO為例說明FIFO模塊的具體工作過程。假設依次輸入的數據為1,2,3,4,5,6,7,8,9,10,…。具體實現過程如圖3所示。
FIFO在124 MHz時鐘下工作。一個時段指8拍124 MHz時鐘即一個15.5 MHz輸入數據時鐘,每一個時段輸入一個新數據。從第1個時段可看出,當向FIFO寫了7個數據后,讀出一個數據,按照FIFO先進先出的原則,讀出的是第一個寫進去的數據“1”(如第一時段第1行所示);下一個124 MHz時鐘將第八個數據“8”(在此稱為新進數)寫入FIFO,同時讀出第二個寫進去的數據“2” (如第一時段第2行所示);在第一時段內由于除了第一個寫入的數據“1”外,其他的數據均要被后面的時段采用,所以在讀出數據“2”后,下一個時鐘再將其回寫入FIFO,同時讀出第三個寫進去的數據“3” (如第一時段第3行所示);同理下一個時鐘將數據“3”回寫入FIFO,讀出第四個寫進去的數據“4”,依次類推。
第一時段第1行讀取的數據“1”和第二時段第1行讀取的數據“2”依次輸入到下一個FIFO中。兩個相鄰FIFO之間同一級數據應該相差8個124 MHz時鐘,即當第[i]個FIFO寫入第9個數據的同時,寫入第[i]個FIFO的第一個數據寫入第[i+1]個FIFO;也可以理解為同一個數據寫入前后兩個FIFO的時間上相差8個124 MHz時鐘。
而從圖3可以看出,第一個時段中當寫入第八個數據“8”的同時已經將寫入第一個數據“1”讀出了,所以為了滿足上述的時序關系,將讀出的數據“1”在124 MHz時鐘下打8拍再送入下一個FIFO;同理第二時段第一行讀出的數據“2”也在124 MHz時鐘下打8拍再送入下一個FIFO。將320個FIFO按照上述時序關系串聯起來就實現了2 560級循環移位寄存器。
3 仿真與分析
3.1 仿真條件
在FPGA中對上述方案進行仿真。調用320個FIFO內核以實現循環移位寄存器,320個FIFO的輸出分別作為320個相關器的輸入,320個相關器在主時鐘124 MHz下時分復用8次實現2 560個相關器。其中FIFO輸入數據的頻率為15.5 MHz,整個運算過程在主時鐘124 MHz下工作。調用的FIFO內核如圖4所示,其寬度為6 b,深度為8。輸入數據為:-2,0,0,0,-2,-6,2,6,0,0,2,2,6,0,4,2,…。
3.2 仿真結果
320個FIFO核串聯工作,連續兩個相鄰的FIFO_0和FIFO_1的時序邏輯如圖5所示[9?10]。在FIFO_0內寫滿了8個數-2,0,0,0,-2,-6,2,6的下一拍即當FIFO_0寫入第九個數“0”的同時,FIFO_1開始寫入第一個數“-2”。每相鄰兩個FIFO的時序關系都與FIFO_0和FIFO_1的一樣。320個FIFO核就是以這樣的方式連接實現循環移位寄存器。
一個FIFO同一時段在124 MHz時鐘下連續輸出八個數據,該八個數據依次在124 MHz時鐘下作相關運算,每個相關結果均打八拍等待下一個數據的到來。以圖3為例說明,最右一列的數據為FIFO的輸出數據。第一時段最右一列的數據1,2,3,4,5,6,7,8依次作相關運算,其中數據“1”的相關結果打八拍等待第二時段最右一列第一行數據“2”再作累加相關,數據“2”的相關結果打八拍等待第二時段最右一列第二行數據“3”再作累加相關,依次類推。此過程的FPGA仿真圖如圖6所示,sum0~sum7為一個FIFO輸出作相關運算的8個相關結果。
4 結 語
高動態接收機的時域相關+FFT捕獲算法需要大量相關運算,為了減少硬件資源采用了時分復用技術實現大量的相關運算。本方案將輸入數據經過多級串聯FIFO進行循環移位,再作相關運算實現了相關器的時分復用。
參考文獻
[1] 李菊,陳禾,金俊昆,等.基于FFT的兩種偽碼快速捕獲方案的研究與實現[J].電子與信息學報,2006(10):1778?1781.
[2] 謝鋼.GPS原理與接收機設計[M].北京:電子工業出版社,2012.
[3] 夏宇聞.Verilog數字系統設計教程[M].北京:北京航空航天大學出版社,2008.
[4] 勞有蘭,陳錦.基于FPGA時分復用數字基帶通信系統的設計[J].廣西工學院學報,2003(2):34?37.
[5] 張奇山,劉安芝,劉希順.基于FPGA的FIFO設計和應用[J].嵌入式技術,2009(18):50?52.
[6] 周曉波,李銳菁,趙強.基于FPGA 的高速存儲器接口應用開發[J].鐵路計算機應用,2013(5):8?11.
[7] 唐清善,費瑋瑋,蔡惠智,等.基于FPGA的高速異步FIFO的設計與實現[J].微計算機信息,2009(29):6?8.
[8] 胡輝,袁超,吳超,等.基于FPGA的GPS接收機相關器技術研究與實現[J].系統仿真學報,2011(7):1513?1517.
[9] 何清平,劉佐濂.基于FPGA設計的綜合技術分析[J].中國科技信息,2006(11):181?183.
[10] 張小新,魏厚龍.FPGA技術及其開發方式概述[J].山西電子技術,2008(5):86?87.
第一時段第1行讀取的數據“1”和第二時段第1行讀取的數據“2”依次輸入到下一個FIFO中。兩個相鄰FIFO之間同一級數據應該相差8個124 MHz時鐘,即當第[i]個FIFO寫入第9個數據的同時,寫入第[i]個FIFO的第一個數據寫入第[i+1]個FIFO;也可以理解為同一個數據寫入前后兩個FIFO的時間上相差8個124 MHz時鐘。
而從圖3可以看出,第一個時段中當寫入第八個數據“8”的同時已經將寫入第一個數據“1”讀出了,所以為了滿足上述的時序關系,將讀出的數據“1”在124 MHz時鐘下打8拍再送入下一個FIFO;同理第二時段第一行讀出的數據“2”也在124 MHz時鐘下打8拍再送入下一個FIFO。將320個FIFO按照上述時序關系串聯起來就實現了2 560級循環移位寄存器。
3 仿真與分析
3.1 仿真條件
在FPGA中對上述方案進行仿真。調用320個FIFO內核以實現循環移位寄存器,320個FIFO的輸出分別作為320個相關器的輸入,320個相關器在主時鐘124 MHz下時分復用8次實現2 560個相關器。其中FIFO輸入數據的頻率為15.5 MHz,整個運算過程在主時鐘124 MHz下工作。調用的FIFO內核如圖4所示,其寬度為6 b,深度為8。輸入數據為:-2,0,0,0,-2,-6,2,6,0,0,2,2,6,0,4,2,…。
3.2 仿真結果
320個FIFO核串聯工作,連續兩個相鄰的FIFO_0和FIFO_1的時序邏輯如圖5所示[9?10]。在FIFO_0內寫滿了8個數-2,0,0,0,-2,-6,2,6的下一拍即當FIFO_0寫入第九個數“0”的同時,FIFO_1開始寫入第一個數“-2”。每相鄰兩個FIFO的時序關系都與FIFO_0和FIFO_1的一樣。320個FIFO核就是以這樣的方式連接實現循環移位寄存器。
一個FIFO同一時段在124 MHz時鐘下連續輸出八個數據,該八個數據依次在124 MHz時鐘下作相關運算,每個相關結果均打八拍等待下一個數據的到來。以圖3為例說明,最右一列的數據為FIFO的輸出數據。第一時段最右一列的數據1,2,3,4,5,6,7,8依次作相關運算,其中數據“1”的相關結果打八拍等待第二時段最右一列第一行數據“2”再作累加相關,數據“2”的相關結果打八拍等待第二時段最右一列第二行數據“3”再作累加相關,依次類推。此過程的FPGA仿真圖如圖6所示,sum0~sum7為一個FIFO輸出作相關運算的8個相關結果。
4 結 語
高動態接收機的時域相關+FFT捕獲算法需要大量相關運算,為了減少硬件資源采用了時分復用技術實現大量的相關運算。本方案將輸入數據經過多級串聯FIFO進行循環移位,再作相關運算實現了相關器的時分復用。
參考文獻
[1] 李菊,陳禾,金俊昆,等.基于FFT的兩種偽碼快速捕獲方案的研究與實現[J].電子與信息學報,2006(10):1778?1781.
[2] 謝鋼.GPS原理與接收機設計[M].北京:電子工業出版社,2012.
[3] 夏宇聞.Verilog數字系統設計教程[M].北京:北京航空航天大學出版社,2008.
[4] 勞有蘭,陳錦.基于FPGA時分復用數字基帶通信系統的設計[J].廣西工學院學報,2003(2):34?37.
[5] 張奇山,劉安芝,劉希順.基于FPGA的FIFO設計和應用[J].嵌入式技術,2009(18):50?52.
[6] 周曉波,李銳菁,趙強.基于FPGA 的高速存儲器接口應用開發[J].鐵路計算機應用,2013(5):8?11.
[7] 唐清善,費瑋瑋,蔡惠智,等.基于FPGA的高速異步FIFO的設計與實現[J].微計算機信息,2009(29):6?8.
[8] 胡輝,袁超,吳超,等.基于FPGA的GPS接收機相關器技術研究與實現[J].系統仿真學報,2011(7):1513?1517.
[9] 何清平,劉佐濂.基于FPGA設計的綜合技術分析[J].中國科技信息,2006(11):181?183.
[10] 張小新,魏厚龍.FPGA技術及其開發方式概述[J].山西電子技術,2008(5):86?87.
第一時段第1行讀取的數據“1”和第二時段第1行讀取的數據“2”依次輸入到下一個FIFO中。兩個相鄰FIFO之間同一級數據應該相差8個124 MHz時鐘,即當第[i]個FIFO寫入第9個數據的同時,寫入第[i]個FIFO的第一個數據寫入第[i+1]個FIFO;也可以理解為同一個數據寫入前后兩個FIFO的時間上相差8個124 MHz時鐘。
而從圖3可以看出,第一個時段中當寫入第八個數據“8”的同時已經將寫入第一個數據“1”讀出了,所以為了滿足上述的時序關系,將讀出的數據“1”在124 MHz時鐘下打8拍再送入下一個FIFO;同理第二時段第一行讀出的數據“2”也在124 MHz時鐘下打8拍再送入下一個FIFO。將320個FIFO按照上述時序關系串聯起來就實現了2 560級循環移位寄存器。
3 仿真與分析
3.1 仿真條件
在FPGA中對上述方案進行仿真。調用320個FIFO內核以實現循環移位寄存器,320個FIFO的輸出分別作為320個相關器的輸入,320個相關器在主時鐘124 MHz下時分復用8次實現2 560個相關器。其中FIFO輸入數據的頻率為15.5 MHz,整個運算過程在主時鐘124 MHz下工作。調用的FIFO內核如圖4所示,其寬度為6 b,深度為8。輸入數據為:-2,0,0,0,-2,-6,2,6,0,0,2,2,6,0,4,2,…。
3.2 仿真結果
320個FIFO核串聯工作,連續兩個相鄰的FIFO_0和FIFO_1的時序邏輯如圖5所示[9?10]。在FIFO_0內寫滿了8個數-2,0,0,0,-2,-6,2,6的下一拍即當FIFO_0寫入第九個數“0”的同時,FIFO_1開始寫入第一個數“-2”。每相鄰兩個FIFO的時序關系都與FIFO_0和FIFO_1的一樣。320個FIFO核就是以這樣的方式連接實現循環移位寄存器。
一個FIFO同一時段在124 MHz時鐘下連續輸出八個數據,該八個數據依次在124 MHz時鐘下作相關運算,每個相關結果均打八拍等待下一個數據的到來。以圖3為例說明,最右一列的數據為FIFO的輸出數據。第一時段最右一列的數據1,2,3,4,5,6,7,8依次作相關運算,其中數據“1”的相關結果打八拍等待第二時段最右一列第一行數據“2”再作累加相關,數據“2”的相關結果打八拍等待第二時段最右一列第二行數據“3”再作累加相關,依次類推。此過程的FPGA仿真圖如圖6所示,sum0~sum7為一個FIFO輸出作相關運算的8個相關結果。
4 結 語
高動態接收機的時域相關+FFT捕獲算法需要大量相關運算,為了減少硬件資源采用了時分復用技術實現大量的相關運算。本方案將輸入數據經過多級串聯FIFO進行循環移位,再作相關運算實現了相關器的時分復用。
參考文獻
[1] 李菊,陳禾,金俊昆,等.基于FFT的兩種偽碼快速捕獲方案的研究與實現[J].電子與信息學報,2006(10):1778?1781.
[2] 謝鋼.GPS原理與接收機設計[M].北京:電子工業出版社,2012.
[3] 夏宇聞.Verilog數字系統設計教程[M].北京:北京航空航天大學出版社,2008.
[4] 勞有蘭,陳錦.基于FPGA時分復用數字基帶通信系統的設計[J].廣西工學院學報,2003(2):34?37.
[5] 張奇山,劉安芝,劉希順.基于FPGA的FIFO設計和應用[J].嵌入式技術,2009(18):50?52.
[6] 周曉波,李銳菁,趙強.基于FPGA 的高速存儲器接口應用開發[J].鐵路計算機應用,2013(5):8?11.
[7] 唐清善,費瑋瑋,蔡惠智,等.基于FPGA的高速異步FIFO的設計與實現[J].微計算機信息,2009(29):6?8.
[8] 胡輝,袁超,吳超,等.基于FPGA的GPS接收機相關器技術研究與實現[J].系統仿真學報,2011(7):1513?1517.
[9] 何清平,劉佐濂.基于FPGA設計的綜合技術分析[J].中國科技信息,2006(11):181?183.
[10] 張小新,魏厚龍.FPGA技術及其開發方式概述[J].山西電子技術,2008(5):86?87.