開發定點演算法需在功能性、數值精度建模、驗證速度間取得平衡。傳統 C 內建型別(float/double、64 位整數、53 位尾數)位寬固定,難以精確建模任意精度需求(如 33 位相乘超過 64 位範圍)。演算法 C 資料類型(Algorithmic C Datatypes)提供任意長度整數與定點類型,解決此痛點。
// 使用 float 建模定點行為,精度受限且難合成
float temp = 0.0f;
for (int i = 0; i < N; i++) {
temp += (coeff[i] * input[i]) >> 15; // 手動量化、飽和處理
}
內建型別語義不一致(如位移操作平台相關、有號/無號混用行為未定義),導致模擬與合成結果不符、難以除錯。
x+y 與 y+x 結果一致針對 FIR 濾波器 10^8 次呼叫測試(GCC 4.1.1):
| 類型 | TRN/WRAP 時間 | RND/SAT 時間 | 相對 ac_fixed |
|---|---|---|---|
| ac_fixed (演算法C) | 6.5s | 29s | 1.0x (基準) |
| float (無定點建模) | 3.5s | - | ~0.5x |
| sc_fixed_fast (SystemC 精度受限) | - | - | - |
| sc_fixed (SystemC 任意精度) | ~1476s | - | 227x |
演算法 C 類型 ac_fixed 比 SystemC sc_fixed 快 **200+ 倍**,媲美手工優化 C 代碼。
ac_int 效能優勢DCT 演算法測試(2 位移位操作),ac_int 超過 SystemC sc_int/sc_bigint 顯著效能。
基於 ANSI C++ 標準的演算法 C 整數與定點類型,支援任意位寬指定,提供統一語義、高達 200 倍仿真效率提升,是 C-to-RTL 設計流程中保證任意位寬精度的關鍵環節。