SignalTap II邏輯分析儀的使用


一、例子

       我們使用如圖1所示的verilog代碼所實現的開關電路作為例子。這個電路把DE系列開發板上的前8個開關簡單的和對應的8個紅色LED相連接。它是這樣工作的:在時鍾(CLOCK_50)的上升沿讀取開關的值,放入對應的寄存器,寄存器的輸出與紅色LED直接相連接。

 

 

       按照圖1代碼實現該電路,鎖定引腳,編譯整個工程等等,這些在這里不再重復累述。

 

二、使用SignalTap II軟件

       在本文的第一部分,我們將建立SignalTap邏輯分析儀來探測8個LED開關的值,同時,我們將設定邏輯分析儀的觸發信號為當第一個開關(LED[0])為高電平。

1.       選擇File->New打開邏輯分析儀窗口,該窗口如圖2所示。選擇SignalTap II邏輯分析儀文件並點擊OK。

 

 

2.       SignalTap II界面如圖3所示。保存文件並命名為switches.stp。在下一步如圖4所示對話框中點擊OK,接下來出現對話框”Do you want to enable SignalTap II file ‘switches.stp’ for the current project?”詢問是否在當前工程中使用SignalTap II,點擊Yes(圖5)。現在,SignalTap II文件switches.stp已經和當前工程相關聯了。

 

注意:如果我們需要在工程中不使用該SignalTap II文件,或者不使用SignalTap II邏輯分析儀,在Quartus II界面中選擇Assignments->Settings。然后在打開窗口左邊的分類列表中選擇SignalTap II Logic Analyzer,如圖6所示。可以把Enable SignalTap II Logic Analyzer前面的勾去掉來關閉邏輯分析儀。在一個工程中可能同時會有多個SignalTap文件,但在同一時刻只能有一個有效。多個SignalTap II文件是非常有用的,比如工程很大,在工程中不同的部分都需要用SignalTap II來捕捉信號,這樣探測不同的部分時我們只需要使用不同的SignalTap II文件就可以了,避免反復設定SignalTap II文件。按照步驟1和步驟2可以建立新的SignalTap II文件,不同的SignalTap II文件擁有不同的文件名。如果要改變當前工程中已經關聯的SignalTap II文件,在圖6中的SignalTap II File name選擇框中點右邊的瀏覽按鈕,選擇所需要的SignalTap II文件,然后點擊Open,最后點擊OK就可以了。在本教程中,我們選中Enable SignalTap II Logic Analyzer選項並使用switches.stp文件。設定好后點擊OK按鈕關閉設置窗口。

 

 

 

3.       現在我們需要把工程中想要觀察的信號結點添加進來。在SignalTap II窗口中的Setup標簽頁中,雙擊灰色字體記號”Double-click to add nodes”的區域,就會打開Node Finder窗口,如圖7所示。在Filter區域中,選擇SignalTap II:pre-synthesis,然后單擊List,在Nodes Found區域中將會顯示在工程中能被觀察到的節點列表。在這里我們選中SW[0],SW[1]…到SW[7],然后單擊”>”按鈕,這樣就把要觀察的開關節點添加到SignalTap II中。最后單擊OK。

 

 

4.       在SignalTap II邏輯分析儀能正常工作之前,我們需要為SignalTap II模塊指定驅動時鍾,在例化時,SignalTap II模塊包含在我們的設計中。在SignalTap窗口Signal Configuration面板中的單擊Clock部分右邊的”…”打開Node Finder窗口。點擊List,顯示所有能被添加為時鍾的信號節點,然后雙擊CLOCK_50,結果如圖8所示,最后點擊OK。

 

 

5.       在SignalTap窗口中Setup標簽頁中,選中Trigger Conditions列中的單選框,然后在單選框右邊的下拉菜單中選擇Basic。右鍵節點SW[0]相對應的Trigger Conditions單元,選擇High,如圖9所示。這樣設置以后,當DE系列開發板上對應的第一個開關被設置為高電平時,邏輯分析儀將會開始運行捕捉數據。注意到我們可以右鍵Trigger Conditions列單元中的添加進來的任何信號節點,並可以選擇一系列不同的觸發條件。當所有這些條件都同時滿足時實際的觸發條件才成立。在本文中,我們選擇觸發條件SW[0]為高電平,SW[1],SW[2]…SW[7]設為默認值Don’t Care,即觸發條件和SW[1],SW[2]…SW[7]的值無關。

 

 

6.       接下來我們還需要正確的建立硬件環境。首先,確保DE系列開發板已經和電腦連接好且電源已經開啟。然后,在SignalTap II窗口右上方中的Hardware部分,單擊Setup,打開如圖10所示的窗口,在Available Hardware Items菜單中雙擊USB-Blaster,最后點擊Close。

 

 

7.       最后一步就是重新編譯整個工程。在Quartus II窗口中,選擇Processing->Start Compilation,接下來會彈出提示說需要保存改動,這里選擇Yes。編譯完后,打開Tools->Programmer,把重新編譯的工程下載到DE系列開發板上。

 

