vhlibvbf16

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

Источник данных: docs/stat/stat_top_spartan6.md, docs/stat/stat_top_spartan7.md, docs/stat/stat_top_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

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

Модуль XC6SLX9 XC6SLX16 XC7S15 XC7A15T
vhfastmulb16_mul_bf16_bf16_bf16_rtz_lat3 ~392 ~392 ~392 ~392
vhfastmulb16_mul_bf16_bf16_bf16_rne_lat3 ~427 ~427 ~427 ~427
vhfastmulb16_mul_bf16_bf16_fp32_lat4 ~308 ~308 ~308 ~308
vhfastmulb16_add_fp32_fp32_fp32_rtz_lat4 ~290 ~290 ~290 ~290
vhfastmulb16_add_fp32_fp32_fp32_rne_lat4 ~340 ~340 ~340 ~340
vhfastmulb16_add_fp16_fp16_fp16_rtz_lat4 ~160 ~160 ~160 ~160
vhfastmulb16_add_fp16_fp16_fp16_rne_lat4 ~190 ~190 ~190 ~190
vhfastmulb16_add_bf16_bf16_bf16_rtz_lat4 ~165 ~165 ~165 ~165
vhfastmulb16_add_bf16_bf16_bf16_rne_lat4 ~195 ~195 ~195 ~195

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

Модуль XC6SLX9 XC6SLX16 XC7S15 XC7A15T
vhfastmulb16_mul_bf16_bf16_bf16_rtz_lat3 ~151 ~151 ~151 ~151
vhfastmulb16_mul_bf16_bf16_bf16_rne_lat3 ~151 ~151 ~151 ~151
vhfastmulb16_mul_bf16_bf16_fp32_lat4 ~179 ~179 ~179 ~179
vhfastmulb16_add_fp32_fp32_fp32_rtz_lat4 ~263 ~263 ~263 ~263
vhfastmulb16_add_fp32_fp32_fp32_rne_lat4 ~263 ~263 ~263 ~263
vhfastmulb16_add_fp16_fp16_fp16_rtz_lat4 ~151 ~151 ~151 ~151
vhfastmulb16_add_fp16_fp16_fp16_rne_lat4 ~151 ~151 ~151 ~151
vhfastmulb16_add_bf16_bf16_bf16_rtz_lat4 ~140 ~140 ~140 ~140
vhfastmulb16_add_bf16_bf16_bf16_rne_lat4 ~140 ~140 ~140 ~140

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

Модуль XC6SLX9 (5,720) XC6SLX16 (9,112) XC7S15 (8,000) XC7A15T (10,400)
vhfastmulb16_mul_bf16_bf16_bf16_rtz_lat3 ~6.9% ~4.3% ~4.9% ~3.8%
vhfastmulb16_mul_bf16_bf16_bf16_rne_lat3 ~7.5% ~4.7% ~5.3% ~4.1%
vhfastmulb16_mul_bf16_bf16_fp32_lat4 ~5.4% ~3.4% ~3.9% ~3.0%
vhfastmulb16_add_fp32_fp32_fp32_rtz_lat4 ~5.1% ~3.2% ~3.6% ~2.8%
vhfastmulb16_add_fp32_fp32_fp32_rne_lat4 ~5.9% ~3.7% ~4.3% ~3.3%
vhfastmulb16_add_fp16_fp16_fp16_rtz_lat4 ~2.8% ~1.8% ~2.0% ~1.5%
vhfastmulb16_add_fp16_fp16_fp16_rne_lat4 ~3.3% ~2.1% ~2.4% ~1.8%
vhfastmulb16_add_bf16_bf16_bf16_rtz_lat4 ~2.9% ~1.8% ~2.1% ~1.6%
vhfastmulb16_add_bf16_bf16_bf16_rne_lat4 ~3.4% ~2.1% ~2.4% ~1.9%

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

Модуль XC6SLX9 (11,440) XC6SLX16 (18,224) XC7S15 (16,000) XC7A15T (20,800)
vhfastmulb16_mul_bf16_bf16_bf16_rtz_lat3 ~1.3% ~0.8% ~0.9% ~0.7%
vhfastmulb16_mul_bf16_bf16_bf16_rne_lat3 ~1.3% ~0.8% ~0.9% ~0.7%
vhfastmulb16_mul_bf16_bf16_fp32_lat4 ~1.6% ~1.0% ~1.1% ~0.9%
vhfastmulb16_add_fp32_fp32_fp32_rtz_lat4 ~2.3% ~1.4% ~1.6% ~1.3%
vhfastmulb16_add_fp32_fp32_fp32_rne_lat4 ~2.3% ~1.4% ~1.6% ~1.3%
vhfastmulb16_add_fp16_fp16_fp16_rtz_lat4 ~1.3% ~0.8% ~0.9% ~0.7%
vhfastmulb16_add_fp16_fp16_fp16_rne_lat4 ~1.3% ~0.8% ~0.9% ~0.7%
vhfastmulb16_add_bf16_bf16_bf16_rtz_lat4 ~1.2% ~0.8% ~0.9% ~0.7%
vhfastmulb16_add_bf16_bf16_bf16_rne_lat4 ~1.2% ~0.8% ~0.9% ~0.7%

