現在的位置: 首頁 > FPGA開發 > 正文

quatus ii——調試利器 SignalTap II

2020年02月07日 FPGA開發 ⁄ 共 5943字 ⁄ 字號 quatus ii——調試利器 SignalTap II已關閉評論

1.為什么要用SignalTap:

在上板運行前都需要進行仿真,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 的使用

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

創建 SignalTap II 文件、

設置 SignalTap II文件、

捕獲信號、

分析信號

下面詳細介紹以上四個步驟:

2.1 創建 SignalTap II 文件

要使用 SignalTap II 分析信號,首先要在 Quartus II 中創建一個 SignalTap II 文件,并將其添加到對應工程中。需要注意的是,每個 Quartus II 工程中可能有多個 SignalTap II 文件,但只能使能( enable)其中的一個,使能后的 SignalTap II 文件才能被編譯進工程和正常使用。

打開創建并編譯完成的 Quartus II 工程 ,首先創建 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 添加進工程,所以無需改變設置。

提示:

因為創建的 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 文件能夠使用,如果想使用工程中其它文件,需要重新使能其它文件和編譯。

2.2 設置 SignalTap II文件

下面進行關鍵的一步,設置 SignalTap II 文件。一般來講,一個 SignalTap II 文件在使用前需要進行的設置有: 添加采樣時鐘、 添加信號、設置采樣方式、設置觸發方式、設置觸發條件

首先添加采樣時鐘

我的板子上采用的是 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 完成。

這時觀察設置區左邊的空白部分,可以看到已經添加進來的信號。

2.3 捕獲信號 設置采樣方式

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

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

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

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

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

 設置觸發方式

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

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

觸發位置分為前端觸發( Pre)、中間觸發( Center)和后端觸發( Post),它決定了信號觸發點在整個采樣數據中的位置,這里我們選擇前端觸發

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

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

設置觸發條件

設置 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 文件的設置也就結束了。下面是設置區的截圖,大家可以對比下設置。別忘了設置完成后保存文件!最好是邊設置邊保存!

捕獲信號

SignalTap 設置完成后,要想用其捕獲信號,還要編譯下 Quartus II 工程。因為此時 stp1文件已經是 Quartus II 工程的有效 SignalTap II 文件,我們無需其它設置,直接編譯工程即可。

編譯完成后,打開 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,表示捕獲未運行。

點擊運行鍵,開始捕獲信號,捕獲完成后,設置區會自動切換到數據區,得到下圖所示的數據 :

至此捕獲信號就完成了。

最后,功能測試正常之后,是要從工程中移除signaltap的, 因為使用Signaltap,所以會額外消耗更多的資源 :

下面這張圖是包含 signaltap 的資源使用情況:

面這張圖是不包含 signaltap 的資源使用情況:

下面介紹從工程中移除 signaltap 的方法:

1、 Assignments->Settings設置一下,如下圖所示。

只要去掉Enable SignalTap II Logic Analyzer前面的勾就可以了,這樣,綜合出來的電路就不帶Signaltap了(資源會減少)。

二八杠讨论心得 恒牛所 今日黑马股票推荐 中国期货配资公司 国外股票指数期货 股票行情一般什么软件正规 苹果股票行情实时查询 牛大人配资 上证指数走势图今天行情走势图 南洋股份股票 通昭配资 国联水产股票 期货配资是违法还是违规 新浪理财平台 p2p理财平台排行榜 大盘指数上证指数图 亿配资
×