三、使用邏輯分析儀觀察信號

       現在工程中嵌入的SignalTap II邏輯分析儀已經例化完成,並已經加載到DE系列開發板上,我們可以像使用外部的邏輯分析儀一樣使用SignalTap II邏輯分析儀來觀察信號。

1.       首先把DE系列開發板上所有的開關(0-7)設為低,當開關0的值變為1時,我們將會觀察到這些開關的值。

2.       在SignalTap窗口,選擇Processing->Run Analysis或者單擊圖標。接着,單擊SignalTap II窗口中的Data標簽頁。這時,我們應該得到和圖11相似的界面。注意到這時SignalTap II Instance Manager面板中狀態Status中顯示”Waiting for trigger”,這是因為觸發條件(開關0的值變為1)沒有滿足。(我們在之前的步驟中把開關0的值初始化設為0,如果沒有初始化開關0的值為0,現在可以把它設為0然后再一次點擊Run Analysis)。

 

 

3.       現在,我們可以把DE系列開發板上的開關0的值設為1來觀察邏輯分析儀的觸發特性。我們應該會得到如圖12所示的數據。注意到數據窗口中不僅顯示了8個開關節點在滿足觸發條件之后的數據值,還包含觸發之前的一段數據值。為了更進一步的觀察,我們可以把開關0-7的值設置為任意組合然后再次單擊Run Analysis。當開關0的值再一次被設為1時,我們將在SignalTap II Logic Analyzer中觀察到所有開關的數值。

 

 

四、高級觸發選項

       相比如上述的SignalTap II的基本觸發控制,有時在一個設計中我們可能會需要一個更復雜的觸發條件。在下面的部分中,我們將講述如何使用高級觸發條件來設置更復雜的觸發條件。

       4.1 多級觸發

       在這部分中,我們設置SignalTap II的觸發條件為:當開關0,1,2,3的值依次從0變為1,即開關0-3的上升沿按順序到來時。

1.       單擊SignalTap II窗口中的Setup標簽頁。

2.       在Signal Configuration面板中,在Trigger Conditions下拉菜單中選擇4,如圖13所示(你可能需要往下滾動Signal Configuration面板才能看到該菜單)。這樣,我們將在節點列表窗口中看到3個新的觸發條件列表。

 

3.       右鍵點擊觸發條件1中對應SW[0]的單元,並選擇上升沿Rising Edge。進行同樣的操作把觸發條件2中SW[1],觸發條件3中SW[2]和觸發條件4中SW[3]的觸發條件設為Rising Edge。這時,我們應該會得到如圖14相似的Setup標簽頁界面。

 

 

4.       重新編譯整個工程然后把配置文件重新加載到DE系列開發板上。

5.       回到SignalTap II窗口,單擊Data標簽頁,然后點擊Processing->Run Analysis。注意到窗口顯示狀態將一直會是”Waiting for trigger”直到滿足相應的觸發條件。接下來,按順序依次把開關的值從0設為1,開關1的值從0設為1,開關2的值從0設為1,開關3的值從0設為1。

完成這些工作后,我們將會觀察到如圖15所示的所有開關的值。我們可以按照這一部分所講述的方法建立不同的觸發條件,然后在DE系列開發板上檢驗這些觸發條件。

如果我們需要連續的觀察邏輯分析儀,可以點擊”Run Analysis”旁邊的”Autorun Analysis”按鈕,這樣,在任何時刻,只要滿足觸發條件,要觀察的信號值就會立刻得到更新顯示而不需要再次選擇”Run Analysis”。點擊圖標可以停止”Autorun Analysis”功能。

 

 

       4.2 高級觸發條件

       在這個部分中,我們將學習如何設置高級觸發條件。這次,我們將把觸發條件設為:當開關0,開關1和開關2中的任何一個發生跳變(上升沿或下降沿)。這意味着當這3個開關中的一個的值改變時,邏輯分析儀將會更新顯示所有觀察信號的值。注意,我們可以把要觀察信號的不同組合邏輯功能來作為邏輯分析儀的觸發條件。作為本例,我們設置為上訴的觸發方式,當我們學會了本教程后,可以自己體驗下設置不同的高級觸發方式。

1.       打開switches工程。

2.       打開SignalTap窗口並選擇Setup標簽頁,在Signal Configuration面板中確認多級觸發的值為1。

3.       在信號節點列表中的Trigger Conditions列中,確認Trigger Conditions復選框已經選中,然后在下拉菜單中選擇Advanced,如圖16所示。這將立即彈出如圖17所示的窗口,該窗口允許你使用SignalTap中觀察的信號節點中的不同信號來建立一個邏輯電路,作為觸發條件。

 

 

 

 

4.       在圖17窗口的Node List部分中,高亮選中SW[0],SW[1]和SW[2],然后把它們拖曳到右邊空白處的Advanced Trigger窗口,如圖18所示。注意,我們也可以單獨的對每個信號節點進行拉入和拖出。

 

 

5.       現在,我們需要添加必須的邏輯運算符到我們的電路中。我們需要1個OR門和3個邊沿檢測器。單擊左下Object Library窗口Logical Operators左邊的+號,可以找到OR門,如圖19所示,然后把OR門拖入到Advanced Trigger Condition Editor窗口中。

 

 

