模型功能
- FPGA的運行是并行的
- FPGA的串行依賴狀態機
- FPGA的并行依賴流水線
- FPGA的大規模設計依賴精確設計
模型框圖
FPGA是并行的系統,所有的代碼同時運行,這是FPGA高效的根本所在
實現步驟
- FPGA的并行特性
- 和一般意義上的高級語言不同,verilog更多地是低級語言特性
- 這一點可以從其描述而非高級可以得知
- 如何應用這種并行特性
- 如果一個模塊持續性運行,則對FPGA來說是最高效率的,可以得到最高的性能
- 如果一個模塊是靈活多變的,則對FPGA來說獲得了最佳的拓展性,可以解決各種復雜的場景
- 而掌握兩者的平衡,就是對并行特性的最大化利用
- 狀態機的最大靈活性
- 使用狀態機,可以實現類似高級語言的串行邏輯
- 信號在狀態機的控制下,實現信號的逐個狀態控制
- 這種嚴格的執行順序,實際上削弱了FPGA的性能,但是增加了控制的靈活性
- 適合處理具備復雜控制交互的邏輯
!不要試圖使用流水線替代狀態機,那樣雖然可以提高性能,但是付出的時間和后續的維護成本不可接收
- 流水線的最大性能
- 流水線是FPGA最關鍵的結構
- 使用流水線至少可以節約1倍的資源和時間,是少有的完全適配FPGA的模型
- 流水線的實現方法多種多樣,最關鍵的就是建立數據總線,將數據從模塊提取到總線中
- 只有在總線中的數據才具備在多個不同模塊之間進行流水操作
- 如果只是在一個模塊里面搭建流水線,那可維護性較差,無法適應復雜的流水處理邏輯,而且容易偷懶將信號隨意跨流水線導致維護困難
- 將數據從定義在模塊內,修改為將數據定義在總線中,所有的模塊掛在總線上,才能實現無限拓展且順序可調的流水線
- 這種流水線可以實現類似大狀態機的結構,但是又可以匹配狀態機的低效率,是大型數據處理(如圖像)的必選方法
- FPGA的精確設計
- 一般來說,FPGA的各個參數不需要進行嚴格的控制
- FPGA為了拓展性等原因多會使用更大的位寬
- 但是對于大規模設計,位寬的控制是必要的
- 多余的位寬會導致一些簡單邏輯占據多余的空位寬
- 雖然FPGA會自動優化一部分
- 但是對于信號,多余的位寬精度是無法自動優化的
- 所以,精確的位寬控制是保證最小面積的根本方法
- 同時是最簡時序控制也是一個重要的部分
- 簡化時序的關鍵在于信號獨立控制
- 將信號進行混合控制除了不利于和電路對應
- 更大的問題是無法實現控制簡化
- 這種信號交叉容易帶來額外的時序控制
- 而這種時序又會進一步復雜控制
- 所以,信號在命名的時候應該就帶時序信息
最終效果
- 狀態機之前的文章已經實現過了,找一個模塊實現即可
- 流水線則是需要依據實際的需求進行搭建,本文只是在于回顧verilog的重點內容,這里也不展開
- 精確化的設計在之前的例子也是有體現的,位寬的參數化,信號的時序化,為整個的控制提供了基礎
調用接口
- 略
verilog模型總結
- 用了一周的時間,大致回顧FPGA中的verilog中一些比較實用的部分,
- 按照本人喜歡的編碼模板,逐個分析模塊每個內容所包含的細節
- 回顧了之前忽略的部分,修復目前設計模型中的一些問題
- 如無意外,本合集到此結束,后續應該會繼續回顧system verilog模型的一些細節
======== ======\\ ======= -
|| || \\ // \\ /-\
|| || || // // \\
|| || // || // \\
====== ======= || === ========
|| || || \\ // \\
|| || \\ || // \\
|| || \\ // // \\
|| || ======= // \\
作者:綠葉落秋風,專注FPGA技術分析和分享,轉載請注明原文鏈接:http://www.rzrgm.cn/electricdream/p/18111523,文中資源鏈接如下:
1. GITHUB開源倉庫
浙公網安備 33010602011771號