昨天看了eeworld的fpga調(diào)試小結(jié),寫得很好,但是他是從調(diào)試的角度來談,我今天就從如何設(shè)計FPGA硬件電路板來談?wù)勛约旱囊恍w會,我將會著重關(guān)注于FPGA電路板的可測試性設(shè)計。
所謂可測試性,很簡單,就是在板級調(diào)試的時候,更方便調(diào)試,判決準(zhǔn)則就是想看什么信號就可以看到什么信號,HOHO!
昨天看了eeworld的fpga調(diào)試小結(jié),寫得很好,但是他是從調(diào)試的角度來談,我今天就從如何設(shè)計FPGA硬件電路板來談?wù)勛约旱囊恍w會,我將會著重關(guān)注于FPGA電路板的可測試性設(shè)計。
所謂可測試性,很簡單,就是在板級調(diào)試的時候,更方便調(diào)試,判決準(zhǔn)則就是想看什么信號就可以看到什么信號,HOHO!
2. FPGA信號測試
做過FPGA板級調(diào)試的朋友想必都有這樣的體會,當(dāng)項目調(diào)試不順,輸出結(jié)果不是想要的結(jié)果時,恨不得把FPGA給拆開,把邏輯分析儀或者數(shù)字示波器接入到內(nèi)部信號通道的每個模塊的輸入輸出端口處,看下波形,分析問題到底出在什么地方。
雖然有chipscope/signaltap這樣的輔助分析工具,但FPGA內(nèi)部資源畢竟有限,不可能想看什么信號就看什么信號!
建議如果FPGA設(shè)計有多的未用引腳的話,不妨在做FPGA電路設(shè)計的時候,引出8根或者16根線來,作為專用調(diào)試管腳,在PCB設(shè)計時連到一個排插上,用于調(diào)試,觀察內(nèi)部節(jié)點信號的波形,以下圖為例,進(jìn)行描述:
如上圖,在fpga內(nèi)部電路設(shè)計時,可以添加如下測試代碼:
case(test_data_sel)
n'h0:
test_pin <= data_a_b;
n'h1:
test_pin <= data_b_c;
default
test_pin <= data;
endcase
這里的data_sel相對于FPGA來說是一個外部輸入信號:
在MCU + FPGA的電路架構(gòu)中,這個data_sel可以通過MCU來配置;
如果是單塊FPGA作為唯一處理芯片,可以考慮通過撥碼開關(guān)來設(shè)置,比如一個4位的撥碼開關(guān),它將有16種狀態(tài),對應(yīng)到FPGA內(nèi)部的話,不用修改代碼,僅僅撥動開關(guān),就可以觀察到16個中間節(jié)點信號,是不是對調(diào)試很有幫助?
4. MCU + FPGA架構(gòu)電路設(shè)計
MCU+FPGA這樣的架構(gòu),在做設(shè)計的時候,可以考慮在FPGA內(nèi)部多例化一些小的ram,有兩個作用:
4.1 ram可以保存一些FPGA內(nèi)部運行的結(jié)果,MCU通過總線把數(shù)據(jù)讀取出來,可以判斷當(dāng)前FPGA內(nèi)部工作是否正常;
4.2 在FPGA調(diào)試不順利的時候,可以配置一些數(shù)據(jù)寫入到ram中,并強行斷開FPGA數(shù)據(jù)通路,如上圖中,可以強行斷開模塊A和B之間的數(shù)據(jù)通路,配置模塊B從ram中讀取數(shù)據(jù),用于判斷后續(xù)模塊B以后的數(shù)據(jù)鏈路是否正確。
FPGA硬件設(shè)計、調(diào)試都非一朝一夕之功,重在積累!
我這兒就簡單扔幾塊磚頭,期待更多美玉,大家一起探討,提高設(shè)計水平,HOHO!