6.       這次,單擊Edge & Level Edtector並把它拖入編輯窗口中。重復3次,然后把這些元件組成如圖20所示的電路。3個輸入SW[0],SW[1]和SW[2]分別和3個edge and level detector連接,3個detector的輸出再和OR門相連。OR門的輸出連接到輸出腳Result上,輸出腳本身就已經在編輯窗口中的了。

 

 

7.       我們現在需要設置每個edge and level detector,讓它們都能檢測到下降沿或者上升沿。雙擊第一個detector,打開如圖21所示窗口,在Setting輸入框中輸入E然后單擊OK。這代表着當輸入出現下降沿或者上升沿時,detector的輸出為1。重復上訴步驟設置第二和第三個detector。

 

 

8.       為了測試上訴高級觸發條件,重新編譯工程然后重新配置DE系列開發板。接下來按照之前部分的方法運行SignalTap。我們應該會注意到,每當板上的開關0,1,2中的其中一個的值發生改變,SignalTap II邏輯分析儀都將會被觸發。

 

五、采樣深度和緩存獲取模式

       在本部分中,我們將學習怎樣設置采樣深度邏輯分析儀的Sample Depth和兩種緩存獲取模式。我們將使用之前的工程並使用分段緩存。分段緩存允許我們把數據獲取緩存分成幾個獨立並划分好大小的部分。本例中,我們將把采樣深度為256bits的緩存分成8個32bits的部分。這樣將會允許我們捕捉發生在8個連續觸發時間附近的8個不同事件。

1.       把觸發配置設回Basic並只有一級觸發。檢查觸發條件是否為SW[0]的跳變沿。

2.       在SignalTap II窗口中的Signal Configuration面板中的Data面板的Sample Depth下拉菜單中選擇256。這個選項允許我們指定在我們的設計中的觸發時刻附近總共有多少個采樣點。如果我們需要更多的采樣點來調試我們的設計,可以選擇更大的采樣深度。注意,如果采樣深度選擇過大,在我們的設計中將可能會不夠資源來實現,這樣,設計就會編譯不過。如果這種情況發生,請減小采樣深度的大小。

3.       在SignalTap II窗口的Signal Configuration面板中的Data部分,選中Segmented。然后在Segmented右邊的下拉菜單中,選擇8 32 sample segments。完成后的類似界面如圖22所示。

 

 

4.       重新編譯工程並加載配置文件。好了,我們可以使用分段獲取模式Segmented Acquistion mode來觀察我們的設計。

5.       回到SignalTap II窗口並單擊Processing->Run Analysis。現在,反復撥動開關SW[0]並在兩次撥動之間改變其他7個開關的值。當我們完成8次SW[0]的值改變時,采樣緩存中的值將顯示在data窗口中,這些顯示的采樣值是8個開關在觸發時刻附近的數值。一種可能出現的波形如圖23所示。該波形來源於實踐者在改變SW[0]的值時同時改變其他開關的狀態。

 

 

5.1使用Synthesis Keep指令

       有時我們設計中的線網型wire變量在Quartus II編譯中有可能會被優化掉。一個簡單的例子如下面的verilog代碼所示:

 

 

       該電路的原理圖如圖25所示。標注ab和abc的三角符號元件為Quartus II插入的緩存模塊,這些緩存並不改變通過它們的信號的值。

 

 

       我們想利用SignalTTap II來觀察輸入SW[2:0]和輸出LEDR[2:0]的值。同時,我們也想要觀察內部信號wire ab的值。然而,如果沒有加/*synthesis keep*/指令,只是按通常的verilog代碼來編譯,wire ab將會被優化掉,如圖26所示:

 

 

       因此,如果我們需要觀察這個內部信號,我們可以告訴Quartus II我們不想把這個線網信號優化掉。加入/*synthesis keep*/指令在所聲明的wire類型變量所在行的分號之前。圖24所示代碼已經包含了這句指令。按下面操作我們將可以觀察到這個線型變量。

1.建立新的Quartus II工程threeInputAnd,並把圖24所給出的verilog代碼輸入到工程文件中,編譯工程。

2.打開Tools->SignalTap II Logic Analyzer,然后在SignalTap II窗口的Setup面板中,右鍵並選擇Add Nodes。

3.在Filter區域中,選擇SignalTap II:pre-synthesis,點擊List。然后把節點ab,SW[0],SW[1],SW[2]和LEDR[0]加入到Selected Nodes List中並單擊OK。

4.在Signal Configuration面板中,選擇CLOCK_50作為時鍾信號。

5.設置觸發條件為當ab的值變高電平。

6.導入相關的引腳分配文件。

7.重新編譯工程。

8.打開Tool->Programmer下載配置文件到DE系列開發板上。

9.再次打開SignalTap窗口,選擇Data標簽頁。把DE系列開發板上的所有開關撥到值為0的位置。然后,單擊Processing->Run Analysis啟動邏輯分析儀。

10.把前兩個開關撥到值為1的位置,這時,觸發條件滿足,觀察信號。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM