徹底掌握Quartus——Signaltap篇

一、前言。

Signaltap是嵌入式邏輯分析儀,說到嵌入式,很容易讓人想起ARM,其實Signaltap跟ARM沒有半毛錢關係。這裏的嵌入是嵌到FPGA的內部。

如果你用過Signaltap,就會發現,每次都要綜合整個工程,再下載代碼,然後纔可以使用Signaltap,這說明了Signaltap是由一些邏輯電路組成,而不是仿真。

請不要把Signaltap和Modelsim混爲一談(如果是一樣的話,就不用起兩個名字了),就算兩個軟件的界面上的波形很像。

以下是Signaltap界面上的波形(代表實際的波形)。


以下是Modelsim界面上的波形(代表仿真的波形)。

二、基本操作。

首先,要確保你的工程能成功綜合,並且所消耗的資源不能爲0。


然後在Quartus界面下,點開Tools菜單,打開SIgnaltap。


在SIgnaltap界面下,確保Jtag和FPGA開發板能用。


設置主時鐘,點擊紅色箭頭所指的地方。


在Filter下,一般是選擇Post-Compliation(綜合後)。


點擊List,可以看到節點名。


可以看到由原理圖或者HDL文件的節點名了,這裏選擇clk50M。


這個clk50M不是隨便選的,是原理圖上的全局時鐘,這裏用晶振的時鐘做爲Signaltap的採樣時鐘,你也可以選PLL倍頻後的時鐘,這都是看具體情況而定。


選擇採樣深度,也就是採多少個點,這也是看具體情況而定,深度越大,需要的資源越多,這裏選擇128。


確保已選中Setup標籤(紅色箭頭所指,選中爲白色,未選中爲灰色),然後雙擊紅圈所示區域。


Filter同樣選擇綜合後,同樣點List列出所有節點。


選擇你想要觀察的節點,這裏選的是dig和segment。


dig和segment,同樣在原理圖(或者HDL文件)中有出現過的,是有效的節點名。


成功添加節點的話,會在Setup和Data標籤下,出現下圖所示。


好了,現在你可以在Quartus界面下,點Save all以保存所有文件,然後綜合,再到Signaltap界面下,選擇sof文件,下載(紅色箭頭所示的圖標)。


成功下載sof的話,可以看到Ready to acquire。而Instance Manager右邊有四個圖標,分別代表單次運行,連續運行,停止和讀數據。


點連續運行,就能看到Signaltap在採集數據了(數據在不斷地跳,難以觀察)。


如果你不停止掉Signaltap,是不能綜合代碼的。

因爲使用Signaltap,所以會額外消耗更多的資源,如果不想使用Signaltap的話,可以在Assignments->Settings設置一下,如下圖所示。


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


三、高級操作。

1、條件觸發。

先停止Signaltap,然後在Setup標籤下,勾選條件觸發下面的Basic AND,然後在下面輸入想要的觸發條件,這裏填的是EF,意思是當dig(8bit)爲十六進制的EF時,就會觸發Signaltap採樣,而其它情況不觸發。其中Basic AND是所有觸發條件相與之後爲真,就觸發採樣,當然也可以選擇Basic OR(相或爲真就觸發採樣)和Advanced。


如果不滿足觸發條件,Signaltap就一直顯示Waiting for trigger。


一般用上面的方法設置條件觸發就夠用了,如果有特殊要求,就用Signal Configuration下的條件觸發,會有更強大的功能。


2、文件輸出。

在File->Export,可以把Signaltap採樣到的數據,保存爲其它格式的文件,其中有csv,tbl,bmp,jpg,vcd,這五種格式可選。其中csv格式適合配合MATLAB使用。


3、數據格式。

在需要觀察的節點上,右擊。


然後在Bus Display Format下,可以選擇不同的數據格式,以方便觀察。其中unsigned/signed line chart是用來觀察連續信號的波形,如DDS下的sin/cos,或者是FSK,QAM等。


4、設置時間單位。

在紅色箭頭所指的地方,右擊一下,選擇Time Units,可以設置時間單位。


我這裏的採樣時鐘是50M,所以,週期是20ns。


這樣,Signaltap每採一個數據,所需要的週期就是20ns。爲什麼這個時間單位需要人手設定?就是因爲Signaltap不帶頻率計的功能(下面在Signaltap內部原理有講述)。


5、MATLAB與Signaltap聯合使用。

首先,要把signaltap運行起來,採集到數據。

然後,在MATLAB下,添加quartus的bin文件的路徑(32位的添加bin,64位的添加bin64),然後調用alt_signaltap_run函數就可以了,但是我這裏卻找不到該函數,實際是有這個dll的,路徑也添加正確,該方法未果。


四、Signaltap內部原理。


上圖是signaltap的內部結構圖,它是利用JTAG邊界掃描的原理來讀取FPGA內部節點的值,然後送到buffer(緩衝器),再由JTAG把數據送到quartus下的signaltap軟件。

整個過程,都只有讀取數據的作用,至於數據的頻率(如DDS下的sin信號的頻率)是無法直接知道的,只能讓設計者自己計算得出。

五、其它問題。

1、爲什麼在clk50M下面,會產生clk50M~clkctrl這個信號?


在工藝映射表(適配後),可以查看到這個信號。


其實clk50M~clkctrl就是clk50M的buffer而已,用於提高扇出係數,這裏fan-out=274。

2、爲什麼加了Signaltap之後,原來能用的代碼,變得不能用?

因爲Signaltap本身需要佔用一些邏輯資源,而這些邏輯資源影響了綜合器的佈局佈線,所以有些時候加了Signaltap,時序反而亂了。不過,也有加了Signaltap時序變好的情況。

3、既然Signaltap採出來的信號是實際的波形,但是某些時候卻跟實際的不相符?

就算是用Signaltap採出來的波形,也是需要遵循採樣定理的,如果不滿足採樣定理,那麼採出來的波形不能代表實際的波形。

而且Signaltap裏面的觸發器本身有濾波的作用,所以有些很小的毛刺,採不到,但是用示波器可以看出來。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章