在之前的設(shè)計開發(fā)時,利用modelsim得出中間某單元的數(shù)據(jù),并且輸入也是設(shè)計者在testbench中自己給出的。但是,實際應(yīng)用時,外部輸入的信號不一定和我們在testbench中所描述輸入的信號相同,就有可能導致RTL仿真成功,但是下板測試失敗。
signal tap logic analyzer 采集并顯示FPGA設(shè)計中的實時信號行為,從而無需額外的I/O管腳或者外部實驗室設(shè)備即可檢查正常器件操作期間內(nèi)部信號的行為。
在數(shù)據(jù)獲取期間,器件中的存儲器模塊存儲采集的數(shù)據(jù),然后通過JTAG通信電纜將數(shù)據(jù)傳輸?shù)竭壿嫹治鰞x。
下圖為signal tap logic analyzer的任務(wù)流程。
設(shè)計要求
利用邏輯分析儀測量出電腦發(fā)送UART(波特率為115200時)是每bit時間寬度。
設(shè)計分析
在UART協(xié)議中規(guī)定了每bit的時間寬度應(yīng)該是1秒鐘除以波特率,但是在實際電路中相同標號的兩個晶振也會有一定的誤差。我們可以利用邏輯分析儀(也就是利用FPGA的時鐘)去測量一下PC發(fā)送UART時的bit時間寬度。
由于波特率為115200,在采樣時,一般采用16倍頻采樣。此時采樣頻率比較高,由基礎(chǔ)的50MHz的時鐘不能夠做出精確的16倍頻,由此也會帶來一定的誤差。
利用邏輯分析儀就可以看到在上述兩個都有誤差的情況,真實采樣的偏差,以及偏差對我們的設(shè)計是否有影響。
設(shè)計實現(xiàn)
將_9_uart_drive 復制一份,命名為_10_uart_drive_signal_tap。然后打開此工程,將波特率修改為115200。
點擊tools -> signal tap logic analyzer。
在右側(cè)窗口signal configuration中,首先需要指定一個采樣時鐘信號。
邏輯分析儀在采樣時鐘的每個上升沿進行數(shù)據(jù)采樣。邏輯分析儀不支持在采樣時鐘的下降沿進行數(shù)據(jù)采樣。設(shè)計中的任何信號都可以用作采樣時鐘。但是,為了獲得最佳的數(shù)據(jù)采樣結(jié)果,請使用與被測信號同步的全局時鐘。
在本設(shè)計中,所有的信號都是由外部的clk信號進行驅(qū)動的,所以此采樣時鐘,選擇為clk。點擊clock對話框后面的三個點。將filter選擇為pin:all,點擊list,在matching nodes中選擇clk,點擊“大于”,在nodes found中出現(xiàn)clk,然后點擊ok。
配置完采樣時鐘信號后,需要配置采樣深度。
針對被采樣的數(shù)據(jù)中的每個信號,采樣深度指定了采樣和存儲的樣本的數(shù)量。在器件存儲器資源有限的情況下,由于所選的深度太大,設(shè)計可能無法編譯。此時需要降低采樣深度以減少資源使用。
采樣深度乘以采樣的間隔就確定了采樣的時間寬度。現(xiàn)在我們要做的是采樣一個UART的協(xié)議幀,一個協(xié)議幀共有12個bit。按照115200的波特率,采樣的時間寬度應(yīng)該是104166ns,所以采樣深度應(yīng)該是5208,在此選擇采樣深度為8K。
當確定好采樣深度后,可以指定邏輯分析儀在觸發(fā)事件之前和之后 采樣的數(shù)據(jù)量。
邏輯分析儀提供三種選擇。Pre表示12%的存儲深度用作觸發(fā)事件之前,88%的存儲深度用作觸發(fā)事件之后;Center表示50%的存儲深度用作觸發(fā)事件之前,50%的存儲深度用作觸發(fā)事件之后;Post表示88%的存儲深度用作觸發(fā)事件之前,12%的存儲深度用作觸發(fā)事件之后。
在此選擇Pre。
配置好這些信息后,開始添加需要觀測的信號。
在setup界面,在空白界面雙擊,添加想要觀測的信號。
需要觀測的信號有uart_txd、uart_rxd、cap_cnt。
uart_txd和uart_rxd為端口信號,選擇filter時,選擇PIN:all即可,cap_cnt為內(nèi)部信號,選擇filter時,選擇signal tap :pre-synthesis。
將uart_rxd的下降沿設(shè)置為觸發(fā)條件。
在uart_rxd的trigger conditions的位置,右擊,選擇falling edge。
點擊保存,保存到qprj,命名為stp1.stp。
使能邏輯分析儀。點擊Yes。
回到quartus界面,進行綜合分析并形成配置文件。
在工程向?qū)У慕Y(jié)構(gòu)界面,可以看到在結(jié)構(gòu)中出現(xiàn)了兩個未知的組件。這兩個就是邏輯分析儀。
在報告中,可以看到使用的邏輯資源和存儲器資源增多。
回到signal tap界面,并且連接PC和開發(fā)板。
在hardware中,選擇USB – blaster。
點擊sof manager后面的三個小點,選擇生成的sof文件,然后點擊下載。
點擊運行分析。
此時邏輯分析儀就在等待被觸發(fā)。
觸發(fā)條件為uart_rxd的下降沿,打開串口助手,配置好后,發(fā)送一個數(shù)據(jù)11。
發(fā)送之后,邏輯分析儀中出現(xiàn)了波形。因為發(fā)送為11,發(fā)送數(shù)據(jù)從低位開始,故而第一個數(shù)據(jù)應(yīng)該為1。所以第一端低電平為起始位,可以通過采樣的數(shù)字標號,確定它的時間寬度。
左鍵是放大,右鍵是縮小。
左側(cè)為0,因為利用下降沿作為觸發(fā)條件。放大左側(cè)數(shù)字為434。
所以起始位的時間寬度為434x20ns,即8680ns。按照波特率為115200計算,每一個bit的時間寬度應(yīng)該是8680.5556ns。這就證明PC發(fā)過來的bit的時間寬度和我們所預(yù)想的是一致的。
可以用此方法測量其他的bit的寬度,有的bit的寬度要比8680ns要少,有的bit的寬度要比8680ns要多,但是偏差不多。
由于真正的寬度和我們認為的寬度有一定的區(qū)別。但是設(shè)計是按照每個bit的寬度都是20ns的整數(shù)倍,所以在采樣時,就會有偏差。通過cap_cnt可以看出來,并且隨著采樣的越長,誤差累計就會越大。
在數(shù)據(jù)的第一個bit時,cap_cnt等于7,馬上要變?yōu)?。按照cap_cnt的計數(shù)規(guī)律是波特率的16倍頻設(shè)計,所以后面所有的bit起始時,都應(yīng)該是16 *N + 7,并且馬上要變?yōu)?6 * N + 8。但是真實的時間寬度和預(yù)想的時間寬度有一定的偏差。
在最后的校驗位的起始時,cap_cnt的數(shù)據(jù)按照16倍頻采樣來說,應(yīng)該是135,然后快變?yōu)?36才對。但是此時已經(jīng)等于136,并且馬上變137。
我們是按照cap_cnt去進行采樣的(在cap_cnt變化的位置采樣)。
因為有誤差,所以規(guī)定UART的協(xié)議幀的長度不能夠過長。即中間的數(shù)據(jù)位的個數(shù)不能隨意增加。
上述分析步驟的數(shù)字只是筆者的測驗結(jié)果,不同的PC和開發(fā)板測試時,可能會得到不同的結(jié)果。
邏輯分析儀總結(jié)
利用邏輯分析儀可以直接查看到開發(fā)板內(nèi)部運行的波形。所以在很多時候,都是利用邏輯分析儀進行板級測試作為最終結(jié)果。
如果不需要工程中的邏輯分析儀,可以打開assignments -> settings –> signal tap logic analyzer,將使能的對勾去掉,然后重新編譯就可以了。
審核編輯:劉清
評論
查看更多