Ответ 1
Verilog - это язык аппаратного определения. Языки программирования, как правило, понимаются как языки для того, чтобы сообщать существующим аппаратным средствам, что делать, а не перенастраивать указанное оборудование.
В классе профессор сказал, что ученики не должны говорить, что они научились программировать в Verilog. Он сказал, что что-то вроде Verilog не используется, чтобы проецировать его на дизайн. Итак, как Verilog отличается от других языков программирования?
Verilog - это язык аппаратного определения. Языки программирования, как правило, понимаются как языки для того, чтобы сообщать существующим аппаратным средствам, что делать, а не перенастраивать указанное оборудование.
Verilog, как и VHDL, предназначен для описания аппаратного обеспечения. Вместо этого языки программирования, такие как C или С++, обеспечивают описание программ на высоком уровне, то есть последовательность инструкций, выполняемых микропроцессором.
На практике Verilog и VHDL не предлагают те же функции, что и языки программирования, хотя они очень похожи. Например, цикл for
в C/С++ описывает выполнение последовательного данного фрагмента кода; вместо этого, цикл for ... generate
в Verilog/VHDL описывает несколько экземпляров параллельно одного и того же аппаратного строительного блока (скажем, логический логический элемент AND
). Точнее, существует также простой цикл for
в Verilog, но опять же он должен быть "синтезируемым", то есть компилятор должен иметь возможность генерировать логику, соответствующую описанию.
Как правило, у новичка в Verilog/VHDL возникает соблазн "перевести" заданную функцию/алгоритм из псевдокода типа C/С++ непосредственно в Verilog/VHDL: неожиданно это может иногда работать, но это всегда приводит к значительному плохой дизайн. Нужно действительно осознавать эти различия, чтобы стать хорошим программистом Verilog/VHDL.
Поскольку это HDL, так это определение аппаратного обеспечения, и все, что сделано в Verilog (не совсем ничего, но синтезируемое), будет синтезировано в реальном аппаратном обеспечении. Таким образом, вы не можете просто использовать функции программирования, такие как концепция класса и OOPS, потому что они не могут создавать какое-либо оборудование.
Но в C все будет преобразовано в исполняемый шестнадцатеричный файл, который будет загружен в ваш ram во время выполнения программы.
Еще одно принципиальное отличие состоит в том, что все аппаратное обеспечение является параллельным, поэтому, если вы написали a = b + 1 и c = d + 1 в verilog, то в синтезированном оборудовании оба модуля будут работать одновременно. Но в C все последовательно, поэтому в одной и той же программе на самом деле обе команды будут загружаться по одному в вашем процессоре.
Я ничего не знаю о Verilog, но просто сделал быстрый поиск в googling, и страницы вики, похоже, очень хорошо объясняют различия в концепции, которые ваш учитель, казалось, ускользал. Поскольку некоторые из других плакатов здесь написаны, я не знаю, что я бы отклонил это как не язык программирования, я думаю, что существует высокая тенденция для программистов верить, если это не так, как программирование приложений или сборка, тогда это не совсем программирование, но вкратце, что BS. Все выше машинного кода в принципе одинаково для меня, если это файл, который я передаю компьютеру, и он сообщает компьютеру, как делать что-то, что он программирует на компьютере (я думаю, проблема заключается в том, чтобы рисовать линию между пользователями и разработчиками, нам нравится чувствую себя особенным). Если мы планируем скоро вернуться к перфокартам, я думаю, что все, что имеет синтаксис типа C, или позволяет описывать синтаксически строгий (четко определенный) способ и изменяет поведение компьютера (что он выводит для данного вход), то вы в какой-то мере проделали какое-то программирование.
http://dictionary.reference.com/browse/programming
На странице wiki:
http://en.wikipedia.org/wiki/Dataflow_language
Программирование потока данных фокусируется на том, как вещи соединяются, в отличие от императивного программирования, которое фокусируется на том, как обстоят дела. При императивном программировании программа моделируется как серия операций (вещь, которая "слушается" ), поток данных между этими операциями вторично относится к поведению самих операций. Тем не менее, программы программирования потока данных программируют как ряд (иногда взаимозависимых) соединений, причем операции между этими соединениями имеют второстепенное значение.
(Я думаю, что ключ здесь - это определители типа программирования, а не "язык программирования", а другой - "язык дизайна", поскольку я понимаю, что они оба языка программирования, целей и реализаций). Когда я думаю о дизайне, я в основном думаю об этом: http://dictionary.reference.com/browse/design и это не программа, хотя программа может использовать дизайн (и, вероятно, должна, как правило, упоминаться как шаблоны проектирования, но не то, что вы делаете)
Связано с: http://en.wikipedia.org/wiki/Verilog
По словам ваших учителей, этот язык, вероятно, будет использоваться для решения различных проблем из вашей повседневной программы Java/C и другими средствами, однако, чтобы сказать, что это не программа, кажется неправильной.
Verilog содержит функции для описания логических netlists (RTL) и функций, чтобы облегчить их имитацию. Описание описания RTL как программы может сообщить, что тот, кто описывает его как таковой, не понимает логического дизайна или синтеза. Было бы целесообразно описать стимул testbench в качестве программы.
verilog/vhdl используется для создания и проектирования конкретной прикладной системы на микросхеме, встроенной в электронные устройства.
c/С++ использует программное обеспечение для проектирования на компьютере
Это язык программирования, а не программное программное обеспечение, но для описания аппаратного дизайна, но выход не обязательно является "приложением", как мы его понимаем.
Язык имеет формальный синтаксис.