1 數字信號處理FPGA設計實現和驗證中存在的問題和解決方法
用FPGA來實現信號處理的算法有可能碰到以下一種或幾種情況:
a. 實現復雜的數字處理功能,例如實現DFT、數字濾波等通信信號處理算法;
b. 模塊多且功能驗證十分繁瑣;
c. 數字系統尚包含某些不確定因素,例如環路參數等;
d. 數字系統包含范圍較大的反饋環節。
實際設計中碰到的困難主要是以前的設計流程中系統方案和原理性仿真與硬件設計仿真脫節,尤其是在高速數字信號處理FPGA設計實現中沒有很好的算法仿真驗證手段。
聯合設計與仿真的方法針對數字信號處理FPGA設計實現中碰到的問題和困難,提出了有效可行的解決方法,大大提高了數字信號處理算法FPGA設計實現的效率,有較高的推廣應用價值。聯合設計與仿真的方法主要包括以下3個方面。
a. 分別創建數字系統的MATLAB仿真的數據源產生程序和實現特定功能的系統算法程序以及VHDL設計仿真程序模型;根據硬件性能對MATLAB 中的數據源進行量化,由浮點數轉化成定點數據源,把系統仿真(浮點)中的某些功能模塊改造成定點模型的MATLAB 模型,比如用定點的Simu-link模塊來建立定點模型。
b. 對VHDL源程序需要仿真的部分分層次建立VHDL Testbench文件,把原文件關聯進去;在Testbench文件中運用VHDL語言的TextIO程序包實現對輸入輸出數據的讀寫,再結合ModelSim仿真軟件實現對數字系統的仿真;仿真后輸出的測試數據可以在VHDL Testbench文件指定的輸出文本文件中找到,它的數據存儲格式是按列向量存儲的,可以直接被MATLAB讀取,做有關數學運算或者數字信號處理運算如FFT等的運算并繪圖顯示。
c. 特殊功能模塊的仿真與驗證,如對一些存儲器的初始化和仿真以及一些雙向總線的仿真都是由特定的測試方法來完成的的。
2 VHDL Testbench的概念和高效的Testbench文件編寫
2.1 FPGA測試與驗證的基本概念及方法
(1)測試基準
一旦設計者描述了一個設計,必須對其進行驗證,以檢查是否符合設計規范。最常見的驗證方法是在模擬時施加輸入激勵信號,然后“讀”該設計的輸出信號。ModelSim等波形仿真軟件可以完成這個“讀”的功能,但是輸入激勵信號需要用模擬器來完成。使用模擬器輸入激勵語言的一個主要缺點是它隨著模擬器的不同而不同。
驗證的另一個方法是用VHDL編寫一個測試模型發生器和要檢查的輸出,稱為測試基準( Test-bench) ,它既提供輸入信號,又測試設計的輸出信號。由于測試基準也可能產生錯誤,所以它必須也能被測試。建議既要有VHDL測試基準,又要用環境模型來驗證元件,稱為系統模擬。VHDL測試基準的建立可以用VHDL語言標準程序包中的TextIO來實現,具體的TextIO在下一節介紹。
系統模擬的優點是元件的激勵由系統仿真的數據源產生,近似于表示實際的模型產生。系統模擬的時間由輸入的需要模擬的數據量來決定。在通信信號處理的仿真中,往往需要很大的數據量來驗證設計的正確性,所以系統模擬的一個缺點就是所需時間過長。VHDL測試基準的優點是其速度與平臺無關,所以在某些情況下,例如前面提到的用FPGA進行信號處理的幾種情況,可以對這些情況全部或者部分地建立一個測試環境。圖1示出一個測試基準邏輯結構。設計模型接收輸入激勵(輸入信號,第一部分) ,并給出對測試基準的響應(輸出信號,第二部分) 。
(2)VHDL中的TextIO
TextIO例程是在VHDL標準中建立的,用它可以讀/寫文件,這些例程的用法如下:
Read ( ?)
Readline ( ?)
Write ( ?)
Writeline ( ?)
為了能使用這些例程,在設計程序中應引用VHDL 的標準程序包,即在VHDL代碼的開頭應當包含下面的行:
use std. TextIO. all;
這些標準程序包是在進程中對行變量或列變量進行操作,然后在程序中給這些變量進行賦值或引用。
TextIO的一個很重要的應用就是在集成電路設計或FPGA設計中的測試基準中的應用,測試基準是測試方法學中一個很重要的測試和驗證工具,它提供了設計模型和外部數據的輸入輸出接口。具體來說:模型的輸入信號可以放在外部文件中,輸出信號的期望值可以放在另一個文件中,而且這個文件是以行向量方式存取,所以可以被MATLAB的系統級仿真軟件讀取。
在測試基準中使用TextIO的方法非常靈活,也相當簡單。調用TextIO的缺點是,與普通的VHDL代碼相比,其模擬速度往往較快。
有必要指出, TextIO的調用不能被綜合,只能用于模擬。
2.2 高效的Testbench文件編寫
(1)VHDL Testbench文件實現的功能
VHDL Testbench已經成為驗證FPGA或ASIC頂層設計最典型的方法。在VHDL Testbench文件中主要完成以下任務:
·例化被測試的設計單元(DUT) ;
·在Testbench文件中對測試模塊引入測試向量;
·輸出結果可以在ModelSim仿真軟件的波形窗口顯示或者作為測試結果向量保存在文本文件中;
·也可以在ModelSim仿真軟件中比較測試輸出結果和系統仿真期望結果,驗證設計的正確性。
(2)VHDL Testbench文件結構
VHDL Testbench文件結構主要包括4部分:實體和結構體聲明、信號聲明、例化頂層設計模塊、測試進程程序。
2.3 自檢功能Testbench的程序編寫
自檢功能Testbench的實現是先通過MATLAB 等系統仿真軟件產生一系列期望輸出的測試向量,存放在期望輸出的向量文件中,然后在VHDL Testbench文件中編寫程序,讓程序在運行時對預設的不同運行時間間隔的實際輸出和期望輸出進行比較;如果實際輸出結果和期望輸出結果匹配,那么這個仿真結果就是正確的;如果實際輸出結果和期望輸出結果不匹配, Testbench就會在預設的時刻產生差異或者錯誤報告。這種功能的VHDL Testbench程序是利用VHDL語言的TextIO程序包來實現的。
自檢功能Testbench對同步電路的設計來說是很簡單的,因為同步電路實際輸出結果和期望輸出結果的比較可以在同一個時鐘沿或者滯后幾個時鐘周期進行。比較方式取決于具體的設計,比如存儲器I/O的Testbench,必須在每次有新數從某個地址讀出或者給某個地址寫入新數的時候檢查其結果;同樣,如果某個設計使用了很多的組合邏輯,那么期望輸出結果就要考慮組合邏輯的延時。
自檢功能Testbench是通過在特定時間對實際輸出和期望輸出進行比較而自動對仿真結果檢查錯誤,這種仿真方式特別適合中、小規模設計使用。當數據量很大時仿真會很慢,尤其當數據量以指數增加時,編寫Testbench會很費時和困難,這時可通過TextIO把實際輸出數據導出,聯合MATLAB等系統仿真程序對FPGA設計進行驗證。后面的應用舉例就是使用這種方法來綜合驗證FPGA設計的正確性。
在VHDL Testbench文件中,仿真輸入向量數據和期望輸出向量數據都各自存放在向量數據文本文件中,VHDL語言的TextIO程序包被用作從向量文件中讀入數據和顯示錯誤信息。
3 應用實例
在某課題數字解調部分位定時誤差估計算法設計實現中使用了VHDL Testbench聯合MATLAB系統仿真軟件,并對在FPGA中實現的位定時算法進行了驗證,證明該方法切實可行。
數字解調位定時估計算法框圖如圖2所示,其中虛線框內部分是要在FPGA中實現和驗證的算法。按照FPGA聯合設計仿真的方法步驟,首先利用MATLAB創建了該算法的浮點仿真模型,并且驗證無誤。在此基礎上,按照以下步驟進行系統的設計與調試。
第一步,根據MATLAB浮點仿真模型中的數據源產生模塊,編寫可以產生定點數據(如8比特或16比特量化的有符號數)的定點數據源產生模塊;編寫實現算法的各模塊的MATLAB定點代碼;運行程序,產生設計模塊輸入數據向量和期望輸出數據向量,并分別存儲在不同文件中。
第二步,根據位定時估計算法,用VHDL語言編程在FPGA中實現該算法,并根據第二節中講到的VHDL Testbench的寫法編寫對應的測試基準文件,其中包括VHDL語言的TextIO數據包和在程序中編寫讀入和寫出的程序代碼。
第三步,把定點數據源產生模塊產生的定點數據源分別輸入MATLAB程序和FPGA程序,如圖3所示。產生的輸出文件分別作為期望輸出向量文件和實際輸出向量文件。
第四步,分別對實際輸出向量文件中的輸出和對應期望輸出向量文件中的數據進行分析驗證,如果不正確,則重新產生輸入數據進行聯合仿真;當程序較大時,反復進行幾次聯合仿真,直到該模塊功能和時序仿真都正確為止。
需要指出,在此仿真階段,輸入數據量化要盡可能模擬硬件實際輸入數據。圖4為MATLAB定點數據源模塊A /B產生的一路輸入信號,圖5為期望輸出向量文件模塊D和實際輸出向量文件模塊E在MATLAB中繪制的圖形。
從圖中可以看出, FPGA測試的輸出和MATLAB定點仿真很相似,證明了FPGA設計的正確性。
4 結束語
在電子產品設計領域已經涌現出大量先進的設計技術與設計方法學,并且成功地應用在設計實踐中。這些先進的器件技術、設計技術逐步應用在現代信號處理電路的研發中。隨著集成電路工藝水平的提高,現場可編程器件FPGA的規模和速度快速增長,這給FPGA的設計實現和仿真驗證帶來很大困難。尤其是在信號處理算法的FPGA實現中,很難把系統仿真和設計實現仿真有機結合起來;而采用Xilinx ISE結合MATLAB對數字系統進行聯合設計與仿真的方法是解決這一問題的有效途徑。
評論