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