Источник данных: docs/stat/stat_top_spartan6.md, docs/stat/stat_top_spartan7.md, docs/stat/stat_top_artix7.md.
Все цифры — оценки на основе ручного подсчёта по RTL-коду (погрешность ±20–25%).
| 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 |
| Модуль | 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 |
| Модуль | 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 |
| Модуль | 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% |
| Модуль | 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 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 |
| Модуль | 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%, без реального синтеза).
Все модули очень компактны. Даже на наименьшем устройстве (XC6SLX9) самый прожорливый модуль (vhfastmulb16_mul_bf16_bf16_bf16_rne_lat3) занимает всего ~7.5% LUT6 и ~1.3% FF.
RNE дороже RTZ на ~35 LUTs (~8%). Это стоимость IEEE 754 округления “до ближайшего чётного” (G/R/S биты, инкремент мантиссы, корректировка экспоненты).
F32-модуль эффективнее по LUT, но потребляет больше FF. vhfastmulb16_mul_bf16_bf16_fp32_lat4 использует комбинационный mul4x4_comb на первой стадии (экономия LUT) и глубокий 4-стадийный конвейер (больше FF). Latency = 4 такта вместо 3.
Ресурсы 7-й серии (Spartan-7, Artix-7) ниже, чем Spartan-6 в процентном соотношении: загрузка одинакова (~392 LUT), а устройства больше.
DSP48 потенциал. Перенос mul_u8_u8_u16_lat2 на 1× DSP48A1/DSP48E1 сэкономит ~200 LUT (~50% модуля), сокращая RTZ top до ~190-240 LUT (~1.8–4.2% в зависимости от устройства).
Маржа для роста. На всех целевых FPGA остаётся не менее 92% свободных LUT6 для остальной логики системы.
Fmax требует верификации через реальный синтез. Все цифры частоты — оценки по RTL без запуска Xilinx ISE/Vivado timing-анализатора. Ожидаемая погрешность ±20–25%. Для точного Fmax необходимо выполнить синтез с report_timing (или trce для Spartan-6) и .xdc/.ucf ограничением на тактовую частоту.
Новые 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).
DSP48 не применим для FP32 аддеров. Основные операции — баррел-шейфер выравнивания мантисс, LZD, логика округления, F32 pack — не отображаются на DSP48A1/DSP48E1. Перенос 28-битного add/sub на DSP не даёт экономии LUT (накладные расходы на конкатенацию частей перекрывают выгоду). Ожидаемая экономия при использовании DSP: 0 LUT.
Новые 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.
Новые 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.