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