SignalTap II——基本使用和高級技巧


  本文以4個led燈閃爍,來介紹 SignalTap II 的使用。

一、Verilog案例

  led燈以1秒的時間循環左移,代碼如下:

 1 module led
 2 //========================< 參數 >==========================================
 3 #(
 4 parameter TIME              = 26'd5000_0000       //1s
 5 )
 6 //========================< 端口 >==========================================
 7 (
 8 input   wire                clk                 , //時鍾,50Mhz
 9 input   wire                rst_n               , //復位,低電平有效
10 output  reg     [ 3:0]      led                   //4位led燈
11 );
12 //========================< 信號 >==========================================
13 reg  [25:0]                 cnt                 ;
14 wire                        add_cnt /*synthesis keep*/ ;
15 wire                        end_cnt /*synthesis keep*/ ;
16 
17 //==========================================================================
18 //==    0.2秒計數
19 //==========================================================================
20 always @(posedge clk or negedge rst_n) begin
21     if(!rst_n)
22         cnt <= 'd0;
23     else if(add_cnt)begin
24         if(end_cnt)
25             cnt <= 'd0;
26         else
27             cnt <= cnt + 1'b1;
28     end
29 end
30 
31 assign add_cnt = 1'b1;
32 assign end_cnt = add_cnt && cnt== TIME-1'b1;
33 
34 //==========================================================================
35 //==    led燈循環左移
36 //==========================================================================
37 always @(posedge clk or negedge rst_n) begin
38     if(!rst_n) begin
39         led <= 4'b1110;
40     end
41     else if(end_cnt) begin
42         led[3:0] <= {led[2:0],led[3]};  //右移:{led[0],led[3:1]};
43     end
44 end
45 
46 
47 endmodule

 

二、SignalTap II 的使用

1、選擇 File > New 打開 SignalTap II 窗口,選擇 SignalTapII Logic Analyzer File 並單擊OK。

2、SignalTap II界面如下圖所示,保存文件並命名為 led.stp,接下來彈出的兩個對話框分別點擊 OK 和 Yes。

3,添加待觀察信號。在 Setup 標簽頁中,雙擊空白處打開 Node Finder 窗口,在 Filter 區域中選擇SignalTap II:pre-synthesis,輸入信號名字后然后單擊 List 即可找到能被觀察到的節點。我們選中 led 和 key,然后單擊 ”>” 按鈕,最后單擊OK。

接着設置這些信號之間的邏輯關系與和或,下面則是對單個信號設置觸發條件,如這里將 end_cnt 的觸發條件設置為上升沿觸發,其他信號則為 Don't care。

4、添加時鍾信號。在 Signal Configuration 面板中的單擊 Clock 部分右邊的 ”…” 打開Node Finder窗口,在 Filter 處選擇SignalTap II:pre-synthesis。輸入時鍾名字后然后單擊 List 即可找到需要的時鍾信號。我們選中 clk,然后單擊 ”>” 按鈕,最后單擊OK。

5,設置采樣和觸發的相關信息。

采樣深度:值越大,所能觀察信號的時間范圍就越大,消耗的RAM資源也越多。此處選擇128。
采樣次數:不勾選則默認為1。如果選擇為 4 32,則SignalTap會連續累計到4次采樣成功后,顯示這4次的波形,每次波形深度為32。此處不勾選。
觸發方式:有 Sequential 和 State-based,此處選擇Sequential。
觸發位置:Pre為觸發點前的深度小於觸發點后的深度,Center為觸發點的前后深度相等,Post為觸發點前的深度大於觸發點后的深度。此處選擇Center。
觸發級數:默認為1,共可選擇1-10級觸發,此處選擇1級。

6,SignalTap II與板卡連接。首先保存這次的SignalTap設置,然后回到 Quartus 點擊編譯工程生成 sof 文件。之后在 SignalTap II 窗口右上方中的 Hardware 部分單擊Setup 選擇 USB-Blaster,最后點擊 SOF Manager 部分單擊“...”選擇 sof 文件,再點擊 ↓ 將該 sof 文件下載到板卡上。

7,點擊如下按鈕即可看到在 Data 處看到觸發后的波形。

8,刪除 SignalTap II。帶有 SignalTap 的工程編譯時間會變久,因此使用完后需要刪除工程中的 SignalTap II 文件,有以下兩種常用方法。

  方法1:在Quartus II界面中選擇 Assignments > Settings > SignalTap II Logic Analyzer,把 Enable SignalTap II Logic Analyzer前面的勾去掉。

  方法2:在 Quartus II 界面的 Files 點擊 .stp 文件,右鍵選擇 Remove File from Project,直接從工程中去除 SignalTap II 文件。

 

三、多次觸發

  多次觸發即上面第5條說的采樣次數,如果選擇 4 32,那么連續滿足4次采樣條件后,SignalTap 就會顯示這4次的波形,每次深度是32。如下所示:

 

四、多級觸發

  上文說到的多級觸發其實是一種高級的 SignalTap II 使用方法。和多次觸發有所區別,多次觸發是指同一個觸發條件,多次滿足后才顯示波形。而多級觸發是依次滿足一級、二級、三級....觸發條件后,波形才會顯示。SignalTap II 中最多支持10級觸發,其順序為從左到右。

  例如現在有一個工程,兩個key按鍵分別控制兩個led燈的亮滅,SignalTap II 中多級觸發選擇為2,在觸發條件中的設置如下所示。那么在捕捉觸發時,只有先按下按鍵0再按下按鍵1這個條件被滿足,SignalTap II 中才會顯示波形。

 

五、信號丟失的解決辦法

  除開端口信號外,程序內部定義的 wire 和 reg 信號有時會被 Quartus 編譯綜合時優化掉,導致在 SignalTap II 中添加信號時找不到。解決辦法是在待觀察的 wire 信號后的分號前加上 /*synthesis keep*/對於 reg 信號則加 /*synthesis noprune*/ /*synthesis preserve*/,如下所示:

wire [15:0] a /*synthesis keep*/;
reg  [15:0] b /*synthesis noprune*/;
reg  [15:0] c /*synthesis preserve*/;

  兩者的不同之處在於:/*synthesis noprune*/ 是避免 Quartus II 優化掉沒 output 的reg,而 /*synthesis preserve*/ 避免 Quartus II 將 reg 優化為常數或者合並重復的 reg,若是想觀察整個模塊中的 reg 信號,則在module之后添加/*synthesis noprune*/

module test(clk,rst,data)/*synthesis noprune*/

   好像......上面的方法有時候會失效,試試加載 wire/reg前......

 

六、SignalTapII失效的解決辦法

   有時按照步驟,根據提示進行編譯,編譯完成后下載程序,點擊觸發仍然顯示需要編譯。再次編譯下載點擊觸發又說要編譯,怎么回事?

  原因:該 SignalTap 文件其實已經被工程移除的,也可能是自己在文件夾里刪除了 .stp 文件。

  辦法:在該 Signaltap 頁面中 save as,另保存一下即可。

 


免責聲明!

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



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