Цитата(bogaev_roman @ Jun 9 2011, 22:49)

Хорошо, а что тогда в Вашем понимании вообще цифровая схемотехника?
Как следует из самого термина, схемотехника - это создание устройств (систем) путём организации межсоединений между готовыми элементами. Цифровая схемотехника - подраздел, где элементы имеют выходы и выходы, способные работать с сигналами, представляющими собой логические уровни. Это позволяет драматически уменьшить требования к качеству передаваемых сигналов, но в то же время порождает свои специфические нюансы:
- сигналов в таких схемах, как правило, много больше, чем в аналоговых;
- сигналы являются быстроизменяющимися во времени (фронты), что накладывает требования на конструкцию (проблема целостности сигналов);
- возникают сопутствующие проблемы с организацией питания (быстродействующие импульсные токи) - обилие развязывающих конденсаторов, SSN и т.п. - тема достаточно непростая.
- организация схемы (и топологии конечного устройства) так, чтобы времена распространения сигналов были учтены и не возникало нарушения логической целостности работы устройства из-за гонок (один из способов борьбы - использование синхронного дизайна, который является основным при разработке устройств на FPGA по причине того, что сам класс этих ПЛИС спроектирован для организации дизайна именно по этому методу.
Перечень можно продолжать, но, надеюсь, и суть и так ясна. Так вот, что касается ПЛИС, то цифровой схемотехникой там занимаются разработчики самих ПЛИС - именно они решают все (кроме обвешивание конденсаторами снаружи) эти вопросы. А конечный пользователь, он был схемотехником, когда делал рисовал схемы на бумаге (или в пикаде) - схемы, которые строго соответствовали тому, что будет реализовано в железе. Т.е. каждая микросхема на схеме строго соответствовала микросхеме на плате. Каждый сигнал на схеме имел однозначную физическую реализацию на плате в виде проводника. И схема была точной
принципиальной моделью реального устройства, которое являлось
схемой на физическом уровне.
Когда этот конечный пользователь пересел на ПЛИС, он фактически перестал быть схемотехником (кроме вопросов, связанных со схемным обрамлением ПЛИС на печатной плате). Все вышеперечисленные вопросы внутри ПЛИС он уже не решает, а остаётся ему только
запрограммировать совокупность готовых функциональных блоков под свои нужды. И даже когда он рисует схему - эта схема не является той принципиальной моделью, каковой она была в случае реализации в виде печатной платы, а тут схема - это
функциональная модель, которая описывает только алгоритм. А конечная точная принципиальная модель получается уже после синтеза. Т.е. по сути "схемотехником" в каком-то смысле являются синтезатор и P&R.
Именно потому, что пользователь вводит описание алгоритмов на
функциональном уровне, получается, что его схема в ПЛИС и близко не похожа на схему, которая получается в конечном устройстве - там нет ни этих высокуровневых устройств типа счётчиков, регистров и прочего, зачастую нет даже многих сигналов, которые явно присутствуют в пользовательской схеме.
Поэтому по большому счёту нет никакой принципиальной разницы, как вводится функциональная модель - текстом на HDL, схемой, в виде временных диаграмм, на основе блок-схемы и т.п. - это всё является программированием, отличающимся только способом ввода модели
Цитата(bogaev_roman @ Jun 9 2011, 22:49)

Я, например, считаю что логика работы основных устройств и задание логических функций это и есть именно она, а не программирование.
А на Си вы когда пишете программу - вот все эти функции, передача аргументов при вызове одних функций из других, разве это не задание логики работы? А когда у вас тестбенч работает на HDL - это не программа? И когда вы пишете этот код, который будет исполнятся на симуляторе и который впоследствии будет обработан синтезатором - это не один и тот же код? Да, понятно, что синтезируемый код должен разрабатываться с учётом известных ограничений и нужно иметь всё это в виду, иначе удачи не видать, но принцип от этого не меняется.
Симулятор и синтезатор - это просто два разных инструмента, которые подготавливают разные реализации. И выполнение на РС и в ПЛИС - это тоже просто две разные реализации одного и того же алгоритма, функциональное описание которого осуществлено на языке (либо схемой). Представьте себе, что в РС установлен специальный ускоритель для симулятора, который сам реализован на основе толстой ПЛИС, и симулятор при элаборации проекта всё что можно реализует в виде исполняемых на этом ускорителе фрагментов. Такое возможно? Возможно, и подобные симуляторы даже производились (возможно, и производятся до сих пор - вопрос удобства и экономической целесообразности - это другой вопрос). А для пользователя это всё будет прозрачно. Ему без разницы, как оно там внутри организовано, ему надо, чтобы это работало корректно с точки зрения алгоритма и чтобы это работало как можно более быстро.
Цитата(bogaev_roman @ Jun 9 2011, 22:49)

И тогда объясните мне, почему ООП и Паскаль изучаются на 1-2 курсах института, а языки описания дискретных устройств (кстати также как и DSP) на 3-4 и только после цифровой схемотехники и дискретной математики?
Ну, ООП на первом курсе - это уровень так себе, скорее просто познакомить с термином и слегка ввести в курс дела. Паскаль же сам по себе очень простой язык (почему и снискал популярность). А почему ПЛИС идёт позже - это естественно: программирование параллельных систем много сложнее программирования последовательных. И как уже говорилось выше, надо всегда включать голову при разработке этих вещей, поэтому совершенно необходимо иметь представление о том, как там оно внутри реализовано. Например, реализация логики в FPGA осуществляется на основе LUT - таблицы данных. Которая представляет собой не что иное, как память с организацией Nx1. А что такое память, какие бывают её виды, какие преимущества и недостатки у них имеются - это всё надо знать хотя бы на уровне общего представления.
Аналогично по устройствам хранения информации - триггерам. Поэтому сперва нужно человеку дать основы аппаратной части, потом уже учить программированию на её основе. Сам этот принцип универсален и применим, например, к тому же программированию МК, т.е. устройства с очень ограниченными ресурсами. Программист должен очень хорошо представлять, во что выливаются его конструкции на Си (if'ы, for'ы, вызовы функций и т.п.).
Цитата(bogaev_roman @ Jun 9 2011, 22:49)

И еще - что значит , что в ПЛИС уже есть готовые шифраторы, конечные автоматы или их самому наворотить надо? Тогда нафиг вообще знать что такое триггер и счетчик?
Это частный вопрос о том, на какой степени детализации реализованы внутренние программируемые блоки. Например, полно ПЛИС с готовыми аппаратными устройствами в виде контроллеров памяти, DSP блоков и т.п.
Что касается "знать", то для достижения эффективности знать надо всегда. И не только в области ПЛИС, но и традиционного программирования тоже. Про CUDA уже говорил, но и для настольных РС всё это справедливо - если пишете программу, которая должна рабоать максимально эффективно и выжать всё из целевой платформы, то надо эту платформу знать - например, сколькиядерный процессор, и как эти ядра меж собой взаимодействуют, как разложить потоки по ядрам и как организовать синхронизацию между ними. Область другая, нежели плисоводство, но суть ровно та же.
Цитата(bogaev_roman @ Jun 9 2011, 22:49)

И вообще - почему разработчики до сих пор полностью не перешли скажем на xilinx core generator - чего там - взял модель матлаба, разрисовал ее из xilinx блоков и все - готовый синтезируемый RTL?
А такая тенденция уже давно есть. И не только на основе генератора, а прямо из матлаба. Или эта софтина Synphony от синопсиса (Synplify). Тендеция, кстати, такова, что по мере увеличения ресурсов ПЛИС меньше приходится тратить времени и сил на оптимизацию алгоритмов. В пределе это сводится к тому, что алгоритм описывается вообще на высокоуровневом языке типа Ruby, Python или даже функциональных языках, а синтезатор делает реализацию. Пока этот путь далёк от эффективности, поэтому массового перехода нет. Но тенденция устойчивая.
Эта же тенденция была и остаётся в области традиционных компьютеров. Ещё 20-30 лет назад писать программы для настольных компьютеров на ассемблере было часто оправдано и эффективно, а сегодня в ходу языки, где одна строчка кода делает работы, как сотни строк на асме. Да, на асме это можно было бы реализовать куда эффективнее (наверное даже в разы, если не в десятки раз), но если производительность алгоритма на современной платформе устраивает, то кого это волнует?