vhlibvbf16

Сравнительная статистика всех подмодулей на всех FPGA

Источник данных: docs/stat/stat_others_spartan6.md, docs/stat/stat_others_spartan7.md, docs/stat/stat_others_artix7.md. Все цифры — оценки на основе ручного подсчёта по RTL-коду (погрешность ±20–25%).


Ресурсы целевых FPGA

Device Семейство LUT6 FF DSP BRAM
XC6SLX9 Spartan-6 5,720 11,440 16× DSP48A1 32× 18Kb
XC6SLX16 Spartan-6 9,112 18,224 32× DSP48A1 32× 18Kb
XC7S15 Spartan-7 8,000 16,000 20× DSP48E1 10× 36Kb
XC7A15T Artix-7 10,400 20,800 45× DSP48E1 25× 36Kb

Сравнение подмодулей (LUTs)

Подмодуль XC6SLX9 XC6SLX16 XC7S15 XC7A15T
mul4x4 ~45 ~45 ~45 ~45
mul4x4_lat2 ~50 ~50 ~50 ~50
mul4x4_comb ~45 ~45 ~45 ~45
mul_u8_u8_u16_lat2 ~208 ~208 ~208 ~208
mul_u8_u8_u16_lat3 ~230 ~230 ~230 ~230
add8x8_lat2 ~18 ~18 ~18 ~18
add8x8 (branch) ~18 ~18 ~18 ~18
sign ~1 ~1 ~1 ~1
flags_lat1 ~11 ~11 ~11 ~11
flags_lat2 ~11 ~11 ~11 ~11
except_lat2 ~54 ~54 ~54 ~54
except_lat3 ~52 ~52 ~52 ~52
ИТОГО (уникальные) ~626 ~626 ~626 ~626

«Уникальные» — без модулей, входящих в состав других: mul4x4 (в mul_u8_u8_u16_lat2), mul4x4_lat2 (в mul_u8_u8_u16_lat3), flags_lat1 (в except_lat2), flags_lat2 (в except_lat3). Альтернативные реализации (mul_u8_u8_u16_lat2/mul_u8_u8_u16_lat3, except_lat2/except_lat3, add8x8_lat2/add8x8_branch) учтены раздельно.


Сравнение подмодулей (FF)

Подмодуль XC6SLX9 XC6SLX16 XC7S15 XC7A15T
mul4x4 8 8 8 8
mul4x4_lat2 37 37 37 37
mul4x4_comb 0 0 0 0
mul_u8_u8_u16_lat2 48 48 48 48
mul_u8_u8_u16_lat3 160 160 160 160
add8x8_lat2 19 19 19 19
add8x8 (branch) 19 19 19 19
sign 3 3 3 3
flags_lat1 5 5 5 5
flags_lat2 11 11 11 11
except_lat2 63 63 63 63
except_lat3 108 108 108 108
ИТОГО (уникальные) ~420 ~420 ~420 ~420

Сравнение подмодулей (% от доступных LUT6)

Подмодуль XC6SLX9 (5,720) XC6SLX16 (9,112) XC7S15 (8,000) XC7A15T (10,400)
mul4x4 0.8% 0.5% 0.6% 0.4%
mul4x4_lat2 0.9% 0.5% 0.6% 0.5%
mul4x4_comb 0.8% 0.5% 0.6% 0.4%
mul_u8_u8_u16_lat2 3.6% 2.3% 2.6% 2.0%
mul_u8_u8_u16_lat3 4.0% 2.5% 2.9% 2.2%
add8x8_lat2 0.3% 0.2% 0.2% 0.2%
add8x8 (branch) 0.3% 0.2% 0.2% 0.2%
sign 0.02% 0.01% 0.01% 0.01%
flags_lat1 0.2% 0.1% 0.1% 0.1%
flags_lat2 0.2% 0.1% 0.1% 0.1%
except_lat2 0.9% 0.6% 0.7% 0.5%
except_lat3 0.9% 0.6% 0.7% 0.5%
ИТОГО (уникальные) 10.9% 6.9% 7.8% 6.0%

Сравнение подмодулей (% от доступных FF)

Подмодуль XC6SLX9 (11,440) XC6SLX16 (18,224) XC7S15 (16,000) XC7A15T (20,800)
mul4x4 0.1% 0.04% 0.05% 0.04%
mul4x4_lat2 0.3% 0.2% 0.2% 0.2%
mul4x4_comb 0% 0% 0% 0%
mul_u8_u8_u16_lat2 0.4% 0.3% 0.3% 0.2%
mul_u8_u8_u16_lat3 1.4% 0.9% 1.0% 0.8%
add8x8_lat2 0.2% 0.1% 0.1% 0.1%
add8x8 (branch) 0.2% 0.1% 0.1% 0.1%
sign 0.03% 0.02% 0.02% 0.01%
flags_lat1 0.04% 0.03% 0.03% 0.02%
flags_lat2 0.1% 0.06% 0.07% 0.05%
except_lat2 0.6% 0.3% 0.4% 0.3%
except_lat3 0.9% 0.6% 0.7% 0.5%
ИТОГО (уникальные) 3.7% 2.3% 2.6% 2.0%

