1. 程式人生 > >quatus ii------除錯利器 SignalTap II簡介(基於TIGER BOARD 板子)

quatus ii------除錯利器 SignalTap II簡介(基於TIGER BOARD 板子)

1.為什麼要用SignalTap ii:

 

在上板執行前都需要進行模擬,Modelsim 的使用可以使 FPGA 設計的許多錯誤扼殺在上板執行前,但這並不代表有了 Modelsim,我們的設計就天衣無縫了。實際上,在真正的上板執行時,我們還有可能遇到這樣那樣的問題,原因有多種: Modelsim模擬所用 Testbench 的激勵輸入有時不能囊括一切可能發生的情況,或者輸入的訊號是無法提前獲取進行模擬的實時訊號,或者我們在 FPGA 實時執行中需要檢視某些訊號等等。總之,在上板執行時,我們仍會發現各種設計問題,需要一個實時的訊號分析工具獲取 FPGA 內部的實時訊號進行除錯分析——SignalTap II 就是應這種需求而生的。

一想到數位電路設計的訊號分析,可能大家第一印象就是邏輯分析儀。邏輯分析儀固然是進行訊號分析的好工具,但是其本身也存在兩個問題:


 價格昂貴
即使是最便宜的效能很差的邏輯分析儀,價格也要幾百上千。而稍微好點的如 Agilent 等品牌的邏輯分析儀,更要上萬甚至十幾萬,對於一個 FPGA 開發者,這簡直就是天價。
 訊號引出不方便
如果要使用邏輯分析儀進行訊號分析,我們需要將待分析的訊號通過外部引腳引出,這個過程比較不方便,如果需要引出的訊號數量較多,比如說引出一個 32bit 匯流排,那更是很麻煩的一項工作——而且你的板子上還不一定存在那麼多外部引腳。

對於 FPGA 開發者而言,

SignalTap II 的出現解決了 FPGA 設計中訊號分析的難題,SignalTap II 全稱為 SignalTap II Logic Analyzer,從名稱上可以看出它本質上就是一個邏輯分析儀,不同的是它是免費的:硬體部分用 FPGA 內部資源實現,軟體整合在了 Quartus II中。它可以對 FPGA 的輸入輸出管腳及任意內部訊號進行邏輯分析,能迅速分析電路某些訊號的執行狀態和鎖定設計問題,方便 FPGA 開發者對設計進行除錯。SignalTap II 佔用的是 FPGA 的內部資源(以 RAM 資源為主),其工作原理為:將取樣的經過修改的綜合閘電路訊號儲存到內部 RAM 中,通過 JTAG 傳到 PC 機上,在軟體上顯示供開發者觀察分析。其取樣深度會受 FPGA 內部 RAM 資源容量的限制,但對取樣深度要求不是很高的訊號來說,已經足夠使用。總之, SignalTap II 這個免費的邏輯分析儀在 FPGA 開發過程中應用非常廣泛,很多情況下能替代邏輯分析儀進行訊號分析。下面就正式介紹 SignalTap II 的使用方法。


2.signalTap 的使用

 

為了方便介紹 SigalTap II 的使用,這裡對簡單的綜合閘電路進行簡單的修改,便於用SignalTap II 分析其訊號,修改後的 Verilog 程式碼如下圖所示:

module gates(clk,rst_n,and_out,or_out,not1_out,not2_out);
input clk,rst_n;
ouput and_out,or_out,not1_out,not2_out;

reg in1,in2;

[email protected](posedge clk or negedge rst_n)
if(~rst_n)
begin
in1 <= 1'b0;
in2 <= 1,b0;
end
else
begin
in1 <= ~in1;
in2 <= in1?~in2:in2;
end

assign and_out = in1 & in2;
assign or_out = in1 |in2;
assign not1 out =~in1;
assign not2_out =~in2;
endmodule

 

可以看到,修改後的綜合閘電路沒有了輸入 in1、 in2,增加了時鐘和復位輸入 clk、 rst_n,在這個電路設計中,各個門的輸入訊號 in1、 in2 不再靠外部輸入提供,而是電路內部自己產生,這樣能方便我們使用 SignalTap II 分析訊號波形。
我們建立一個 Quartus II 工程,命名為 gates,將編寫完成的 Verilog 檔案 gates.v 新增到工程中去,編譯、分配引腳、再編譯,完成工程準備。引腳分配的情況如下圖所示,需要注意的是, clk和 rst_n 分配的都是 TIGER BOARD 上對應的時鐘和復位輸入,而四個門輸出則分配給了 TIGER BOARD 上的四個 LED,其實輸出的分配並不重要,因為這一章我們使用 SignalTap II 來分析訊號而非觀察外部現象。

