精通Signaltap
一、前言。
Signaltap是嵌入式邏輯分析儀,說到嵌入式,很容易讓人想起ARM,其實Signaltap跟ARM沒有半毛錢關(guān)系。這里的嵌入是嵌到FPGA的內(nèi)部。
如果你用過Signaltap,就會發(fā)現(xiàn),每次都要綜合整個工程,再下載代碼,然后才可以使用Signaltap,這說明了Signaltap是由一些邏輯電路組成,而不是仿真。
請不要把Signaltap和Modelsim混為一談(如果是一樣的話,就不用起兩個名字了),就算兩個軟件的界面上的波形很像。
以下是Signaltap界面上的波形(代表實際的波形)。
以下是Modelsim界面上的波形(代表仿真的波形)。
二、基本操作。
首先,要確保你的工程能成功綜合,并且所消耗的資源不能為0。
然后在Quartus界面下,點開Tools菜單,打開SIgnaltap。
在SIgnaltap界面下,確保Jtag和FPGA開發(fā)板能用。
設(shè)置主時鐘,點擊紅色箭頭所指的地方。
在Filter下,一般是選擇Post-Compliation(綜合后)。
點擊List,可以看到節(jié)點名。
可以看到由原理圖或者HDL文件的節(jié)點名了,這里選擇clk50M。
這個clk50M不是隨便選的,是原理圖上的全局時鐘,這里用晶振的時鐘做為Signaltap的采樣時鐘,你也可以選PLL倍頻后的時鐘,這都是看具體情況而定。
選擇采樣深度,也就是采多少個點,這也是看具體情況而定,深度越大,需要的資源越多,這里選擇128。
確保已選中Setup標簽(紅色箭頭所指,選中為白色,未選中為灰色),然后雙擊紅圈所示區(qū)域。
Filter同樣選擇綜合后,同樣點List列出所有節(jié)點。
選擇你想要觀察的節(jié)點,這里選的是dig和segment。
dig和segment,同樣在原理圖(或者HDL文件)中有出現(xiàn)過的,是有效的節(jié)點名。
成功添加節(jié)點的話,會在Setup和Data標簽下,出現(xiàn)下圖所示。
好了,現(xiàn)在你可以在Quartus界面下,點Save all以保存所有文件,然后綜合,再到Signaltap界面下,選擇sof文件,下載(紅色箭頭所示的圖標)。
成功下載sof的話,可以看到Ready to acquire。而Instance Manager右邊有四個圖標,分別代表單次運行,連續(xù)運行,停止和讀數(shù)據(jù)。
點連續(xù)運行,就能看到Signaltap在采集數(shù)據(jù)了(數(shù)據(jù)在不斷地跳,難以觀察)。
如果你不停止掉Signaltap,是不能綜合代碼的。
因為使用Signaltap,所以會額外消耗更多的資源,如果不想使用Signaltap的話,可以在Assignments->Settings設(shè)置一下,如下圖所示。
只要去掉Enable SignalTap II Logic Analyzer前面的勾就可以了,這樣,綜合出來的電路就不帶Signaltap了(資源會減少)。
三、高級操作。
1、條件觸發(fā)。
先停止Signaltap,然后在Setup標簽下,勾選條件觸發(fā)下面的Basic AND,然后在下面輸入想要的觸發(fā)條件,這里填的是EF,意思是當dig(8bit)為十六進制的EF時,就會觸發(fā)Signaltap采樣,而其它情況不觸發(fā)。其中Basic AND是所有觸發(fā)條件相與之后為真,就觸發(fā)采樣,當然也可以選擇Basic OR(相或為真就觸發(fā)采樣)和Advanced。
如果不滿足觸發(fā)條件,Signaltap就一直顯示W(wǎng)aiting for trigger。
一般用上面的方法設(shè)置條件觸發(fā)就夠用了,如果有特殊要求,就用Signal Configuration下的條件觸發(fā),會有更強大的功能。
2、文件輸出。
在File->Export,可以把Signaltap采樣到的數(shù)據(jù),保存為其它格式的文件,其中有csv,tbl,bmp,jpg,vcd,這五種格式可選。其中csv格式適合配合MATLAB使用。
3、數(shù)據(jù)格式。
在需要觀察的節(jié)點上,右擊。
然后在Bus Display Format下,可以選擇不同的數(shù)據(jù)格式,以方便觀察。其中unsigned/signed line chart是用來觀察連續(xù)信號的波形,如DDS下的sin/cos,或者是FSK,QAM等。
4、設(shè)置時間單位。
在紅色箭頭所指的地方,右擊一下,選擇Time Units,可以設(shè)置時間單位。
我這里的采樣時鐘是50M,所以,周期是20ns。
這樣,Signaltap每采一個數(shù)據(jù),所需要的周期就是20ns。為什么這個時間單位需要人手設(shè)定?就是因為Signaltap不帶頻率計的功能(下面在Signaltap內(nèi)部原理有講述)。
5、MATLAB與Signaltap聯(lián)合使用。
首先,要把signaltap運行起來,采集到數(shù)據(jù)。
然后,在MATLAB下,添加quartus的bin文件的路徑(32位的添加bin,64位的添加bin64),然后調(diào)用alt_signaltap_run函數(shù)就可以了,但是我這里卻找不到該函數(shù),實際是有這個dll的,路徑也添加正確,該方法未果。
四、Signaltap內(nèi)部原理。
上圖是signaltap的內(nèi)部結(jié)構(gòu)圖,它是利用JTAG邊界掃描的原理來讀取FPGA內(nèi)部節(jié)點的值,然后送到buffer(緩沖器),再由JTAG把數(shù)據(jù)送到quartus下的signaltap軟件。
整個過程,都只有讀取數(shù)據(jù)的作用,至于數(shù)據(jù)的頻率(如DDS下的sin信號的頻率)是無法直接知道的,只能讓設(shè)計者自己計算得出。
五、其它問題。
1、為什么在clk50M下面,會產(chǎn)生clk50M~clkctrl這個信號?
在工藝映射表(適配后),可以查看到這個信號。
其實clk50M~clkctrl就是clk50M的buffer而已,用于提高扇出系數(shù),這里fan-out=274。
2、為什么加了Signaltap之后,原來能用的代碼,變得不能用?
因為Signaltap本身需要占用一些邏輯資源,而這些邏輯資源影響了綜合器的布局布線,所以有些時候加了Signaltap,時序反而亂了。不過,也有加了Signaltap時序變好的情況。
3、既然Signaltap采出來的信號是實際的波形,但是某些時候卻跟實際的不相符?
就算是用Signaltap采出來的波形,也是需要遵循采樣定理的,如果不滿足采樣定理,那么采出來的波形不能代表實際的波形。
而且Signaltap里面的觸發(fā)器本身有濾波的作用,所以有些很小的毛刺,采不到,但是用示波器可以看出來。
總結(jié)
以上是生活随笔為你收集整理的精通Signaltap的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Epson机器人程序执行相关命令
- 下一篇: testlink结合xmind使用