FPGA設計思想

FPGA與CPU編程有很大不同,但在編程思想上基本上可以借鑑C語言編程。對於FPGA的不同功能塊,相互之間時並行執行的,互不干擾;但現實中,實現一個較小的完整的功能塊,必然是順序操作的。
先介紹下主流設計方式。FPGA主要包含三種設計方式:面向狀態的設計,面向活動的設計和麪向結構的設計。
1)面向狀態的設計是以狀態機爲代表的設計方式,即通過控制信號和時序信號觸發狀態機進行狀態的遷移。狀態機的設計是FPGA開發中必不可少的環節。
2)面向活動的設計是以數據流和流程圖爲代表的設計方式。尤其是在傳輸系統、實時算法設計中,常使用基於數據流的設計方式。常見的數據流的操作方式包括數據的寄存器同步緩衝、數據傳遞、數據運算與流水設計、數據的存取等。
3)面向結構的設計常用於較大的系統設計中,用於描述模塊與模塊、單元與單元之間互聯關係,主要包括數據信號與控制信號。根據不同的層次描述,主要可以分爲系統及描述、寄存器級結構描述、門級結構描述等。

對比在C語言中,狀態機代表不同的情況,活動代表單個模塊,結構對應於整個系統中的不同模塊。根據C語言頂層設計思想,將系統根據不同功能分爲不同功能模塊,用不同的函數組成一個功能模塊,而函數內部變量用於數據操作。
結構、活動、狀態並沒有明顯的區分,可以認爲同一系統功能的不同層次切分。
在實現一個小功能的時候,可以採用狀態機進行不同步驟的跳轉執行。但如果整個功能流程比較複製時,狀態機的跳轉太過繁瑣,混亂。
推薦使用類似與C語言的基於仿順序操作的用法模板。

always@(posedgeCLKornegedgeRSTn)
if(!RSTn)
begin
i<=4'd0;
rLED<=4'b0000;
end
else
case(i)
0:
beginrLED<=4'b0001;i<=i+1'b1;end
1:
if(Timer==T10MS)i<=i+1'b1;end
2:
beginrLED<=4'b0010;i<=i+1'b1;end
3:
if(Timer==T10MS)i<=i+1'b1;end
4:
beginrLED<=4'b0100;i<=i+1'b1;end
5:
if(Timer==T10MS)i<=i+1'b1;end
6:
beginrLED<=4'b1000;i<=i+1'b1;end
7:
if(Timer==T10MS)i<=4'd0;end
endcase

總結之下,這個用法可以伸縮的範圍非常之大。除外,它所帶來的好處也非常之多:
� 提供了VerilogHDL語言順序操作的支持。
� 提高了模塊的表達能力。
� 提供了仿順序操作·建模的結構基礎。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章