生活随笔
收集整理的這篇文章主要介紹了
verilog 基础篇 signal_tap 的使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
實驗工具:鋯石A4開發板
軟件:quartus 13.1
Signal Tap 就相當于邏輯分析儀,signal Tap是利用FPGA的內部邏輯資源形成一個內部的邏輯分析儀
有時候內部管腳還多于外部管腳,這個時候更沒法測試
使用流程
//---------------------------------------------------------------------------
//-- 文件名 : A4_Ked2.v
//-- 作者 : ciscomonkey,代碼搬移的鋯石科技的
//-- 描述 : 按鍵消抖
//-- 修訂歷史 :
//---------------------------------------------------------------------------
module A4_Key2
(//輸入端口CLK_50M,RST_N,KEY,//輸出端口LED
); //---------------------------------------------------------------------------
//-- 外部端口聲明
//---------------------------------------------------------------------------
input CLK_50M; //時鐘的端口,開發板用的50MHz晶振
input RST_N; //復位的端口,低電平復位
input [ 7:0] KEY; //對應開發板上的KEY
output [ 7:0] LED; //對應開發板上的LED//---------------------------------------------------------------------------
//-- 內部端口聲明
//---------------------------------------------------------------------------
reg [20:0] time_cnt; //用來計數按鍵延遲的定時計數器
reg [20:0] time_cnt_n; //time_cnt的下一個狀態
reg [ 7:0] key_in_r; //用來接收按鍵信號的寄存器
reg [ 7:0] key_out; //消抖完成輸出按鍵
reg [ 7:0] key_out_n; //key_out的下一個狀態
wire key_press; //檢測按鍵有沒有變化//設置定時器的時間為20ms,計算方法為 (20*10^3)us / (1/50)us 50MHz為開發板晶振
parameter SET_TIME_20MS = 21'd1_000_000; //---------------------------------------------------------------------------
//-- 邏輯功能實現 ,按一下,燈變化一次
//---------------------------------------------------------------------------
//時序電路,用來key_in_r寄存器賦值always @ (posedge CLK_50M, negedge RST_N)beginif(!RST_N) //判斷復位key_in_r <= 8'h00; //初始化key_in_r值elsekey_in_r <= KEY; //將按鍵的值賦值給key_in_rendassign key_press = key_in_r ^ KEY; //檢測按鍵有沒有變化//時序電路,用來給time_cnt寄存器賦值always @ (posedge CLK_50M, negedge RST_N)beginif(!RST_N) //判斷復位time_cnt <= 21'h0; //初始化time_cnt值elsetime_cnt <= time_cnt_n; //用來給time_cnt賦值end//組合電路,實現20ms的定時計數器always @ (*)beginif(time_cnt == SET_TIME_20MS || key_press) //判斷按鍵有沒有變化、時間有沒有到time_cnt_n = 21'h0; //如果到達20ms或者按鍵有了變化,那么定時計數器將會被清零elsetime_cnt_n = time_cnt + 1'b1; //如果未到20ms或者按鍵沒有變化,那么定時計數器將會繼續累加end//時序電路,用來key_out寄存器賦值always @ (posedge CLK_50M, negedge RST_N)beginif(!RST_N) //判斷復位key_out <= 8'h00; //初始化key_out值elsekey_out <= key_out_n; //用來給key_out賦值end//組合電路,每20ms接收一次按鍵的值always @ (*)beginif(time_cnt == SET_TIME_20MS) //判斷20ms時間key_out_n = key_in_r; //如果到達20ms,接收一次按鍵的值elsekey_out_n = key_out; //如果未到20ms,保持原狀態不變endassign LED = key_out; //將消抖的按鍵值賦值給LEDendmodule
選擇New----》signal tap II
或者在tool下面選擇signal tap II
在這里可以保存signal Tap II
signal Tap II界面的選項介紹
在信號的觀察界面,右鍵點擊Add Nodes
選中Design Entry(設計條目)
然后點擊list
選擇要觀察的信號
觀察信號界面彈出我們選中的信號。
有的時候,可能我們要觀察內部的信號時紅色的,這個時候往往是被優化掉了,導致我們沒法觀察到想要觀察的信號。
這個時候有兩種辦法:
1,將我們要觀察的信號拉到頂層接口
2. 在觀察的wire信號旁邊加上/synthesis keep/
對于reg信號則加 /synthesis noprune/ 或者 /synthesis preserve/
配置采樣屬性
對signal tap II的時鐘進行配置
如上圖所示,如果我們選擇輸入時鐘,會彈出以上對話框,也就是說我們的輸入時鐘不能夠又作為signal tap II 的采樣時鐘,又作為我們的系統時鐘。這個時候,可以用PLL生成一個更高倍的時鐘作為采樣時鐘。
這里我們把觀察信號里面的輸入時鐘移去。
右下角的觸發條件我們可以不用管,在觀察信號里的圓圈里對每一個信號設置出發條件,就是說在觀察信號的下降沿采樣,還是說在信號的上升沿進行采樣,還是說dont care
對采樣的深度進行設置
連接好我們的板子。進行重新編譯,然后選好SOF
然后下載我們的SOF文件
我們發現signal tap II 已經變成了 ready to acquire
點擊run analysis,或者auto run analysis
當我按下復位鍵的時候,變為低電平,然后進行采樣。
如果我設置為要么在按下Key鍵,要么在RST鍵采樣,設置為OR即可
工程:
https://download.csdn.net/download/ciscomonkey/10801959
總結
以上是生活随笔為你收集整理的verilog 基础篇 signal_tap 的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。