FPGA|Signal Tap抓取波形
本篇內(nèi)容包括兩部分:
1、介紹一下Signal Tap如何抓取波形。
2、以剛做完的實驗為例(實現(xiàn)四個數(shù)碼管以1HZ的頻率進行跳變,從“0000”~“EEEE”一共16個狀態(tài)的循環(huán)跳變),觀察SignalTap波形抓取結果,并分析一下實驗中遇到的問題以及解決辦法。實驗代碼和BDF原理圖會在篇末給出。
1 SignalTap如何抓取波形
下面逐一對SignalTap頁面進行功能及其相應的配置方法介紹。
②Device 那欄會顯示你的芯片型號,點擊Scan Chain會自動掃描。如圖顯示的是我板子的型號EP3C16。
③在SOF Manager 那一欄點擊**…** 按鍵,在彈出的框框里選擇生成的 .sof 文件 →打開 →點擊左側帶有箭頭的藍色小圖標 進行燒錄。
①Clock:點擊右側的 … 按鈕 → 在彈出框框里 Filter的下拉菜單里選擇Design Entry(all name)→ 點擊list,可以看到 Nodes Found下面的方框□里列出了project里所有的管腳→選中clk(也就是我們定義的時鐘)→ 點擊>(位于Nodes Found和Selected Nodes兩欄中間那里),在Selected Nodes里會看到剛剛選擇的clk →OK
②Sample depth 表示采樣深度(從0~128k),表示采取多少個樣點,可以在下拉菜單里進行設置。
segmented(分段采樣模式):如果想要通過segmented觸發(fā)-捕獲模式進行波形抓取,可以勾選上。在它的下拉菜單里有很多選項,這里以其中一個為例進行解釋,如2 256sample segment的含義是分成2段,每段采樣256個樣本。
③也可以選擇storage qualifier → type (循環(huán)采樣模式),包括多種方式:continuous(連續(xù)采樣)、……。一般選擇continuous。
①Trigger flow control(觸發(fā)流程控制)有兩個選項:“Sequential”(順序的)、“State-based”(基于狀態(tài)的)
②Trigger position(觸發(fā)位置):有三個選項:“Pre trigger position”(觸發(fā)位置在前面)、Center trigger position(觸發(fā)位置在中間)、Post trigger position(觸發(fā)位置在后面)
③Trigger Conditions(觸發(fā)條件)(這個還不太會用……以后寫)
【本實驗想要觀察OUT[6…0],選中這7個輸出,鼠標🖱?停留在Trigger Condition 右鍵,選擇“Either Edge”】
上圖中Status狀態(tài)分為:Not running(未運行)、Waiting for trigger(等待觸發(fā))、Acquiring post-trigger data(正在捕獲data)、offloading acquire data(導出捕獲到的data)。
2.1 問題與解答
問題:當筆者點紅色的小三角抓取波形的時候,發(fā)現(xiàn)沒有波形,此時的Status 是綠色的Waiting for trigger,這是為什么呢?應該如何解決?
答: ①waiting for trigger的意思是沒有達到觸發(fā)條件。比如說把OUT設為上升沿觸發(fā),那么只有當OUT出現(xiàn)上升沿時(比如由0變?yōu)?),SignalTap才會開始波形抓取,其余時間都是處于waiting for trigger狀態(tài),也就是陷入僵局。
②因為在本實驗的SignalTap中筆者添加了一組七段數(shù)碼管的管腳OUT1[6…0],將它們trigger 設置的是Either Edge。那么只有當7個輸出同時出現(xiàn)上升沿(0→1)或者同時出現(xiàn)下降沿(1→0)時,SignalTap才會開始波形抓取,否則就會一直Waiting for trigger。
③但經(jīng)過分析發(fā)現(xiàn),0→1→…→E→F變化時,7個輸出并沒有同時出現(xiàn)上升沿或下降沿,所以就會出現(xiàn)波形抓不出來的結果。
④為了驗證筆者的猜想,現(xiàn)在把OUT1[0]的trigger變?yōu)?strong>Rising Edge,把OUT1[6…1]變?yōu)?/strong>Don’t care。點擊帶有旋轉箭頭的紅色小三角進行波形抓取,發(fā)現(xiàn)只有當OUT1[0]從0變?yōu)?時,state為抓取數(shù)據(jù)的狀態(tài)(如下圖所示Acquiring post-trigger data、offloading acquired data),同時在下邊的大框里可以看到抓出來的波形。其余時間都是waiting for trigger。
因此解決辦法為:把7個輸出的trigger全部改為Don’t care,也就是隨即抓波形,不用等觸發(fā)條件到才抓取。
點擊紅色小箭頭抓取波形,成功!
2.2 波形抓取結果分析
如圖所示是筆者抓到的一個波形,由邏輯值OUT1=7’b 1000000,可以知道抓到的這個是**“0”**的波形。每次點“單次運行”紅色的小三角,都會抓到一個波形。點“連續(xù)運行”紅色小三角就會看到波形的動態(tài)變化過程。
? 筆者想把0~F的波形顯示在一個頁面上,直觀地看波形的變化,但是試了好多次都沒有成功
以下是試過兩種方法:
①增加采樣點,即增加sample depth的值
②更改時間軸范圍(如下圖)
解決方法:
SignalTap用50MHz的采樣頻率太大了,應該把時鐘頻率設置為信號頻率的十倍左右。本實驗信號頻率是1Hz,所以把時鐘頻率設置為10Hz。具體方法就是編寫一個分頻器,生成頻率為10Hz的CLK1信號,把它作為SignalTap的時鐘。
生成10HZ的CLK1代碼(在原時鐘模塊添加這段代碼)
在BDF中引出CLK1
在SignalTap中clk里添加CLK1,編譯后進行波形抓取
就可以清楚地看到波形的變化了。圖中兩個黑色豎線中間的16個狀態(tài)是一個周期。
附上“代碼”和BDF原理圖
代碼
module clk(CLK , // clockCNTVAL, // counter valueOV ); // overflow input CLK; output [32-1:0] CNTVAL; output OV; parameter MAX_VAL = 500_000; reg [32-1:0] CNTVAL; reg OV;always @ (posedge CLK) beginif(CNTVAL >= MAX_VAL)CNTVAL <= 0;elseCNTVAL <= CNTVAL + 1'b1; endalways @ (CNTVAL) beginif(CNTVAL == MAX_VAL)OV = 1'b1;elseOV = 1'b0; end endmodule // module cnt_en_0to1(CLK , // clockCNTVAL, // counter valueEN ,); input CLK; input EN; output [4-1:0] CNTVAL;reg [4-1:0] CNTVAL; reg OV;always @ (posedge CLK) beginif(EN) begin // work enableif(CNTVAL >= 15)CNTVAL <= 0;elseCNTVAL <= CNTVAL + 1'b1;endelseCNTVAL <= CNTVAL ; // hold same value end endmodule module dec_4to7(IN ,OUT1,OUT2,OUT3,OUT4); input [4-1:0]IN; output [7-1:0] OUT1 ; output [7-1:0] OUT2 ; output [7-1:0] OUT3 ; output [7-1:0] OUT4 ;reg [7-1:0] OUT1 ; reg [7-1:0] OUT2 ; reg [7-1:0] OUT3 ; reg [7-1:0] OUT4 ;always @ (IN) begincase(IN)4'b 0000: OUT1 = 7'b 1000000;4'b 0001: OUT1 = 7'b 1111001;4'b 0010: OUT1 = 7'b 0100100;4'b 0011: OUT1 = 7'b 0110000;4'b 0100: OUT1 = 7'b 0011001;4'b 0101: OUT1 = 7'b 0010010;4'b 0110: OUT1 = 7'b 0000010;4'b 0111: OUT1 = 7'b 1111000;4'b 1000: OUT1 = 7'b 0000000;4'b 1001: OUT1 = 7'b 0010000;4'b 1010: OUT1 = 7'b 0001000;4'b 1011: OUT1 = 7'b 0000000;4'b 1100: OUT1 = 7'b 1000110;4'b 1101: OUT1 = 7'b 1000000;4'b 1110: OUT1 = 7'b 0000110;4'b 1111: OUT1 = 7'b 0001110;endcasecase(IN)4'b0000: OUT2 = 7'b 1000000;4'b0001: OUT2 = 7'b 1111001;4'b0010: OUT2 = 7'b 0100100;4'b0011: OUT2 = 7'b 0110000;4'b0100: OUT2 = 7'b 0011001;4'b0101: OUT2 = 7'b 0010010;4'b0110: OUT2 = 7'b 0000010;4'b0111: OUT2 = 7'b 1111000;4'b1000: OUT2 = 7'b 0000000;4'b1001: OUT2 = 7'b 0010000;4'b1010: OUT2 = 7'b 0001000;4'b1011: OUT2 = 7'b 0000000;4'b1100: OUT2 = 7'b 1000110;4'b1101: OUT2 = 7'b 1000000;4'b1110: OUT2 = 7'b 0000110;4'b1111: OUT2 = 7'b 0001110;endcasecase(IN)4'b0000: OUT3 = 7'b 1000000;4'b0001: OUT3 = 7'b 1111001;4'b0010: OUT3 = 7'b 0100100;4'b0011: OUT3 = 7'b 0110000;4'b0100: OUT3 = 7'b 0011001;4'b0101: OUT3 = 7'b 0010010;4'b0110: OUT3 = 7'b 0000010;4'b0111: OUT3 = 7'b 1111000;4'b1000: OUT3 = 7'b 0000000;4'b1001: OUT3 = 7'b 0010000;4'b1010: OUT3 = 7'b 0001000;4'b1011: OUT3 = 7'b 0000000;4'b1100: OUT3 = 7'b 1000110;4'b1101: OUT3 = 7'b 1000000;4'b1110: OUT3 = 7'b 0000110;4'b1111: OUT3 = 7'b 0001110;endcasecase(IN)4'b0000: OUT4 = 7'b 1000000;4'b0001: OUT4 = 7'b 1111001;4'b0010: OUT4 = 7'b 0100100;4'b0011: OUT4 = 7'b 0110000;4'b0100: OUT4 = 7'b 0011001;4'b0101: OUT4 = 7'b 0010010;4'b0110: OUT4 = 7'b 0000010;4'b0111: OUT4 = 7'b 1111000;4'b1000: OUT4 = 7'b 0000000;4'b1001: OUT4 = 7'b 0010000;4'b1010: OUT4 = 7'b 0001000;4'b1011: OUT4 = 7'b 0000000;4'b1100: OUT4 = 7'b 1000110;4'b1101: OUT4 = 7'b 1000000;4'b1110: OUT4 = 7'b 0000110;4'b1111: OUT4 = 7'b 0001110;endcase end endmoduleBDF原理圖
fpga板子結果
--------------------------------- 完 ---------------------------------
總結
以上是生活随笔為你收集整理的FPGA|Signal Tap抓取波形的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【xmind使用】黄金猪头样例
- 下一篇: lenovo小新 win10系统装ubu