Сравнение подмодулей (Max Freq, min – typ – max)

Подмодуль XC6SLX9-2 XC6SLX16-2 XC7S15-1 XC7S15-2 XC7A15T-1
mul4x4 250–280–320 MHz 250–280–320 MHz 280–320–380 MHz 320–360–420 MHz 340–380–460 MHz
mul4x4_lat2 300–340–400 MHz 300–340–400 MHz 350–400–480 MHz 400–450–520 MHz 380–420–500 MHz
mul4x4_comb 280–320–380 MHz 280–320–380 MHz 320–360–440 MHz 360–400–480 MHz 340–380–460 MHz
mul_u8_u8_u16_lat2 200–230–270 MHz 200–230–270 MHz 230–270–320 MHz 260–300–360 MHz 250–290–350 MHz
mul_u8_u8_u16_lat3 250–290–340 MHz 250–290–340 MHz 290–330–400 MHz 330–370–440 MHz 310–350–420 MHz
add8x8_lat2 350–400–480 MHz 350–400–480 MHz 400–450–540 MHz 450–500–600 MHz 420–480–580 MHz
add8x8 (branch) 350–400–480 MHz 350–400–480 MHz 400–450–540 MHz 450–500–600 MHz 420–480–580 MHz
sign 400–500–600 MHz 400–500–600 MHz 500–600–700 MHz 550–650–750 MHz 520–620–720 MHz
flags_lat1 350–400–480 MHz 350–400–480 MHz 400–450–540 MHz 450–500–600 MHz 420–480–580 MHz
flags_lat2 400–450–520 MHz 400–450–520 MHz 450–500–600 MHz 500–550–650 MHz 480–540–640 MHz
except_lat2 280–320–380 MHz 280–320–380 MHz 320–360–440 MHz 360–400–480 MHz 340–380–460 MHz
except_lat3 320–360–420 MHz 320–360–420 MHz 360–400–480 MHz 400–450–520 MHz 380–420–500 MHz

Рабочая частота подмодулей (typ), MHz

Подмодуль XC6SLX9-2 XC6SLX16-2 XC7S15-1 XC7S15-2 XC7A15T-1
mul4x4 ~280 ~280 ~320 ~360 ~380
mul4x4_lat2 ~340 ~340 ~400 ~450 ~420
mul4x4_comb ~320 ~320 ~360 ~400 ~380
mul_u8_u8_u16_lat2 ~230 ~230 ~270 ~300 ~290
mul_u8_u8_u16_lat3 ~290 ~290 ~330 ~370 ~350
add8x8_lat2 ~400 ~400 ~450 ~500 ~480
add8x8 (branch) ~400 ~400 ~450 ~500 ~480
sign ~500 ~500 ~600 ~650 ~620
flags_lat1 ~400 ~400 ~450 ~500 ~480
flags_lat2 ~450 ~450 ~500 ~550 ~540
except_lat2 ~320 ~320 ~360 ~400 ~380
except_lat3 ~360 ~360 ~400 ~450 ~420

Значения typ — середины оценочных диапазонов из таблицы выше (ручная оценка ±20–25%, без реального синтеза).


Краткие выводы

  1. Самый прожорливый подмодуль — mul_u8_u8_u16_lat3 (~230 LUT, 4.0% на XC6SLX9), затем mul_u8_u8_u16_lat2 (~208 LUT, 3.6% на XC6SLX9).

  2. Рефакторинг mul_u8_u8_u16_lat2 сэкономил ~2 LUT (с ~210 до ~208) за счёт замены 3 последовательных CPA на CSA-дерево (2 уровня CSA + 1 CPA).

  3. Новые модули после рефакторинга: mul4x4_lat2 (~50 LUT, 37 FF), mul4x4_comb (~45 LUT, 0 FF), mul_u8_u8_u16_lat3 (~230 LUT, 160 FF).

  4. Все подмодули вместе занимают ~10.9% LUT6 на XC6SLX9 (наименьшем устройстве) и всего ~6.0% на XC7A15T.

  5. FF-затраты невелики: максимум 3.7% на XC6SLX9, в основном из-за mul_u8_u8_u16_lat3 (160 FF) и except_lat3 (108 FF).