[an error occurred while processing this directive]
|
Синтезатор SystemC обязан понимать полную спецификацию языка. И при обработке входного описания синтезатор должен будет запустить обычный С/С++'ный препроцессор, чтобы тот развернул все макросы. А сам синтезатор, собсно, обрабатывает уже этот развернутый (препроцессированный) текст - точно так же, как и компилятор С++. А пользователь может писать хоть так (с макросами), хоть эдак (без макросов - если ему это больше нравится).
Насчет предпочтений спорить глупо - у каждого свои, убеждать бесполезно, это проверено жизнью. :)
А вот насчет того, "зачем этот дополнительный геморрой, если существуют специализированные языки для синтеза и моделирования железа" можно сказать следующее.
Во-первых, вспомним, что, например, тот же Верилог изначально проектировался не для описания синтеза, а как язык для моделирования параллельных процессов. Это уже позже в нем была выделена синтезируемая часть, появились синтезаторы и он стал HDL'ем. К этому моменту уже в полный рост существовал и использовался VHDL, который был заточен в т.ч. и специально под синтез. И Ваш вопрос можно было задать и тогда в контексте той ситуации - типа, нафига этот Верилог, когда для синтеза уже есть специализированный язык? Однако сегодня имеем то, что имеем. :)
Во-вторых, оба эти специализированные языки имеют недостатки. И серьезные. Например, на Верилоге для реализации какой-то части проекта я должен объявить переменные (объекты-данные) и описать действия в виде always блока. Это по аналогии с С - данные отдельно, функции отдельно. Начиная с какого-то объема все это "вперемежку" начинает конкретно мешать. Т.е. просится та самая пресловутая инкапсуляция. Но ее нет. В то же время, на SystemC я могу эти данные и действия описать объектом типа SC_CTHREAD (SystemC Clocked Thread, если склероз не подводит) - данные - члены-данные класса, действия - внутри этого тактируемого треда. Т.е., грубо говоря, совокупность глобальных данных и параллельно исполняемых блоков заменяется на объект. Из объектов строить систему гораздо удобнее, безопаснее и приятнее.
Далее, здесь еще надо вспомнить про наследование - как способ гибкого и безопасного построения сложных объектов (причем, при аппаратной реализации тут даже не должно быть накладных расходов на вызов конструкторов предков). Еще надо не забыть про шаблоны - как могучий способ для создания параметризованных типов. Я уже не говорю про более удобный (и привычный) синтаксис.
Конечно, есть уверенность, что далеко не вся спецификация SystemC будет синтезируемой - этот язык (хотя он и не язык :) тоже, как и в свое время Верилог, создавался для описания систем и моделирования их поведения. И для синтеза должно быть выделено какое-то подмножество. Поскольку живого синтезатора я не видел, то это только предположение (но под ним, согласитесь, есть все основания). А вот SM может сказать наверняка. :))
E-mail: info@telesys.ru