利用MATLAB增強MAX+PLUS II的仿真功能
MAX+PLUS II是ALTERA公司為自己的系列EPLD、FPGA提供的功能強大的設計及仿真軟件。在該軟件中,提供了從多種方法輸入、編譯一直到仿真的一系列配套功能,對于那些不是很復雜的時(shí)序邏輯設計來(lái)說(shuō),可以在一個(gè)軟件內方便地完成所有的設計及仿真工作。而對于那些復雜的設計則顯得力不從心了。
舉一個(gè)例子:對一個(gè)基于FPGA設計的雷達信號處理機,我們關(guān)心其在給定發(fā)現概率和虛警率的前提下的最小可檢測信噪比,或者在某一給定信噪比條件下其Pd、Pf是否能滿(mǎn)足要求。雖然在設計之前肯定已經(jīng)做了諸如可行性分析、性能分析等一系列的工作,但是由于數字實(shí)現必須考慮的一些問(wèn)題,如字長(cháng)效應、算法簡(jiǎn)化等,有可能使具體實(shí)現的性能比之理論分析有所下降,這個(gè)下降到底有多大?另外,采用的信號處理算法還有哪些沒(méi)有發(fā)現的缺陷?對設計者來(lái)說(shuō),能夠完全在軟件環(huán)境中通過(guò)仿真來(lái)解決這些問(wèn)題遠比在不成熟的硬件環(huán)境中反復地調試、修改來(lái)的有效率,且有更大的彈性,更容易進(jìn)行。
然而,當我們想通過(guò)MAX+POUSII軟件自帶的仿真工具對復雜設計的性能作一個(gè)評估時(shí),就會(huì )碰到許多困難。一般來(lái)說(shuō)簡(jiǎn)單仿真的步驟如圖1所示。其中,手工設置仿真輸入節點(diǎn)值只適用于輸入信號比較簡(jiǎn)單的情況,而對于復雜的輸入信號就無(wú)能為力了。如上述雷達信號處理機的輸入信號,應該是許多個(gè)周期的雷達同步信號、雷達回波信號加上取決于接收信道的帶限噪聲構成的(后兩者應有給定的信噪比關(guān)系)。這類(lèi)輸入信號不僅必須經(jīng)嚴格計算得到,而且數量巨大,很難由手工輸入。

