FPGA|Signal Tap抓取波形
本篇內容包括兩部分:
1、介紹一下Signal Tap如何抓取波形。
2、以剛做完的實驗為例(實現四個數碼管以1HZ的頻率進行跳變,從“0000”~“EEEE”一共16個狀態的循環跳變),觀察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觸發-捕獲模式進行波形抓取,可以勾選上。在它的下拉菜單里有很多選項,這里以其中一個為例進行解釋,如2 256sample segment的含義是分成2段,每段采樣256個樣本。
③也可以選擇storage qualifier → type (循環采樣模式),包括多種方式:continuous(連續采樣)、……。一般選擇continuous。
①Trigger flow control(觸發流程控制)有兩個選項:“Sequential”(順序的)、“State-based”(基于狀態的)
②Trigger position(觸發位置):有三個選項:“Pre trigger position”(觸發位置在前面)、Center trigger position(觸發位置在中間)、Post trigger position(觸發位置在后面)
③Trigger Conditions(觸發條件)(這個還不太會用……以后寫)
【本實驗想要觀察OUT[6…0],選中這7個輸出,鼠標🖱?停留在Trigger Condition 右鍵,選擇“Either Edge”】
上圖中Status狀態分為:Not running(未運行)、Waiting for trigger(等待觸發)、Acquiring post-trigger data(正在捕獲data)、offloading acquire data(導出捕獲到的data)。
2.1 問題與解答
問題:當筆者點紅色的小三角抓取波形的時候,發現沒有波形,此時的Status 是綠色的Waiting for trigger,這是為什么呢?應該如何解決?
答: ①waiting for trigger的意思是沒有達到觸發條件。比如說把OUT設為上升沿觸發,那么只有當OUT出現上升沿時(比如由0變為1),SignalTap才會開始波形抓取,其余時間都是處于waiting for trigger狀態,也就是陷入僵局。
②因為在本實驗的SignalTap中筆者添加了一組七段數碼管的管腳OUT1[6…0],將它們trigger 設置的是Either Edge。那么只有當7個輸出同時出現上升沿(0→1)或者同時出現下降沿(1→0)時,SignalTap才會開始波形抓取,否則就會一直Waiting for trigger。
③但經過分析發現,0→1→…→E→F變化時,7個輸出并沒有同時出現上升沿或下降沿,所以就會出現波形抓不出來的結果。
④為了驗證筆者的猜想,現在把OUT1[0]的trigger變為Rising Edge,把OUT1[6…1]變為Don’t care。點擊帶有旋轉箭頭的紅色小三角進行波形抓取,發現只有當OUT1[0]從0變為1時,state為抓取數據的狀態(如下圖所示Acquiring post-trigger data、offloading acquired data),同時在下邊的大框里可以看到抓出來的波形。其余時間都是waiting for trigger。
因此解決辦法為:把7個輸出的trigger全部改為Don’t care,也就是隨即抓波形,不用等觸發條件到才抓取。
點擊紅色小箭頭抓取波形,成功!
2.2 波形抓取結果分析
如圖所示是筆者抓到的一個波形,由邏輯值OUT1=7’b 1000000,可以知道抓到的這個是**“0”**的波形。每次點“單次運行”紅色的小三角,都會抓到一個波形。點“連續運行”紅色小三角就會看到波形的動態變化過程。
? 筆者想把0~F的波形顯示在一個頁面上,直觀地看波形的變化,但是試了好多次都沒有成功
以下是試過兩種方法:
①增加采樣點,即增加sample depth的值
②更改時間軸范圍(如下圖)
解決方法:
SignalTap用50MHz的采樣頻率太大了,應該把時鐘頻率設置為信號頻率的十倍左右。本實驗信號頻率是1Hz,所以把時鐘頻率設置為10Hz。具體方法就是編寫一個分頻器,生成頻率為10Hz的CLK1信號,把它作為SignalTap的時鐘。
生成10HZ的CLK1代碼(在原時鐘模塊添加這段代碼)
在BDF中引出CLK1
在SignalTap中clk里添加CLK1,編譯后進行波形抓取
就可以清楚地看到波形的變化了。圖中兩個黑色豎線中間的16個狀態是一個周期。
附上“代碼”和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抓取波形的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【xmind使用】黄金猪头样例
- 下一篇: lenovo小新 win10系统装ubu