概述
SignalTap II一直以來都是筆者調試Altera FPGA設計的利器,最近比較有時間靜下心來研究SignalTap II某些細節,雖然筆者有過不少關於SignalTap的使用,且也發表過一些博文介紹,但是還是有些有技巧如果加以利用是可以大大方便具體項目中的調試。比如本文將要介紹的觸發條件位置的選擇。
什么是觸發位置
所謂觸發位置,即trigger position。是指trigger采樣位於緩存中的位置,我們知道在設置SignalTap的時候需要設置一個采樣深度,緩存深度。那么觸發位置的設置(或者說選擇)就是指定trigger的位置,或者說指定當trigger發生時緩存數據段的選擇。
圖1:觸發位置設置
如圖1所示觸發位置有三種選擇,分別是“Pre trigger position”、“Center trigger position”和“Post trigger position”。這三個設置的意思,很明顯就是緩存數據分別選擇以trigger前、trigger為中心或者是以trigger后為主。Altera規定Pre,即12%before trigger,88%after;Center,即前后各50%;Post,即88%before,12%after。
實例演示觸發位置不同選擇
這個設置最大的好處是用戶可以在線實時修改選擇,而不需要重新編譯工程。所以在實際調試工程的時候,找到觸發條件后,常常有時候需要看trigger之后的信號情況,而有時候則需要觀察trigger之前的狀態,有了這個設置就非常方便了。
1、 首先我們來看設置為“Pre trigger position”的實例,如圖2所示。
圖2
2、 接着我們來看設置為“Center trigger position”的實例,如圖3所示。
圖3
3、 最后我們來看設置為“Center trigger position”的實例,如圖4所示。
圖4
結論
大家可以清楚看到圖2、圖3和圖4的異同,相同點是觸發的條件設置都是一樣的,不同的就是觸發后SignalTap顯示的數據段不同,圖2主要顯示trigger 發生之后的數據,圖3顯示平均展示trigger前后的數據,而圖4則主要顯是了trigger發生之前的數據。
另外,需要注意的是SignalTap最多可以設置10個觸發條件(trigger condition),如果設置了多個觸發條件,那么觸發數據緩存發生必須是所有觸發條件都發生,而且存儲數據的選擇(即trigger position)依據最后一個條件產生。比如圖2到圖4的實例,筆者設置了兩個觸發條件,分別是在one_led_out為“four”和“eight”,如圖5所示。而數據采集存儲是以eight條件觸發時為依據。
圖5:觸發條件設置
圖6:放大察看觸發位置
圖6是為了更清晰地看到觸發位置,從而放大了圖2,可以看到觸發位置位於從“seven”變化到“eight”處,即第二個觸發條件“eight”發生時刻。
最后,如果有多個觸發條件的時候,當有些觸發條件在調試的時候如果不用時,可以disable這些觸發條件,如圖7所示,將觸發條件中的“對號”去掉即可,需要的時候在選上。如圖7所示我們去使能第二觸發條件,然后重新運行SignalTap,那么獲得的結果如圖8所示,數據采樣存儲發生在單個觸發條件“four”處。
圖7:去使能某個觸發條件
圖8:采樣存儲觸發發生在“four”時刻