Quartus II SignalTap使用
首先說(shuō)一下SignalTap和ModuleSim的區(qū)別,很顯然這是兩個(gè)不同的東西,SignalTap是集成于Quartus II的,是通過(guò)JTAG來(lái)抓取實(shí)際信號(hào)用于分析的,而ModuleSim則是獨(dú)立于Quartus II,是用于進(jìn)行功能仿真的一個(gè)軟件。
一般的話,用ModuleSim進(jìn)行功能仿真肯定是第一步,功能驗(yàn)證正確之后,再將代碼燒寫到板子里去,查看運(yùn)行結(jié)果,這時(shí)候我們就需要用到SignalTap這個(gè)工具。這個(gè)工具位于Tools->SignalTap II Logic Analyzer里面。
操作過(guò)程簡(jiǎn)單如下:
1、完成對(duì)工程的單次編譯;
2、打開signaltap圖形界面,添加信號(hào),并作相關(guān)設(shè)置;然后保存成.stp文件,添加到工程。
3、重新編譯并下載到FPGA;
4、打開之前的stp文件,連接jtag就可以觸發(fā),并觀察信號(hào)。
打開SignalTap這個(gè)軟件,可以看到它大致分為以下幾部分。
這部分是JTAG Chain,用于顯示JTAG的連接情況、FPGA芯片的名稱以及sof文件的下載。
這部分是用于顯示當(dāng)前的狀態(tài)以及資源消耗等信息。
這部分用于顯示配置信息。Sample depth就是采集的數(shù)據(jù)的個(gè)數(shù),采集的個(gè)數(shù)越多則需要的RAM的數(shù)量就越多,RAM type則是使用的RAM的類型。因?yàn)镾ignalTap需要占用資源,所以設(shè)置不當(dāng)有可能導(dǎo)致板子上布線布不下。
----------------------------------------------------------------------------------------------------------------
clock:采樣時(shí)鐘,選擇設(shè)計(jì)中的時(shí)鐘或者從外部輸入。數(shù)據(jù)的每一上升沿被采樣,并存入到RAM中,頻率越高,對(duì)一個(gè)點(diǎn)附近采樣的數(shù)據(jù)就越多,信號(hào)就越保真;Sample depth:采樣深度,就是給采樣數(shù)據(jù)分配的存儲(chǔ)空間的大小。這兩個(gè)參數(shù)決定了一個(gè)問(wèn)題,Sample depth固定,采樣頻率越高,那么在觸發(fā)點(diǎn)附近,采樣的時(shí)間跨度就很小,只能采樣觸發(fā)點(diǎn)很短時(shí)間范圍內(nèi)的信號(hào)變化。所以這兩個(gè)參數(shù)選擇時(shí)斟酌斟酌。
segmented:這個(gè)設(shè)置允許我們分段緩存,也就是說(shuō)可以同時(shí)查看多個(gè)觸發(fā)點(diǎn),例如將128kb的采樣深度分為64k x 2的兩個(gè)緩沖區(qū),在同一個(gè)顯示區(qū)間,可以查看兩個(gè)連續(xù)的觸發(fā)點(diǎn)的觸發(fā)結(jié)果。
storage qualifier:這個(gè)設(shè)置項(xiàng),幫助在調(diào)試時(shí),指定存儲(chǔ)器中存儲(chǔ)的數(shù)據(jù)類型(the type of data stored in memory),默認(rèn)模式下,signalTap II的此選項(xiàng)為“continuously”,即連續(xù)捕獲并存儲(chǔ)每一個(gè)時(shí)鐘沿的數(shù)據(jù),另外在此模式下,可以指定捕獲并存儲(chǔ)設(shè)計(jì)中的某幾個(gè)信號(hào)。其他選項(xiàng)如下:
Input Port:當(dāng)輸入信號(hào)是高電平時(shí),捕獲數(shù)據(jù)。這個(gè)模式下會(huì)生成一個(gè)端口,我們需要給他賦予一個(gè)信號(hào)
Transitional:在指定的數(shù)據(jù)發(fā)生變化時(shí),捕獲并存儲(chǔ)數(shù)據(jù)。
Conditional:允許通過(guò)設(shè)置一個(gè)存儲(chǔ)使能信號(hào)作為存儲(chǔ)的條件,這個(gè)信號(hào)同時(shí)作為觸發(fā)輸入信號(hào)。
也就是說(shuō)當(dāng)觸發(fā)條件發(fā)生時(shí),那些信號(hào)會(huì)被存儲(chǔ)到ram中有這些設(shè)置來(lái)決定,一般就直接選擇continuously
---------------------------------------------------------------------------------------------------------
這里很重要的一個(gè)地方就是Trigger,就是設(shè)置觸發(fā)狀態(tài),比如你要監(jiān)視的是某個(gè)FIFO的輸出,如果你不設(shè)置觸發(fā),那么你一次只能看到FIFO的一個(gè)值輸出,而不是一連串的值輸出。這邊的Node就是設(shè)置的觸發(fā)信號(hào),下面的Pattern就是觸發(fā)的條件,這里的觸發(fā)條件選的是da_ren這個(gè)信號(hào)置高。當(dāng)然也可以選擇某個(gè)信號(hào)上升沿或者下降沿的情況下進(jìn)行信號(hào)捕捉。
------------------------------------------------------------------------------------------------------------------
再來(lái)看看觸發(fā)條件的設(shè)置:
trigger flow:觸發(fā)流,也即是觸發(fā)的順序控制。其可選參數(shù)是:sequential 和state-based;
sequential:在觸發(fā)采集緩沖區(qū)之前,順序計(jì)算所有的觸發(fā)條件,即當(dāng)一個(gè)觸發(fā)條件滿足后,判斷第二個(gè)觸發(fā)條件是否滿足,以此類推,所有都滿足時(shí)觸發(fā)。
state-based:此模式下,可自行定制觸發(fā)的順序,當(dāng)你對(duì)你的設(shè)計(jì)進(jìn)行調(diào)試時(shí),使得你對(duì)觸發(fā)的條件有更進(jìn)一步的控制。你可以查看每一個(gè)狀態(tài)下的觸發(fā)條件,并可以在“state-based trigger flow”的狀態(tài)機(jī)編輯器中編輯他們。
triggle position:設(shè)置采樣位置,有以下三個(gè)采樣位置可選
Pre-trigger position:保存觸發(fā)信號(hào)發(fā)生之后的信號(hào)狀態(tài)信息(88%觸發(fā)后數(shù)據(jù),12%觸發(fā)前數(shù)據(jù))。
Center-trigger position:保存觸發(fā)信號(hào)發(fā)生前后各50%的數(shù)據(jù)。
post-trigger position:保存觸發(fā)信號(hào)發(fā)生之前的信號(hào)狀態(tài)信息(88%觸發(fā)前數(shù)據(jù),12%觸發(fā)前數(shù)據(jù))。
上述的這個(gè)設(shè)置,我當(dāng)時(shí)沒(méi)理解,我一直以為是當(dāng)觸發(fā)信號(hào)發(fā)生后,采樣時(shí)鐘才啪啪啪開始采樣觸發(fā)點(diǎn)后面的數(shù)據(jù),直到采樣存儲(chǔ)的RAM慢為止;其實(shí)不是,采樣的數(shù)據(jù)放置在一個(gè)循環(huán)采集buffer(sample depth設(shè)置的大小)中,采樣時(shí)鐘總是在采樣被觀測(cè)的信號(hào),這個(gè)buffer總是用最新的數(shù)據(jù)代替后來(lái)的舊的數(shù)據(jù)。當(dāng)觸發(fā)條件發(fā)生后,signaltap繼續(xù)采集觸條件發(fā)生后的數(shù)據(jù),以便作為觸發(fā)后的數(shù)據(jù)。上述三個(gè)設(shè)置就是設(shè)置到底在觸發(fā)后,保留觸發(fā)條件發(fā)生前多少點(diǎn),并還需要采集多少點(diǎn)。理解可參考下圖:
trigger conditions:觸發(fā)級(jí)數(shù)
多級(jí)觸發(fā)功能提供了更為精確的觸發(fā)條件。多級(jí)觸發(fā)中,SignalTap Ⅱ首先對(duì)第一級(jí)的觸發(fā)表達(dá)式進(jìn)行判斷,結(jié)果為TRUE時(shí),再對(duì)第二級(jí)的觸發(fā)表達(dá)式進(jìn)行判斷,直到所有的觸發(fā)條件都成立時(shí),SignalTap Ⅱ開始捕獲信號(hào)。
-------------------------------------------------------------------------------------------------------------
???? 這里是選擇信號(hào)的地方,你要選擇什么信號(hào),就需要在這里進(jìn)行添加。
下面講一下具體的使用方法。
首先需要將工程編譯一下,然后進(jìn)入這個(gè)界面,在Signal Configuration的Clock處進(jìn)行基準(zhǔn)時(shí)鐘的選擇。?
??? Options這一欄默認(rèn)是隱藏的,點(diǎn)擊圖中紅框的位置,可以進(jìn)行顯示。Filter中的幾個(gè)選項(xiàng)具有有什么區(qū)別,我也不太清楚,默認(rèn)的值是SignalTap II:post-fitting,但是這樣的話就會(huì)有一些信號(hào)找不到,而且信號(hào)后面有~,不清楚具體什么含義。如果要查看所有的信號(hào)的話,就選擇SignalTap II: pre-synthesis,暫時(shí)不知道這個(gè)選項(xiàng)會(huì)對(duì)結(jié)果產(chǎn)生什么影響,等后續(xù)了解了會(huì)在博客上進(jìn)行更新。Look in就是將范圍縮小,如果是一個(gè)大工程的話,直接點(diǎn)擊List會(huì)得到太多的信號(hào),要找到想要的信號(hào)就會(huì)比較麻煩,Include subentities是說(shuō)是否包含子模塊,Hierarchy view則是說(shuō)是否以樹狀展示。一般兩者我們都會(huì)進(jìn)行勾選。
----------------------------------------------------------------------------------------------------------------------------------
A、對(duì)工程的編譯有兩種方式,一種是全編譯(start compilation),另一種只是做編譯(start analysis & synthesis),不做映射(mapping),這兩種方式,會(huì)對(duì)應(yīng)兩種網(wǎng)絡(luò)節(jié)點(diǎn)(node),也就是我們的信號(hào)名稱,signaltap觀察點(diǎn)的增加就是以這些node作為用戶的交互信息,“全編譯”后根據(jù)全編譯的網(wǎng)表,相應(yīng)的node信息選擇signaltap II:post-fitting;“start analysis & synthesis”編譯后,signaltap選擇signaltap II:pre-synthesis;那么這兩種有什么區(qū)別呢?
選擇pre-synthesis:以“start analysis & synthesis”綜合后的網(wǎng)表中的node信息做為signaltap的信息節(jié)點(diǎn),并且將其添加到工程后,再次編譯工程,會(huì)重新綜合并重新布局布線整個(gè)工程的所有邏輯。
選擇post-fitting:官方文檔中給過(guò)這個(gè)node的使用場(chǎng)景,大概意思是當(dāng)我們的工程編譯完成后,下載到FPGA中,發(fā)現(xiàn)工程項(xiàng)目有問(wèn)題,此時(shí)想加入signaltap來(lái)分析問(wèn)題,但又不想改變之前的布局布線的結(jié)果,此時(shí)選擇這個(gè)node來(lái)作為觀察信息的來(lái)源,quartus會(huì)自動(dòng)啟動(dòng)增量編譯來(lái)編譯增加的signaltap邏輯,保留之前的邏輯布線和布局結(jié)果。
按我的理解就是,有“預(yù)謀”的使用signaltap就使用pre-synthesis,“意外”情況就使用post-fitting。
------------------------------------------------------------------------------------------------------------------------------------
在Signal Configuration的Data部分,選擇Sample depth和RAM,這個(gè)按照默認(rèn)值就行了,如果剩余的RAM還很多,可以多采樣。
這是添加信號(hào)的圖示,后面的Trigger Conditions意思是當(dāng)滿足某個(gè)條件的時(shí)候,進(jìn)行數(shù)據(jù)采集,否則不采集。把這些設(shè)置完了之后,點(diǎn)擊QuartusII界面的Save all,然后進(jìn)行重新編譯。
接上板子之后,會(huì)看到下面這個(gè)圖,圖中有顯示當(dāng)前的芯片名稱。
編譯完成之后進(jìn)行下載,如果你要下載的是.sof文件,那么就在上圖的SOF Manager處進(jìn)行文件下載,如果下載的是.jic文件,那么就在Programmer中進(jìn)行下載,其實(shí)道理都一樣。
?點(diǎn)擊連續(xù)運(yùn)行按鈕,就是上圖中紅框的位置,就可以看到如上圖所示的界面。
可以點(diǎn)擊File->Export將數(shù)據(jù)導(dǎo)出以進(jìn)一步分析。導(dǎo)出的數(shù)據(jù)格式有.csv,.bmp等多種。當(dāng)然通過(guò)停止運(yùn)行的方式也是可以用來(lái)分析數(shù)據(jù)的。
1、使用的注意點(diǎn)
a)?? 邏輯分析儀需要硬件支持,所以不是所有的FPGA芯片都支持。
b)?? 一般流程是:完成設(shè)計(jì)——編譯工程——建立SignalTapII (.stp)文件并加入工程——重新編譯——下載設(shè)計(jì)到FPGA——在Quartus II軟件中顯示被測(cè)信號(hào)的波形;在測(cè)試完畢后將該邏輯分析儀從項(xiàng)目中刪除。
c)?? 采樣時(shí)鐘決定了顯示信號(hào)波形的分辨率,此時(shí)鐘應(yīng)該大于被測(cè)信號(hào)的最高頻率。
d)?? 邏輯分析儀的有些信號(hào)不可測(cè)量,如下:邏輯單元的進(jìn)位信號(hào)(進(jìn)位鏈)/PLL的時(shí)鐘輸出/JTAG引腳信號(hào)/LVDS信號(hào)
2、在設(shè)計(jì)中增加signalTap II,引起的問(wèn)題和解決方法
FPGA的資源是有限的。設(shè)計(jì)已經(jīng)占用了可觀的資源(%的LE,%的MB),signaltap還要和設(shè)計(jì)搶占資源。“搶占”在這里是很貼切的,既包括搶占LE、MB,還包括布局資源和布線資源。我把“搶占”造成的影響叫做“測(cè)不準(zhǔn)原理”。這一原理是貫穿signaltap調(diào)試始終的一條基本原理。一句話來(lái)說(shuō),就是“對(duì)信號(hào)的觀察會(huì)對(duì)信號(hào)引入影響”。這些影響絕大部分表現(xiàn)不出來(lái),或者是沒(méi)有刻意去觀察;但是表現(xiàn)出來(lái)的影響是原有的設(shè)計(jì)功能發(fā)生了變化。有的變化是原有的bug不出現(xiàn)了(這應(yīng)該看作是壞的變化),有的變化是新的bug出現(xiàn)了。
據(jù)我分析,造成這些影響的可能原因有以下幾個(gè):
1)signaltap工具本身存在bug。這一點(diǎn)我無(wú)法證實(shí),只是猜想。signaltap的原理是在設(shè)計(jì)的網(wǎng)表中插入觸發(fā)邏輯和存儲(chǔ)邏輯以及用于和PC機(jī)通訊的虛擬JTAG鏈路實(shí)現(xiàn)嵌入式邏輯分析儀功能的。這一插入過(guò)程是由QUARTUS軟件完成的,對(duì)用戶是不可見的。由于用戶無(wú)法控制和約束這一過(guò)程,加入signaltap后的電路功能與用戶設(shè)計(jì)初衷相違背也是可能的。
2) 被觀察的信號(hào)扇出變大,造成設(shè)計(jì)的時(shí)序余量發(fā)生變化。實(shí)現(xiàn)觸發(fā)邏輯需要在信號(hào)路徑上加入觸發(fā)器和組合邏輯,這樣一來(lái)必然造成被觀察信號(hào)的扇出變大,信號(hào)的輸出延時(shí)增大。如果被觀察信號(hào)的時(shí)序很緊張的話,加大信號(hào)的延時(shí)可能使時(shí)序關(guān)系變好(原有的bug不出現(xiàn)了),也可能惡化其時(shí)序(bug出現(xiàn)得頻繁了或新的bug出現(xiàn)了)。
3) 由于“搶占”的存在,造成設(shè)計(jì)的時(shí)序余量發(fā)生變化。由于觸發(fā)邏輯和存儲(chǔ)邏輯的加入,FPGA的資源要重新分配。原設(shè)計(jì)在FPGA內(nèi)的布局位置和布線資源會(huì)發(fā)生變化,時(shí)序也會(huì)受到影響。往往加入signaltap后,布局布線后的時(shí)序分析結(jié)果會(huì)比原來(lái)差。
??? 解決上述矛盾的方法是盡可能少地添加被觀察信號(hào),常用的幾個(gè)方法是:
1) 在每次重新編譯之前,對(duì)信號(hào)的保留做一個(gè)評(píng)估,如果被觀察信號(hào)被證明與要查找的問(wèn)題無(wú)關(guān),就刪除這個(gè)信號(hào)。
2)? 在每次編譯成功之后,要查看編譯報(bào)告,如果系統(tǒng)的邏輯資源利用比例在95%以上,就要考慮去除一些被觀察信號(hào)或去除幾個(gè)觸發(fā)級(jí)別,或者減小采樣深度。
3)? 如果有必要的話,把僅需要作為觸發(fā)條件的信號(hào)的采樣使能關(guān)閉也能顯著減少邏輯資源的占用。
4)? 系統(tǒng)存儲(chǔ)資源的占用比例也要考慮在內(nèi),不可占用太多。與此相關(guān)的選項(xiàng)是采樣深度、信號(hào)個(gè)數(shù)、信號(hào)的采樣使能是否關(guān)閉。
5)? 編譯成功后,要查看時(shí)序分析報(bào)告。如果系統(tǒng)時(shí)序下降很大或者被觀察信號(hào)的時(shí)序不能滿足,要考慮采用上面的方法減少對(duì)邏輯資源的占用。
另外,采樣時(shí)鐘的選擇對(duì)系統(tǒng)的整體時(shí)序影響也很大。選取的原則是:
1)? 盡可能從設(shè)計(jì)的頂層選擇信號(hào)作為采樣時(shí)鐘,而不是隨便把哪個(gè)module的輸入時(shí)鐘作為采樣時(shí)鐘,以利于QUARTUS優(yōu)化全局時(shí)鐘資源的利用。
2)? 在保證觀察精度的前提下,選擇較低頻率的時(shí)鐘。 ?
采樣時(shí)鐘本質(zhì)上是觸發(fā)條件之一(最基本的觸發(fā)條件),如果恰當(dāng)?shù)倪x取非時(shí)鐘信號(hào)(沒(méi)有確定頻率的信號(hào))作為采樣時(shí)鐘,可以起到事半功倍的效果。
總結(jié)
以上是生活随笔為你收集整理的Quartus II SignalTap使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 遥感(3):航空遥感和航测成图
- 下一篇: linux 目标文件(*.o) bss,