Минулого тижня готував лекцію про мову SystemC і натрапив на статтю Stephen A. Edwards, «The Challenges of Synthesizing Hardware from C-Like Languages», про різні C-подібні мови, що застосовуються для опису апаратури. Серед різних мов та інструментів було посилання на американський патент № 6 226 776 про синтез C у залізо, який зараз нібито належить фірмі Synopsys. Автор статті описує патент як такий, що «претендує на широку підтримку мови ANSI C»: згадується підтримка вказівників, рекурсії, динамічного розподілу памʼяті.

Мене зацікавив цей патент. Близько 85 сторінок із усіх 108 — це приклади на C і відповідні їм результати синтезу на Verilog. Ще 14 сторінок — це словесний опис усіх прикладів. І останні чотири сторінки присвячені опису формули винаходу. Моделі здебільшого представлені у вигляді цифрових автоматів, набагато рідше — data-flow моделі. Методу перетворення C на цифровий автомат як такого там не було. Я звернув увагу на один приклад, у якому з однієї функції викликалися дві інші.

`int sum1 (int n) {     int i, sum = 0;     for (i = 0; i < n; i++)         sum += i;     return sum; }

int sum2 (int array[], int size) {     int i, sum = 0;     for (i = 0; i < size; i++)         sum += array[i];     return sum; }

int f1() {     int i;     int array[10];     int size = sizeof(array)/sizeof(array);     for (i = 0; i < size; i++)         array[i] = i * 2;     return sum1(size) + sum2(array, size); } This source code was highlighted with Source Code Highlighter.`

Перш ніж читати далі, подумайте: скільки станів автомата потрібно, щоб виконати цей алгоритм? Мені теж спочатку здалося, що їх має бути небагато. Але в запропонованому варіанті синтезу для виконання цього алгоритму потрібно 16 станів автомата. Оскільки мій компілятор C++ у VHDL ще не здатен відкомпілювати такий код, то вирішив намалювати граф-схему алгоритму вручну.

image

Усі функції вже вбудовані, і передбачається, що ініціалізація змінних відбувається за сигналом reset. Таким чином, у цьому автоматі виходить лише сім станів (див. Баранов С. І. Синтез цифрових автоматів).

От не можу зрозуміти: у них там у 2001 році не знали того, що в нас було відомо ще в 1974?