3.SignalTap的使用流程

 

 

有了已經編譯完成的綜合閘電路工程,我們就可以正式介紹 SignalTap II 的使用了。一般來講, SignalTap II 的使用流程分為四個步驟:

建立 SignalTap II 檔案、

設定 SignalTap II檔案、

捕獲訊號、

分析訊號
3.1 建立 SignalTap II 檔案

 

  要使用 SignalTap II 分析訊號,首先要在 Quartus II 中建立一個 SignalTap II 檔案,並將其新增到對應工程中。需要注意的是,每個 Quartus II 工程中可能有多個 SignalTap II 檔案,但只能使能( enable)其中的一個,使能後的 SignalTap II 檔案才能被編譯進工程和正常使用。
3.2 設定 SignalTap II檔案

 

SignalTap II 檔案被建立和新增到工程中後,需要對其進行設定,包括:新增取樣時鐘、新增訊號、設定取樣方式、設定觸發方式、設定觸發條件等等,這是 SignalTap 使用的關鍵步驟,只有將各個引數設定好後面的捕獲訊號才能正常進行。

3.3 捕獲訊號

 

SignalTap II 設定完成後,便可以對訊號進行捕獲(取樣)了。當訊號滿足設定的觸發條件時,便會觸發 SignalTap II 對訊號進行捕獲。整個捕獲可能一瞬間就完成,也可能要持續一段時間,這取決於觸發方式和觸發條件的選擇。

3.4 分析訊號

 

得到捕獲的訊號後,最後就是對訊號進行分析了。
 


 

4.SignalTap使用的具體操作步驟

 

開啟建立並編譯完成的 Quartus II 工程 gates,首先建立 SignalTap II 檔案。在 Quartus II主介面選擇選單欄的 Tools->SignalTap II Logic Analyzer,開啟 SigalTap II 軟體,如下圖紅框所示。

 

點選後就進入了 SignalTap II 軟體的工作介面,如下圖所示。 VITO 把 SignalTap II 軟體的主介面分為四個區域,分別是:狀態區(顯示 SignalTap II 執行狀態)、 JTAG 區(檢測 JTAG連線情況及下載韌體)、設定區(對 SignalTap 各項引數進行設定)和資料區(顯示捕獲到的訊號資料)。

 

其中資料區與設定區是重疊的兩個欄,上圖中顯示的是設定區,點選下邊欄的 Data,我們把顯示切換為資料區,資料區還沒有任何資料,這就對了,因為我們還沒有采樣嘛

 

在 SignalTap II 主介面下選擇 File->Save(或直接 Ctrl+S)儲存檔案,點選後得到下圖,名稱就用其預設名稱 stp1,點選儲存,完成 SignalTap 檔案的儲存。注意觀察對話方塊的下部有一個選擇 Add file to current project,即是否把檔案新增到當前工程中,預設是勾選的,我們自然要把 stp1 新增進工程,所以無需改變設定。

點選儲存後,會彈出是否使能的視窗,然後點選確定就可以完成signalTap的建立;

 

提示:

 

因為建立的 Quartus II 工程中沒有 SignalTap II 檔案,所以開啟 SignalTap II 軟體後它會自動為我們建立一個(未儲存的) 。如果工程中已有檔案的話,開啟軟體則會顯示已有的 SignalTap II 檔案,這時想要新建 SigalTap II 檔案的方法為: 在 SignalTap II 主介面下選擇 File->New File,即可新建一個 SignalTap II 檔案。此外,再強調一下本節開始提到的一點:一個 Quartus II 工程中可以有多個 SignalTap II檔案,但只能使能一個。我們在完成 SignalTap II 的建立與設定後,要重新編譯工程,也只有被使能的 SignalTap II 檔案會被編譯進工程中,佔用 FPGA 的資源。編譯後,也只有被使能的 SignalTap II 檔案能夠使用,如果想使用工程中其它檔案,需要重新使能其它檔案和編譯。
 

 

5.設定SignalTap檔案

 

下面進行關鍵的一步,設定 SignalTap II 檔案。一般來講,一個 SignalTap II 檔案在使用前需要進行的設定有: 新增取樣時鐘、 新增訊號、設定取樣方式、設定觸發方式、設定觸發條

 

首先新增取樣時鐘。

TIGER BOARD 上採用的是 50MHz 的晶振,在引腳分配時已經將它作為輸入的時鐘訊號 clk,我們把它作為取樣時鐘。方法是在 SignalTap II 軟體的主介面,點選設定區下圖紅框所示的位置,就會彈出 Node Finder 對話方塊,我們要記住這個對話方塊,因為一會新增訊號時還會遇到它。

 

