現代嵌入式、工控、消費性電子裝置需在更短時間處理更多資料。通用處理器靈活但算力有限;DSP 算力強但彈性低。提高時脈功耗成本高。ASIC 績能好但規格變動難因應。FPGA/協處理器架構引入開發複雜度、延遲與雙團隊成本。
軟體配置處理器將可程式邏輯整合於應用處理器管線內,編譯器自動將演算法熱點劃分為硬體(擴充指令)與軟體,單一開發環境、單一團隊即可完成,實現「以軟體方式設計硬體」。
差分方程:y(n) = Σ h(t) * x(n-t), t=0..T-1。
直觀架構:每個輸出需 T 次乘累加(MAC)。
void fir(short *X, short *H, short *Y, int N, int T) {
for (int n = 0; n < N; n++) {
short *x = X, *h = H;
int acc = (*x--) * (*h++);
for (int t = 1; t < T; t++) acc += (*x--) * (*h++);
*Y++ = acc >> 14;
X++;
}
}
// T=64, N=80 約需 27,230 時脈週期
FIR_MUL/FIR_MAC)FIR_MUL 初始化部分和,FIR_MAC 累加。// 宏定義 FIR 內核,展開內層迴圈消除分支預測失誤
#define FIR(h1..h8, x1,x2, y1, X) {
WRGET0I(&h1, 16); WRGET1I(&x1, 16); X++;
WRGET0I(&h2, 16); WRGET1I(&x2, 16); FIR_MUL(x1, h1, &y1);
WRGET0I(&h3, 16); WRGET1I(&x1, 16); FIR_MAC(x2, h2, &y1);
... // 連續 8 MAC
WRGET1INIT(ST_DECR, X); FIR_MAC(x2, h8, &y1);
}
// 外層雙緩衝流水線:計算 y2 同時輸出 y1
for (n = 0; n < (N>>1)-1; n++) {
FIR1(..., &y1, &y2, X); WRPUTI(y1, 2);
FIR2(..., &y1, &y2, X); WRPUTI(y2, 2);
}
| 實作版本 | 時脈週期 | 加速比 |
|---|---|---|
| 純 C 參考 | 27,230 | 1× |
| 8-MAC 基礎 | 5,065 | 5.4× |
| 8-MAC + 流水線 | 3,189 | 8.5× |
| 8-MAC + 展開 | 2,711 | 10× |
| 32-MAC + 優化 | 687 | 39.6× |
可配置處理器架構讓開發者以 C 語言表達硬體並行,編譯器自動處理資源分配與指令排程,大幅降低硬體加速門檻,實現效能與開發效率的雙贏。