前言
FPGA設計過程中, 會遇到大量的串行轉並行或者並行轉串行的問題;
這些問題主要體現在FPGA對於速度和面積的均衡上;
一般而言, FPGA使用並行的設計可以提高處理的速度, 消耗更多的資源;
FPGA使用串行設計, 可以節約資源, 處理速度有所下降;
而在實際的使用過程中, 串行的設計往往貫穿於整個項目, 用於控制整個工程的執行邏輯;
並行的設計往往體現在局部需要加速的部分;
內容
串行設計
串行設計的方法比較多, 常見的有狀態機/流水線/乒乓操作等, 其主要的作用是控制數據在不同階段的處理;
用狀態機可以將設計流程圖直接轉化為具體的代碼, 實現對應的操作;
配合條件控制和狀態驅動, 狀態機可以將整個模塊大部分的功能整合到一個整體,從而實現代碼效率及可讀性的跨越;
流水線操作的流程是串行的,處理的數據卻是同步進行的; 通過控制每個模塊的刷新節奏, 實現數據的逐級獨立處理;
乒乓操作針對的主要是串行設計中數據從高速到低速或者從一個不穩定速度到穩定速度的操作, 基本思路是用類似的邏輯實現操作時序的緩沖;
並行設計
並行設計一般體現為一個模塊的多次調用,構成一個重復模塊的並行處理同一個數據的特性;
當然也可以是不同的模塊處理同一個數據, 主要的特點在於一份數據被多個模塊同時調用;
並行設計的前提是數據操作可以被分別執行且消耗的資源可以接受;
簡單的例子是求A的4次方,在資源充足的條件下, 可以由兩個乘法器並行執行后在將結果並行執行;
如果乘法器的性能足夠好的話, 也可以直接用四個乘法器在一個周期內完成計算;
更加復雜的並行則是使用參數化的模塊, 通過修改少量的參數並行執行不同的任務, 從而實現數據的大幅提升;
並行設計是模塊化設計提高效率的基本原理;
總結
早期FPGA設計訓練一般以串行設計為主, 但是在串行設計熟練后, 應該穿插並行設計, 以實現更高性能的設計;