另外,一般我們對仿真結果的分析也僅限于直接觀(guān)察,只能對相對較簡(jiǎn)單的結果作出判斷。而雷達信號處理機則必須做蒙特卡洛實(shí)驗(海量實(shí)驗)來(lái)統計其性能(如統計給定信噪比下的Pd、Pf),或對處理結果進(jìn)行各種分析(如時(shí)頻分析)來(lái)判斷處理器是否最佳等。這樣,對仿真結果的分析也不能簡(jiǎn)單地判斷,必須經(jīng)專(zhuān)門(mén)的數學(xué)計算才能給出結論。
由此看來(lái),MAX+PLUS II的仿真功能已經(jīng)不能滿(mǎn)足對復雜設計進(jìn)行仿真的要求,我們必須另找方法。當然,如果有像COSSAP這樣的軟件的話(huà),就不存在上述問(wèn)題了。但對于大多數設計者來(lái)說(shuō),他們一般很難有機會(huì )接觸到這些工作站上的大型軟件,更普及的是像MAX+PLUS II、MATLAB這樣的通用工具軟件。
我們知道,MATLAB是MathWorks公司推出的一種面向科學(xué)與工程計算的高級(語(yǔ)言)軟件,它集科學(xué)計算、自動(dòng)控制、信號處理、神經(jīng)網(wǎng)絡(luò )、圖像處理等于一體,具有極高的編程效率。它可以極方便地產(chǎn)生各種信號,進(jìn)行各種變換、統計,另外它的繪圖功能也極為強大。它的這些特點(diǎn)正好可以彌補MAX+PLUS II在仿真功能上的缺陷。因此,本人在這里介紹一種利用MATLAB來(lái)產(chǎn)生復雜的仿真輸入信號,并對仿真輸出信號進(jìn)行分析的方法。
1 聯(lián)合仿真方法介紹
1.1 聯(lián)合仿真流程
我們先介紹MATLAB與MAX+PLUS II聯(lián)合仿真的流程,以使大家心中有一個(gè)概念。然后再分別介紹各部分的實(shí)現。聯(lián)合仿真流程為:
(1)先在MATLAB中產(chǎn)生原始信號,并轉換為2/16進(jìn)制序列;
(2)利用自己編寫(xiě)的MATLAB函數按一定格式生成向量文件(*.vec,純文本文件);
(3)在MAX+PLUS II中,打開(kāi)你要仿真的FPGA源文件,設置為“當前工程”并作編譯;
(4)打開(kāi)simulator,選“FileInputs/Outputs”,輸入在MATLAB中生成的向量文件名,按:“確定”按鈕生成*.scf文件;
(5)進(jìn)行仿真;
(6)選菜單“FileCreate Table Files”,生成相應的*.tbl文件(純文本文件);
(7)回到MATLAB下,運行自己編寫(xiě)的函數,自動(dòng)從Table文件提取需要的輸出數據、進(jìn)制轉換(變?yōu)槭M(jìn)制),生成仿真結果序列;
(8)對結果序列進(jìn)行進(jìn)一步分析、處理。
1.2 仿真輸入文件
在MAX+PLUS II的仿真輸入文件中有一種文本形式的向量文件(Vector File),其后綴名為“*.vec。這種文件是用一定格式的文本來(lái)描述仿真信號的。我們可以很方便地使用任何純文本編輯器來(lái)書(shū)寫(xiě)文件,定義仿真時(shí)間長(cháng)度,以相對/絕對時(shí)間單位來(lái)定義周期重復的輸入信號(如時(shí)鐘)和其它復雜輸入信號。下面給出一個(gè)該文件的簡(jiǎn)單例子:
%時(shí)間單位缺省為以%
START 0; %定義仿真開(kāi)始、結束時(shí)間%
STOP 1000;
iNTERVAL 100; %定義時(shí)間步長(cháng):100ns%
INPUTS CLOCK;
PATTERN
01; %相對向量值定義:CLOCK %
%每100ns翻轉一次%
INPUTS DATAINX DATAINY;
PATTERN %定義兩個(gè)輸入信號%
%DATAINX和DATAINY%
0>00
220> 10
320> 11%絕對時(shí)間描述%
570> 01%大于號前為絕對時(shí)間值%
720> 11%大于號后為兩個(gè)輸入值%
;
INPUTS CLEAR;
PATTERN
0>1%產(chǎn)生寬度100ns的清零信號%
100>0%100ns后CLEAR信號保持高電平%
在這個(gè)例子中,定義了一個(gè)周期為200ns的時(shí)鐘信號、一個(gè)100ns以前起作用的清零信號(高電平有效)以及兩個(gè)輸入信號DATAINX、DATAINY。在實(shí)際使用時(shí),我們可以用同樣的方法方便地產(chǎn)生時(shí)鐘、復位等常用信號。而對于復雜的輸入信號,可以先用MATLAB來(lái)產(chǎn)生,然后以相對時(shí)間的方式寫(xiě)入向量文件。
在產(chǎn)生復雜輸入信號之前,必須注意以下幾點(diǎn):
第一,MATLAB產(chǎn)生的是浮點(diǎn)或整數信號,而數字模塊的輸入為N位二進(jìn)制數,這之間有一個(gè)進(jìn)制轉換的問(wèn)題。因此,我們先要根據要采用的A/D位數對原始信號進(jìn)行量化。
第二,在MAX+PLUS II的仿真器中,數據可以采用2/8/10/16進(jìn)制顯示格式,但其十進(jìn)制顯示用的是無(wú)符號數的方式,在表示那些補碼形式的2/8/16進(jìn)制數時(shí)會(huì )發(fā)生錯誤,因此必須把輸入信號轉換為2/16進(jìn)制數。
第三,進(jìn)制轉換程序必須自己編制。因為MATLAB是用字符串來(lái)表示2/8/16進(jìn)制數的,雖然有一些進(jìn)制變換的函數(如HEX2DEC、DEC2HEX等),但尚不能滿(mǎn)足需要,必須在此基礎上自己編制新的函數。
1.3 仿真輸出文件
向量文件產(chǎn)生后,就可以進(jìn)行仿真了,仿真結果轉換成Table文件輸出。Table 文件示例如下。
INPUTS clk reset din;
OUTPUTS y
UNIT ns %定義時(shí)間單位%
RADIX HEX; %定義顯示進(jìn)制%
PATIERN
% r %
% e
% csd %
% lei %
% ktny %
0.0>X 0 0000=0000
40.0>X 1 0000=0000
50.0>0 1 0000=0000
……
1475.0>1 1 0000=0000
1500.0>X X XXXX=XXXX
Table文件的構成與向量文件大致相同。它的開(kāi)始部分是注釋?zhuān)ㄍ瑯邮且裕?hellip;%標注的文字),接著(zhù)是對輸入/輸出信號、時(shí)間單位、顯示采用進(jìn)制的定義,第三部分就是對輸入/輸出信號在仿真后的列表。其中,“>”號以前的是時(shí)間值,“=”號后面則是我們關(guān)心的仿真輸出結果了。根據Table文件的這些特點(diǎn),我們可以編制MATLAB函數將關(guān)心的東西(如時(shí)間值、某輸出結果)提取出來(lái)形成數據序列,以便后續處理。在這里要注意一個(gè)問(wèn)題,就是Table文件中會(huì )對每一個(gè)信號的變化時(shí)刻都進(jìn)行記錄,我們用圖2的一個(gè)簡(jiǎn)單的D觸發(fā)器的部分仿真時(shí)序來(lái)作說(shuō)明,圖中示出了D觸發(fā)器的輸入信號D、時(shí)鐘,以及其輸出信號Q,在這一段仿真中,Table文件會(huì )記錄從T1~T9的9個(gè)信號變化的時(shí)刻,這使得輸出信號的每一個(gè)值被記錄了多次。如果我們對此不加甄別就照單全收的話(huà),就會(huì )對此后的分析工作帶來(lái)麻煩。因此,對于同步數字系統,我們只應提取那些我們關(guān)心的時(shí)鐘上沿/下沿時(shí)刻的輸出值。