下圖紅框的選項用於篩選訊號,一般用得較多的是 Named、 Filter 和 Look in,下面分別介紹這三個選項。
 

 

Named 是通過訊號名稱篩選訊號,預設為“*”,表示跳過名稱篩選。比如我們已經知道輸入時鐘的名稱為 clk,在選項框中輸入 clk,點選 List,則 Node Found 列表中就列出了名稱為 clk 的訊號,如下圖所示。

 

Filter 是根據訊號型別來篩選訊號,常用的有 pre_synthesis 和 post-fitting,如下圖紅框所示,其中 pre-synthesis 代表綜合前設計中的訊號,與 Verilog 設計中存在的訊號最為貼近;而 post-fitting 則添加了綜合優化、佈局佈線之後的一些訊號,與設計電路的物理結構最為貼近。一般來講,我們使用 pre_synthesis 已經足夠。


 

Look in 可以將訊號篩選鎖定在某個層次和模組進行。比如一個複雜的工程包含多個不同
層次的模組,我們在尋找訊號前需要鎖定訊號所在的層次和模組再去尋找,方法是點選下圖紅
框位置按鈕,彈出 Select Hierarchy Level 對話方塊。因為 本工程只有一個模組,無需修改。

 

介紹完篩選訊號後,下面正式把 clk 新增為取樣時鐘訊號。我們用 Filter 篩選訊號,選擇
pre_synthesis 型別,點選 List,列出了所有訊號。
首先介紹下 Nodes Found 和 Selected Nodes 兩個列表框(分別以左框和右框代替),左框中列出了所有篩選合格的訊號,右框中列出了所有將被新增的訊號。我們的工作就是挑選左框中的訊號,將想要新增到 SignalTap II 中的訊號移到右框。在左框或右框中,單擊某個訊號代表選中訊號,雙擊對於左框會把訊號新增到右框中,對於右框則會移除訊號。此外,還有在
兩框之間的四個按鍵可進行訊號新增刪除工作,它們的功能如下圖所示。

 

上圖已經將 clk 訊號新增完畢,點選 OK 就完了了取樣時鐘的新增,此時再觀察設定區的

Clock 一欄,可以看到 clk 訊號已經被新增,如下圖所示。

 

 

接下來新增訊號。在設定區的左邊空白部分右鍵單擊,選擇 Add Nodes,如下圖框 1 所示。當然也可以直接雙擊空白部分,正如框 2 提示的那樣。
 

 

然後彈出我們並不陌生的 Node Finder 對話方塊,採用 Filter 的 pre_synthesis 方式篩選出訊號,並將除 clk 和 rst_n 之外的訊號新增到 Selected Nodes 中,如下圖所示,點選 OK 完成。
 

 

這時觀察設定區左邊的空白部分,可以看到已經新增進來的訊號。

 

3、設定取樣方式

接下來設定取樣方式。第一步是設定取樣深度。取樣深度的設定位於設定區右邊的 Sampledepth 選項處,深度從 0 到 128k 可選,單位為樣點數。比如設定為 128,代表取樣深度為 128,即可以採 128 個樣點的訊號,因為工程較簡單,我們把深度設為 128 就足夠了。
 

 

第二步是設定取樣模式。取樣模式分為分段取樣和非分段取樣(也叫迴圈取樣),如果沒有
勾選上下圖紅框所示的 segment( 分段),就是非分段取樣,在訊號觸發後就連續取樣至取樣
深度,即填滿整個 SignalTap II 的儲存。我們還要選擇 Type(型別),一般設定為 Continuous
即可。

 

如果勾選上了 segment,就是分段取樣,將取樣深度分為 N 段,訊號每觸發一次就取樣

一段長度的資料,需要連續觸發 N 次來填滿整個儲存。我們需要選擇取樣的段數及每段長度,如圖中所示, 8 16sample segments 代表分成 8 段,每段 16 個取樣點。
 

 

以上就是取樣方式的介紹。我們設定取樣深度為 128,模式為連續取樣, Type 選擇Continuous,完成後如下圖所示。
 

 

4、設定觸發方式
接下來是設定觸發方式。觸發方式的設定分為觸發流程控制( Trigger flow control)、觸發位置( Trigger position)和觸發條件( Trigger conditions),如下圖所示,下面分別介紹這三個選項。
 

 

觸發流程控制分別為 Sequential(順序的)和 State-based(基於狀態的)兩種, State-based 用於較複雜的觸發控制,對於一般的訊號分析選擇 Sequential 即可。

 

 

 