Сравнение Latency и Fmax (оценка)

Модуль Latency Fmax XC6SLX9 (-2) Fmax XC6SLX16 (-2) Fmax XC7S15-1 Fmax XC7S15-2 Fmax XC7A15T (-1) Точность
vhfastmulb16_mul_bf16_bf16_bf16_rtz_lat3 3 ~160–175–200 MHz ~160–175–200 MHz ~180–205–240 MHz ~200–225–260 MHz ~200–230–260 MHz truncation (RTZ)
vhfastmulb16_mul_bf16_bf16_bf16_rne_lat3 3 ~140–155–180 MHz ~140–155–180 MHz ~160–180–210 MHz ~180–200–230 MHz ~180–210–240 MHz IEEE 754 RNE
vhfastmulb16_mul_bf16_bf16_fp32_lat4 4 ~130–145–165 MHz ~130–145–165 MHz ~150–165–190 MHz ~165–180–205 MHz ~170–190–215 MHz exact BF16→F32; RTZ for F32 subnormals
vhfastmulb16_add_fp32_fp32_fp32_rtz_lat4 4 ~90–120–150 MHz ~90–120–150 MHz ~110–140–170 MHz ~120–150–185 MHz ~130–160–195 MHz FP32+FP32→FP32; RTZ truncation; subnormals preserved
vhfastmulb16_add_fp32_fp32_fp32_rne_lat4 4 ~80–110–140 MHz ~80–110–140 MHz ~100–130–160 MHz ~110–140–175 MHz ~120–150–185 MHz FP32+FP32→FP32; IEEE 754 RNE; subnormals preserved
vhfastmulb16_add_fp16_fp16_fp16_rtz_lat4 4 ~110–140–180 MHz ~110–140–180 MHz ~135–170–220 MHz ~150–190–240 MHz ~160–200–250 MHz FP16+FP16→FP16; RTZ truncation; subnormals preserved
vhfastmulb16_add_fp16_fp16_fp16_rne_lat4 4 ~100–130–165 MHz ~100–130–165 MHz ~125–155–205 MHz ~140–175–220 MHz ~150–185–230 MHz FP16+FP16→FP16; IEEE 754 RNE; subnormals preserved
vhfastmulb16_add_bf16_bf16_bf16_rtz_lat4 4 ~105–135–175 MHz ~105–135–175 MHz ~130–165–215 MHz ~145–185–235 MHz ~155–195–245 MHz BF16+BF16→BF16; RTZ max finite; canonical NaN
vhfastmulb16_add_bf16_bf16_bf16_rne_lat4 4 ~95–125–160 MHz ~95–125–160 MHz ~120–150–200 MHz ~135–170–215 MHz ~145–180–225 MHz BF16+BF16→BF16; IEEE 754 RNE; canonical NaN

Рабочая частота Fmax (typ), MHz