2 應用實(shí)例
本人在自己的設計工作中使用了以上介紹的這種方法。我設計的是一個(gè)單脈沖雷達回波信號處理機,基本原理是信號的能量積累后檢測,其中采用了較復雜的信號處理算法,在原理驗證階段采用的是固定門(mén)限檢測。在用MAX+PLUS II設計完該信號處理機后,現實(shí)的問(wèn)題就是要在給定Pd、Pf的條件下,根據具體的算法確定檢測門(mén)限。我們先在接收機上對接收機噪聲用示波器進(jìn)行了測量并存儲了大量數據,然后將測量結果讀入MATLAB,形成一維數組。然后按以上介紹的方法對噪聲數據進(jìn)行兩種處理:一是產(chǎn)生模擬回波信號(或采用真實(shí)回波信號采樣序列)、信號噪聲按一定信噪比混合、加上同步脈沖后形成多個(gè)周期的“有信號回波”,二是完全是噪聲的“無(wú)信號回波”;再結合其它必要的輸入信號(如時(shí)鐘信號、復位信號等)生成向量文件,在MAX+PLUS II中仿真后,分別提取仿真結果中的“有/無(wú)信號”的兩種能量積累結果進(jìn)行分析,初步確定檢測門(mén)限,并由此結合理論分析對其檢測性能進(jìn)行評估。
當然,這種完全在軟件環(huán)境中進(jìn)行性能分析的方法并不是萬(wàn)能的,它只能也只應起到輔助的作用,我們采用它的目的是為了使我們的設計變得更經(jīng)濟、更省時(shí)、更可靠。畢竟,一個(gè)設計最終是要形成硬件,并在實(shí)際應用中去真正檢驗它的品質(zhì)的。
總之,由于FPGA方便靈活的特點(diǎn),使得這種器件在數字設計領(lǐng)域的應用越來(lái)越廣泛。而作為一個(gè)設計者,必須利用設計軟件的開(kāi)放性,充分利用其它各種手段來(lái)保證我們的設計的可靠性,提高設計的品質(zhì)。
評論