如果對(duì)處于全速(at-speed)運(yùn)行下的FPGA調(diào)試,工程師在現(xiàn)有通用“能力技術(shù)”基礎(chǔ)上,再增加“硬件斷點(diǎn)”功能,那么對(duì)高速運(yùn)行FPGA,也就擁有像調(diào)試軟件程序類似的完整可觀測(cè)能力(Full Visibility)和可控制能力(Controllability)。
以賽靈思FPGA的應(yīng)用開(kāi)發(fā)為例,用戶已經(jīng)能從硬件的運(yùn)行特征出發(fā),為設(shè)計(jì)增加兩類硬件斷點(diǎn)。除了前文所介紹的時(shí)鐘斷點(diǎn)功能,本文將詳細(xì)介紹事件斷點(diǎn)(Event-based Breakpoint)的集成和使用。
與適用于算法設(shè)計(jì)、接口控制等全同步設(shè)計(jì)的時(shí)鐘斷點(diǎn)相比,事件斷點(diǎn)是由用戶自定義的事件觸發(fā)信號(hào)來(lái)凍結(jié)時(shí)鐘,即以“事件發(fā)生的次數(shù)”為中斷地址。適用于對(duì)包含UART、以太網(wǎng)等通信接口在內(nèi),較復(fù)雜的FPGA應(yīng)用開(kāi)發(fā)設(shè)計(jì)。
例如,在網(wǎng)絡(luò)處理系統(tǒng)中,可將“數(shù)據(jù)包接收/發(fā)送”作為事件斷點(diǎn);在數(shù)據(jù)加密處理應(yīng)用中,將“一個(gè)數(shù)據(jù)塊處理結(jié)束”作為事件觸發(fā)信號(hào)。
用戶在設(shè)計(jì)階段,與前文介紹的時(shí)鐘斷點(diǎn)類似,事先將硬件斷點(diǎn)控制模塊(interruption logic)集成到待測(cè)DUT的頂層(hw_top),就可獲得這樣的在線調(diào)試能力。

本文將以按圖索驥的方式,詳細(xì)介紹在設(shè)計(jì)中集成事件斷點(diǎn)的實(shí)現(xiàn)過(guò)程,對(duì)原有設(shè)計(jì)的改動(dòng)非常小,仍然保持優(yōu)異的時(shí)序性能。
以下為正文
1. 樣例簡(jiǎn)要介紹
uart-demo作為串口數(shù)據(jù)傳輸樣例,用于控制uart串口數(shù)據(jù)的發(fā)送,以及led輸出。
通信協(xié)議設(shè)置為“9600 bps,8位數(shù)據(jù)位,沒(méi)有校驗(yàn)位、1位停止位”。
源碼獲取地址:https://gitee.com/forgeda/forgedaX-35T/tree/master/demo/vivado-uart/Source
2. 事件斷點(diǎn)控制模塊
模塊定義如下:
moduleinterruption_logic( (* dont_touch ="true"*)outputreg[63:0] cycles, inputsig_in, inputsys_clk,inputsys_reset,outputtask_clk );wireclk_en;wire[63:0] breakpoint; reg[63:0] counter; regbreak; il_vio_0 il_vio ( .clk(sys_clk), .probe_in0(counter), .probe_in1(cycles), .probe_out0(breakpoint), .probe_out1(clk_en) );always@(posedgesys_clk)beginif(!sys_reset)begincounter <=?0;break?<=?0;endelseif?(clk_en)beginif?(counter == breakpoint)beginbreak?<=?1'b1;endelsebeginif?(sig_in) counter <= counter +?1;break?<=?1'b0;endendend? BUFGCE inst_bufgce (.O(task_clk),.I(sys_clk),.CE(clk_en & ~break) ); always?@(posedge?task_clk) ? ?beginif?(!sys_reset) ? ? ? ? ?begin? ? ? ? ? ? ?cycles <=?0; ? ? ? ?endelsebegin? ? ? ? ? ? ?cycles <= cycles +?1; ? ? ? ?endendendmodule
該模塊非常精簡(jiǎn),對(duì)您的原生設(shè)計(jì)的改動(dòng)很小,所占用的硬件資源也很少。
3. 將事件斷點(diǎn)模塊集成到設(shè)計(jì)中
在原有設(shè)計(jì)中集成事件斷點(diǎn)控制模塊,全程在Xilinx Vivado環(huán)境下完成,共有以下四個(gè)步驟。
Step 1.導(dǎo)入控制模塊interruption logic,并對(duì)VIO進(jìn)行參數(shù)設(shè)置

單擊“Finish”,確認(rèn)導(dǎo)入該模塊文件。
導(dǎo)入斷點(diǎn)控制模塊所使用的VIO IP核
在Vivado中,選擇“IP Catalog”,導(dǎo)入VIO IP核。

在IP Catalog搜索框中,直接輸入VIO,顯示如下:

設(shè)置VIO IP核的輸出端口(PROBE_OUT0),設(shè)置事件斷點(diǎn)的初始地址。
在Customize IP核界面,對(duì)VIO IP進(jìn)行參數(shù)設(shè)置:


接下來(lái),設(shè)置兩個(gè)關(guān)鍵輸出端口的參數(shù):
事件斷點(diǎn)的初始地址(PROBE_OUT0)
信號(hào)位寬Probe Width [1-256]:64;
初始值Initial Value (in hex):0x31
即該樣例在位流載入完成之后,在運(yùn)行階段遇到的首個(gè)斷點(diǎn)地址。
在本樣例中,UART端口在板卡上電后,直接輸出“ ARTY GPIO/UART DEMO! ”消息,我們選擇將UART設(shè)計(jì)中的“bit_done”作為中斷觸發(fā)信號(hào),表示“串口已發(fā)送1 bit數(shù)據(jù)”。
換而言之,當(dāng)事件斷點(diǎn)設(shè)置為0x31,表示設(shè)計(jì)將在傳輸49 bit,即傳輸?shù)谖鍌€(gè)字符“T”的停止位時(shí),暫停運(yùn)行。
時(shí)鐘使能信號(hào)(PROBE_OUT1)
信號(hào)位寬Probe Width [1-256]:1;
初始值Initial Value (in hex):0x1
初始值設(shè)置為1,表示開(kāi)啟時(shí)鐘使能。
點(diǎn)擊“OK”,確認(rèn)以上參數(shù)配置。

點(diǎn)擊“Generate”,生成VIO IP核。
顯示“Generation of output products completed successfully”消息,表示IP核已成功導(dǎo)入。

Step 2. 對(duì)設(shè)計(jì)頂層(hw_top)進(jìn)行更改處理
以下為集成事件斷點(diǎn)模塊后的設(shè)計(jì)頂層,原有設(shè)計(jì)的改動(dòng)部分已用紅色標(biāo)記。














集成斷點(diǎn)控制模塊之后的Vivado工程文件,詳見(jiàn)
https://gitee.com/forgeda/forgedaX-35T/tree/master/demo/vivado_uart_event_bp/uart_breakpoint
Step 3.重新啟動(dòng)Vivado編譯過(guò)程
啟動(dòng)Vivado編譯,生成新的設(shè)計(jì)結(jié)果文件(.dcp), 得到的配置位流文件top.bit,以及調(diào)試支撐文件debug_nets.ltx。
完成以上工作后,就可以直接下載運(yùn)行,并通過(guò)Hardware Manager,自行驗(yàn)證以上集成過(guò)程是否已經(jīng)正確無(wú)誤。
4. 自檢方法
您可直接在Vivado Hardware Manager中快速驗(yàn)證,具體步驟如下:

如下圖所示,樣例在初始化結(jié)束后,輸出字符“ART”之后暫停運(yùn)行,該斷點(diǎn)地址即為Step 2 設(shè)置的0x31。

可繼續(xù)在VIO窗口,設(shè)置新的斷點(diǎn)地址,例如,輸入“0x3B”,表示設(shè)計(jì)將在傳輸59 bit,即第六個(gè)字符“Y”發(fā)送結(jié)束時(shí),暫停運(yùn)行。
最后,將斷點(diǎn)地址設(shè)置為FFFF_FFFF_FFFF_FFFF,清除斷點(diǎn),如下圖所示。

樣例將繼續(xù)全速運(yùn)行,輸出完整的“ARTY GPIO/UART DEMO! ”消息。
在前文的時(shí)鐘斷點(diǎn)、本文的事件斷點(diǎn)這兩個(gè)硬件斷點(diǎn)準(zhǔn)備工作后,下一篇我們將介紹如何在板級(jí)在線調(diào)試過(guò)程中,無(wú)需在源碼、網(wǎng)表插探針,在不占用任何硬件資源,就可得FPGA運(yùn)行狀態(tài)的全可觀測(cè)能力,對(duì)設(shè)計(jì)擁有100%的信號(hào)可見(jiàn)性,這是ILA、Chipscope等現(xiàn)有工具不能提供的功能;
以及RTL代碼在經(jīng)過(guò)硬件編譯后,信號(hào)名稱可能會(huì)被優(yōu)化改變,那么如何在源碼和調(diào)試信號(hào)(位流數(shù)據(jù))之間建立精準(zhǔn)對(duì)應(yīng)關(guān)系,大幅減少工程師的硬件經(jīng)驗(yàn)成本;
包括更先進(jìn)的以硬件速度仿真,直接對(duì)關(guān)鍵寄存器、狀態(tài)機(jī)的故障注入測(cè)試,高效驗(yàn)證。真正做到所見(jiàn)即所得,所改即所需。
-
FPGA
+關(guān)注
關(guān)注
1652文章
22258瀏覽量
629430 -
硬件
+關(guān)注
關(guān)注
11文章
3552瀏覽量
68693 -
時(shí)鐘
+關(guān)注
關(guān)注
11文章
1950瀏覽量
134491
原文標(biāo)題:如何將FPGA設(shè)計(jì)驗(yàn)證效率提升
文章出處:【微信號(hào):gh_9d70b445f494,微信公眾號(hào):FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
編碼不能沒(méi)調(diào)試,調(diào)試不能沒(méi)斷點(diǎn)
FPGA在線配置模塊和自動(dòng)測(cè)試模塊實(shí)現(xiàn)過(guò)程
在FPGA體系結(jié)構(gòu)能夠實(shí)現(xiàn)的并行運(yùn)算
如何使用嵌入式Jetty容器在Jersey中集成Webapp應(yīng)用
在FPGA中集成ARM核的話可以做些什么事情
如何實(shí)現(xiàn)硬件斷點(diǎn)呢?
HTS221在最終客戶應(yīng)用中集成的硬件指南和參考設(shè)計(jì)
FPGA,FPGA工作原理是什么?
一個(gè)FPGA中現(xiàn)在可集成多少32位RISC處理器?
如何使用FPGA實(shí)現(xiàn)FIR抽取濾波器的設(shè)計(jì)
成為一個(gè)更好廚師的真正秘訣:在廚房電器中集成智能規(guī)模技術(shù)
硬件斷點(diǎn)和軟件斷點(diǎn)是什么
在iOS中集成Vue是什么

在FPGA設(shè)計(jì)中集成事件斷點(diǎn)的實(shí)現(xiàn)過(guò)程
評(píng)論