Модуль XC6SLX9-2 XC6SLX16-2 XC7S15-1 XC7S15-2 XC7A15T-1
vhfastmulb16_mul_bf16_bf16_bf16_rtz_lat3 ~175 ~175 ~205 ~225 ~230
vhfastmulb16_mul_bf16_bf16_bf16_rne_lat3 ~155 ~155 ~180 ~200 ~210
vhfastmulb16_mul_bf16_bf16_fp32_lat4 ~145 ~145 ~165 ~180 ~190
vhfastmulb16_add_fp32_fp32_fp32_rtz_lat4 ~120 ~120 ~140 ~150 ~160
vhfastmulb16_add_fp32_fp32_fp32_rne_lat4 ~110 ~110 ~130 ~140 ~150
vhfastmulb16_add_fp16_fp16_fp16_rtz_lat4 ~140 ~140 ~170 ~190 ~200
vhfastmulb16_add_fp16_fp16_fp16_rne_lat4 ~130 ~130 ~155 ~175 ~185
vhfastmulb16_add_bf16_bf16_bf16_rtz_lat4 ~135 ~135 ~165 ~185 ~195
vhfastmulb16_add_bf16_bf16_bf16_rne_lat4 ~125 ~125 ~150 ~170 ~180

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


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

  1. Все модули очень компактны. Даже на наименьшем устройстве (XC6SLX9) самый прожорливый модуль (vhfastmulb16_mul_bf16_bf16_bf16_rne_lat3) занимает всего ~7.5% LUT6 и ~1.3% FF.

  2. RNE дороже RTZ на ~35 LUTs (~8%). Это стоимость IEEE 754 округления “до ближайшего чётного” (G/R/S биты, инкремент мантиссы, корректировка экспоненты).

  3. F32-модуль эффективнее по LUT, но потребляет больше FF. vhfastmulb16_mul_bf16_bf16_fp32_lat4 использует комбинационный mul4x4_comb на первой стадии (экономия LUT) и глубокий 4-стадийный конвейер (больше FF). Latency = 4 такта вместо 3.

  4. Ресурсы 7-й серии (Spartan-7, Artix-7) ниже, чем Spartan-6 в процентном соотношении: загрузка одинакова (~392 LUT), а устройства больше.

  5. DSP48 потенциал. Перенос mul_u8_u8_u16_lat2 на 1× DSP48A1/DSP48E1 сэкономит ~200 LUT (~50% модуля), сокращая RTZ top до ~190-240 LUT (~1.8–4.2% в зависимости от устройства).

  6. Маржа для роста. На всех целевых FPGA остаётся не менее 92% свободных LUT6 для остальной логики системы.

  7. Fmax требует верификации через реальный синтез. Все цифры частоты — оценки по RTL без запуска Xilinx ISE/Vivado timing-анализатора. Ожидаемая погрешность ±20–25%. Для точного Fmax необходимо выполнить синтез с report_timing (или trce для Spartan-6) и .xdc/.ucf ограничением на тактовую частоту.

  8. Новые FP32 аддеры (add_fp32_fp32_fp32_rtz_lat4, add_fp32_fp32_fp32_rne_lat4) после рефакторинга. Latency = 4 такта, полный конвейер, subnormal операнды не флашатся в ноль (нет FTZ). Архитектура унифицирована: hi/lo операнды выбираются на S1, вычитание без разворота операндов, sticky-бит складывается в LSB мантиссы на S1, 9-битная знаковая экспонента. RNE вариант тяжелее RTZ на ~+50 LUT (~+17%) только за счёт логики округления (G/R/S, инкремент significand, tie-to-even). FP32 сложение с выравниванием мантисс (баррел-шейфер 27 бит) и LZD требует больше LUT, чем BF16→F32 конвертация (vhfastmulb16_mul_bf16_bf16_fp32_lat4, ~308 LUT), но остаётся в рамках ~6% LUT6 даже на наименьшем устройстве (XC6SLX9).

  9. DSP48 не применим для FP32 аддеров. Основные операции — баррел-шейфер выравнивания мантисс, LZD, логика округления, F32 pack — не отображаются на DSP48A1/DSP48E1. Перенос 28-битного add/sub на DSP не даёт экономии LUT (накладные расходы на конкатенацию частей перекрывают выгоду). Ожидаемая экономия при использовании DSP: 0 LUT.

  10. Новые FP16 аддеры (add_fp16_fp16_fp16_rtz_lat4, add_fp16_fp16_fp16_rne_lat4). Latency = 4 такта, полный конвейер, subnormal операнды не флашатся в ноль (нет FTZ). Архитектура аналогична FP32 вариантам, но с половинной разрядностью: 5-битная экспонента, 10-битная мантисса, 14-битная расширенная мантисса, 15-битный raw результат, 6-битная знаковая экспонента. RTZ вариант ~160 LUT / ~151 FF, RNE вариант ~190 LUT / ~151 FF (+30 LUT за логику округления). FP16 аддеры на ~40% компактнее FP32 (add_fp32_fp32_fp32_rtz_lat4 ~290 LUT) и работают быстрее на ~20–25% за счёт сокращения цепочек переноса и LZD. Оба модуля занимают менее 3.5% LUT6 даже на XC6SLX9.

  11. Новые BF16 аддеры (add_bf16_bf16_bf16_rtz_lat4, add_bf16_bf16_bf16_rne_lat4). Latency = 4 такта, полный конвейер, subnormal операнды не флашатся в ноль. Архитектура унифицирована с FP16-вариантами: 14-битная расширенная мантисса, 15-битный raw результат, 4-битный LZD, но с 8-битной экспонентой и 9-битной знаковой экспонентой. RTZ-вариант ~165 LUT / ~140 FF, RNE-вариант ~195 LUT / ~140 FF (+30 LUT за RNE-округление). Canonical NaN 0x7FC0 и RTZ overflow в max finite 0x7F7F уменьшают число регистров по сравнению с FP16/FP32-аддерами. Оценки ручные (±20–25%), требуют синтеза для точного Fmax.