Пpиветствую, Harry!
MT>> Тогда я не понимаю, зачем С++ синтез вообще ?
HZ> Во-первых, HDL - это подмножество языка. К примеру, тот же Верилог HZ> создавался как язык для моделирования. HZ> Во-вторых, Verilog/VHDL как средства для описания моделирующих HZ> процессов Спасибо, что лишний раз уточнил известные мне вещи :-D Про моделирование я обеими руками за SystemC (только вот времени заняться никак нет). Я ж именно про синтез спросил.
MT>> Имхо смысл в С синтезе будет, если синтез С будет уровнем выше, MT>> чем HDL. HZ> Он и есть выше. Именно _синтез_ ? Моделирование выше, это да.... А вот синтезируемое подмножество уже выше ?
MT>> То есть мы будем описывать не Hardware, как сейчас, а алгоритм.
HZ> А ты и сейчас не хардвару рисуешь, а задаешь описание поведенчески - HZ> пишешь процесс, который по событию производит какие-то действия. А HZ> конкретное железо уже после синтезатор рожает. Всё-таки сейчас я по HDL коду почти всегда могу сказать, как этот конкретный кусок кода будет выглядеть в железе. Или по крайней мере перечислить реально возможные варианты. HZ> Впрочем, я понял, что ты имеешь в виду. :) Во-во :-)
MT>> В идеале - например, чтобы из сишного алгоритма БПФ MT>> этот синтезатор генерил нам качественный аппаратный БПФ.
HZ> Фантазии, фантазии... :) Скорее мечты :-) HZ> Если проводить параллель с программированием, то это звучало бы так: HZ> пишешь в тексте программы, дескать, отфильтровать сигнал в HZ> полосе F, с неравномерностью D, шириной переходной полосы f и т.д. И HZ> пусть компилятор родит соответствующий код. :) А в чём проблема ? Matlab/Simulink в зубы :-) Будет тебе из него сишный код. Как раз на таком высоком уровне проблем нет. В схематике соединяем готовые библиотечные блоки. В данном случае берём библиотечный фильтр. Hо касательно железа я имел в виду всё-таки не совсем то. Хочется уровень выше голой цифры в виде сумматоров, шин и триггеров, но шире и универсальнее, чем библиотека готовых блоков. SystemC (синтезируемая часть) сейчас на уровне голой цифры. Мне же хотелось бы автоматического перевода _последовательного_ (программного) алгоритма в _параллельный_ (аппаратный). И мнится мне, что в принципе это возможно. AFAIK любой современный компилятор уже имеет средства например для разворачивания цикла for (если цикл удовлетворяет определённым требованиям) в параллельную конструкцию, эффективно выполняемую с помощью SIMD блоков процессора (MMX,SSE или там AltiVec). Вот и хотелось бы продолжить и углубить сей момент. Чтоб к примеру тот же for, написанный в программе, развернулся прямо в некий SIMD блок в ПЛИС :-) При арифметических операциях ставим или аппаратный блок (сумматор/умножитель/etc), или, если операций много, но занимают они мало места в программе, несколько библиотечных АЛУ с блоками управления. При вызове a=fft(b) просто ставим готовый аппаратный блок БПФ из некой стандартной библиотеки, автоматически настраивая его параметры по типам и кол-ву аргументов и результатов (типа Xilinx CoreGenerator, но в пакетном режиме). При обьявлении в программе массива ставим модули памяти нужной глубины и разрядности. В зависимости от числа операторов программы, лазающих по этому массиву, делаем её много- или однопортовой. Или ставим несколько банков. Если памяти надо очень много, спрашиваем юзера, а не подключить ли внешнюю SDRAM. При отрицательном ответе ругаемся и выходим, при положительном берём библиотечный блок интерфейса SDRAM и заодно делаем юзеру схему соединения SDRAM с нашей ПЛИС или ASIC. Hу и так далее. Я ещё много могу придумать. Как вширь (автоматически перерабатывать в железо разные операторы и типовые алгоритмы), так и вглубь (как эти аппаратные блоки автоматически потом увязать вместе). Тем более что неоднократно приходилось по имеющимуся алгоритму в виде программы на С делать железо. И закономерности в этом процессе есть. Правда, основная такова - при наличии рядом товарища, писавшего программу и знающего предметную область, дело значительно упрощается :-). А если в С++ ещё добавить некие средства явного параллелизма - вообще будет замечательно. Тем более что такие расширения для Си вроде есть. Вот и юзать их в синтезе. Поскольку я глупый, кто-то умный наверняка уже всё продумал и пытается сделать. Вопрос - ГДЕ ОHО ? HZ> Это задача глубокого (для ЭВМ) алгоритмического синтеза, HZ> с такими задачами пока что человек справляется HZ> несоизмеримо лучше. Тем не менее сишные компиляторы уже научились делать распараллеливание. Хорошо ли, плохо ли - но прогресс налицо. HZ> Т.ч. научить синтезатор рожать железо из HZ> абстрактного описания, наверное, можно, только вот качество HZ> реализации, думаю, тебя вряд ли устроит. Пока нету этого рожания. Мнится мне, что тут, как всегда, надо выбрать золотую середину. То бишь уменьшить степень абстракции исходной программы (==выделить синтезируемое подмножество), зато улучшить реализацию.
MT>> единственное преимущество которого в возможности быстрой адаптации MT>> обычного программера в железячника. HZ> Тоже нет. Для того, чтобы чел мог эффективно работать, ему придется HZ> разобраться в потрохах. Вот и я о чём. В системСи смысл на данный момент - моделирование.
HZ> Реальное же преимущество SystemC в том, что на нем проще описывать HZ> _сложные_ устройства. _Модели_ сложных устройств - но не _реальные_ устройства. Hо тут его поджимают MATLAB/Simulink и SystemView. Вот я и не понимаю ниши, в которую предназначен SystemC сейчас. Очень сложные системы имхо проще моделить в мышизме. Синтезируемые вещи отлично пишутся на HDL. Уже есть некоторые средства перехода от мышизма прямо к HDL (Xilinx System Generator и аналогичная штука у Альтеры). СистемСи имхо остаётся ууузенькая ниша между мышизмом и HDL. Причём средств перехода к HDL пока толком нет. HZ> Сейчас есть нечто под названием SystemVerilog Слышал такую букву. Меня в данный момент в моделировании больше интересует VHDL-AMS/Verilog-A. Пытаюсь приспособить к жизни. Как и совместное моделирование HDL+MATLAB. У этого на мой взгляд есть своя ниша - совместное _цифроаналоговое_ моделирование на поведенческом уровне. Ранее такое можно было делать только на уровне мелкой логики AFAIK (во всяких PSpice). А теперь уже на уровне алгоритма. HZ> Синплифай, к примеру, уже кое-что начал поддерживать. С какой версии ?
MT>> А в остальном - приходится самому думать, как абстрактный MT>> алгоритм эффективно переложить в реальность кусочка Si. HZ> Так это и есть основная задача, в которой машина не может заменить HZ> человека. И радуйся - если комп сможет это делать вместо тебя, ты HZ> останешься без работы. :) Hапугал :-) Рисую табличку "Will code HDL for FOOD" :-D
Michael Tulupov ...