觸發位置分為前端觸發( Pre)、中間觸發( Center)和後端觸發( Post),它決定了訊號觸發點在整個取樣資料中的位置,這裡我們選擇前端觸發

 

觸發條件選項可以選擇觸發條件的級別,最多可以設定 10 個級別的觸發條件。以Sequential 控制觸發為例,對於多個級別的觸發條件,其工作原理如下圖:對於非分段取樣,先等待判斷 1 級觸發條件是否滿足,若滿足則跳到觸發條件 2 等待判斷,否則繼續等待,直到最後一級的觸發條件判斷滿足後,正式開始捕獲訊號;對於分段取樣,最後一級觸發條件滿足後開始捕獲第一段訊號,後面只需滿足最後一級觸發條件條件就再次捕獲一段(這裡我們可以理解為前面級別的觸發條件滿足一次即可)。對於簡單的訊號分析,1 個觸發條件級別已經夠用,我們選擇 1

 

以上就是觸發方式的介紹。我們設定觸發流程控制為 Sequential,觸發位置為前端觸發,觸發條件為 1 個,如下圖所示。

5、設定觸發條件


設定 SignalTap 檔案的最後一步就是觸發條件的設定了。觸發條件的型別分為 Basic 和Advanced,如下圖紅框所示,一般選擇 Basic 即可。

觸發條件的設定物件是新增的訊號,方法是選中某個訊號,右鍵單擊,得到下圖紅框所示的觸發條件: Don’ t Care 代表任意條件都觸發, Low 表示訊號低電平時觸發, Falling Edge表示訊號下降沿時觸發, Rising Edge 表示訊號上升沿時觸發, High 表示訊號高電平時觸發,Either Edge 表示任意沿觸發。需要注意的是,同一列中的 Trigger Conditons 屬於同一級別,
可以給該列中多個訊號同時設定觸發條件( 注意這裡與上面設定觸發條件級別的區別!),比如給 in1、 in2 都設為 Low,那麼當 in1、 in2 訊號都為低電平時,才會觸發取樣我們設定的觸發條件為 in1:Low,即 in1 為低電平時觸發。這樣觸發條件的設定也完成了。至此,整個 SignalTap II 檔案的設定也就結束了。下面是設定區的截圖,大家可以對比下設定。別忘了設定完成後儲存檔案!最好是邊設定邊儲存!
 

5.6 捕獲訊號

 

SignalTap 設定完成後,要想用其捕獲訊號,還要編譯下 Quartus II 工程。因為此時 stp1檔案已經是 Quartus II 工程的有效 SignalTap II 檔案,我們無需其它設定,直接編譯工程即可。下面兩個圖分別是工程未新增 SignalTap II 編譯後和新增 SignalTap II 編譯後的資源佔用情況,可以看出, SignalTap 的新增的確佔用了 FPGA 的內部資源

 

 

 

編譯完成後,開啟 SignalTap II 軟體,在執行 SignalTap II 之前,需要開啟 TIGER BOARD,用 USB Blaster 連線開發板與 PC。 我們需要將 SOF 檔案通過 JTAG 區下載到開發板中。此時JTAG 區如下圖所示,標紅內容顯示沒有發現器件。

這時我們在 Hardware 中選擇對應的 USB Blaster,得到下圖,可以看到剛才標紅的內容變成了 JTAG Ready,表示 JTAG 已經就緒。 Device 一欄的內容也顯示出來了(如果仍然沒有發現 Device,可以點選右邊的 Scan Chain 搜尋器件)。

 

然後新增 SOF 檔案,點選下圖紅框位置,找到工程的 sof 檔案,點選 Open 完成新增。
新增 SOF 檔案完成後就可以下載 SOF 了,點選下圖紅框所示按鍵下載 SOF 檔案到開發板中

 


SOF 檔案下載完成後, SignalTap II 執行的一切準備工作就 OK 了,我們再將目光鎖定在控制區,如下圖所示: 1 鍵是執行鍵,點選一次捕獲一次訊號; 2 鍵是連續執行鍵,點選一次捕獲連續進行; 3 鍵是停止鍵,可以中止當前的訊號捕獲。 Status 欄顯示著捕獲狀態,分為Not running(未執行)、 Waiting for trigger(等待觸發)和 offloading acquired data(匯出捕獲到的資料), 此時顯示 Not running,表示捕獲未執行。

 

點選執行鍵,開始捕獲訊號,捕獲完成後,設定區會自動切換到資料區,得到下圖所示的
資料

至此捕獲訊號就完成了。