昨天看了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!
我的個人經(jīng)驗(yàn):
1. 電源電路設(shè)計
電源電路,建議在電路的輸出處增加一些跳線,在電源電路沒有調(diào)通之前,可以確保電源不會輸出到下一部分電路,保證后續(xù)電路的安全;
電源電路部分,應(yīng)該加上足夠的測試點(diǎn),包括反饋電壓點(diǎn)、輸出電源點(diǎn)以及地測試點(diǎn),建議在PCB設(shè)計的時候,在電源輸出測試點(diǎn)處就近放一個地測試點(diǎn),個人不建議測量電壓的時候,萬用表的表筆直接點(diǎn)在電容或者電感上;
同樣建議,在每一個電源輸出處,放上一個LED指示燈,電源OK后,LED點(diǎn)亮,所以整塊板子有沒有工作,一目了然。
2. FPGA信號測試
做過FPGA板級調(diào)試的朋友想必都有這樣的體會,當(dāng)項(xià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é)點(diǎn)信號的波形,以下圖為例,進(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ǎn)信號,是不是對調(diào)試很有幫助?
4. MCU + FPGA架構(gòu)電路設(shè)計
MCU+FPGA這樣的架構(gòu),在做設(shè)計的時候,可以考慮在FPGA內(nèi)部多例化一些小的ram,有兩個作用:
4.1 ram可以保存一些FPGA內(nèi)部運(yùn)行的結(jié)果,MCU通過總線把數(shù)據(jù)讀取出來,可以判斷當(dāng)前FPGA內(nèi)部工作是否正常;
4.2 在FPGA調(diào)試不順利的時候,可以配置一些數(shù)據(jù)寫入到ram中,并強(qiáng)行斷開FPGA數(shù)據(jù)通路,如上圖中,可以強(qiáng)行斷開模塊A和B之間的數(shù)據(jù)通路,配置模塊B從ram中讀取數(shù)據(jù),用于判斷后續(xù)模塊B以后的數(shù)據(jù)鏈路是否正確。
FPGA硬件設(shè)計、調(diào)試都非一朝一夕之功,重在積累!
我這兒就簡單扔幾塊磚頭,期待更多美玉,大家一起探討,提高設(shè)計水平,HOHO!