Vhdl или verilog что лучше

Цифровая лаборатория FPGA / DSP

Информационно-учебный проект по цифровой электронике

ЛР2 > Исследование комбинационных устройств: особенности языка Verilog

Тема: Особенности HDL языков, отличие Verilog от VHDL. Основные элементы Verilog – типы данных, идентификаторы, комментарии, описание шин, структура модулей.

1. Теоретические сведения

Языки описания аппаратуры (HDL, Hardware Descripion Language) могут быть использованы на всех этапах разработки цифровых электронных систем. Они применяются на этапах проектирования, верификации, синтеза и тестирования аппаратуры, а так же для передачи данных о проекте, его модификации и сопровождении.

Языки описания аппаратуры, в основном, используются для проектирования программируемых логических устройств (PLD – Programmable Logic Devices) различного уровня сложности, вентильных программируемых матриц (FPGA – Field Programmable Gate Array). На сегодняшний день нашли применение несколько таких языков. Наиболее популярные из них – Абель, Palasm и Cupl (используются для устройств малой степени сложности), Verilog и VHDL (для сложных PLD и FPGA устройств).

Преимущества HDL:

HDL позволяют создавать принципиальные схемы, иерархические блоки, алгоритмы функционирования устройств, а также тестовые файлы (test-bench) для проверки созданных модулей.

Язык Verilog

Verilog — это язык описания аппаратуры, используемый для разработки и моделирования электронных систем. Этот язык (также известный как Verilog HDL) позволяет осуществить проектирование, верификацию и реализацию (например, в виде СБИС) аналоговых, цифровых и смешанных электронных систем на различных уровнях абстракции.

Verilog был разработан фирмой Gateway Design Automaton для использования внутри компании. Затем, в 1989 г., Verilog был открыт для общего использования. Стандарт для данного языка был принят в 1995 году (IEEE1364-1995).

Verilog имеет простой синтаксис, сходный с языком программирования “С”. Малое количество служебных слов и простота основных конструкций упрощают изучение и позволяют создавать эффективные приложения. На описание одной и той же конструкции в Verilog потребуется в 3–4 раза меньше символов, чем в VHDL.

Интересной особенностью Verilog является наличие стандарта PLI (Program Language Interface), который позволяет включать функции, написанные пользователем (например, на С), в код симулятора.

Краткие теоретические сведения по языку Verilog

Поддерживаемые типы данных:

Создавать свои типы данных в Verilog нельзя.

Кроме основных типов данных, которые присущи всем языкам программирования, в HDL вводится новое понятие – сигнал.

Сигналы бывают двух основных типов:

Отличие сигналов wire от сигналов reg состоит в том, что reg способен сохранять присвоенное значение (работает как переменная в языках программирования или как устройство последовательного типа). К сигналам типа wire требуется прилагать непрерывное воздействие (как устройство комбинационного типа). То есть wire моделирует связь (или устройство), которая переходит в неопределенное состояние при отключении входного воздействия. Существуют также типы wand, wor, tri0, tri1, triand, trior, trireg для моделирования различных типов связей (wand – wired and или «монтажное И», tri0 – подтягивающий резистор к нулевому уровню, trireg – накопительная емкость, и т.п.), но такие цепи встречаются редко и используются только для моделирования.

Идентификаторы:

Комментарии:

Комментарии в языке Verilog бывают двух типов и полностью соответствуют комментариям языка C++:

Маленький пример:

Допустимые значения для сигналов:

Всего существует четыре типа значений, которые могут принимать сигналы (wire и reg): 0, 1, z, x. Первые три соответствуют двум логическим уровням и состоянию с высоким импедансом. Четвертый (х) означает неопределенное состояние и используется при моделировании неинициализированных сигналов, при возникновении конфликтов (два выхода с противоположными состояниями соединены вместе), указания нестабильных состояний триггеров (при нарушении временных соотношений между входами данных и тактовым входом) и т.п. Другими словами – во всех случаях, когда моделирующая программа не может определить значение для данного сигнала.

Для указания значения многоразрядных сигналов (констант, переменных) используются следующие конструкции:

1) 1’bz – одноразрядный высокоимпедансный сигнал;

2) 10’d1_000 – десятиразрядное число 1000 записанное в десятичном виде (символ подчеркивания игнорируется);

3) 4’bx01z – четырехразрядный двоичный сигнал с неопределенным старшим битом, высокоимпедансным младшим, вторым и третьим в состоянии логических «1» и «0», соответственно.

В общем виде – вначале указывается разрядность сигнала, потом одинарная кавычка ‘(не путать с апострофом ), далее основание системы счисления (b,o,d,h) и цифры использующиеся в данной системе счисления, задающие значение сигнала.

Для двоичной системы допускается использование символов z и x.

Символ подчеркивания служит для улучшения восприятия записи и игнорируется при синтезе и моделировании. Использование констант без указания разрядности не желательно, так как по умолчанию константа воспринимается с разрядностью, равной 32 бита.

Данные типа integer могут присваиваться регистрам.

Файлы языка Verilog

Имеют расширение “.v”. Например: “module1.v”, “NCO.v”, “oscillator.v”

Структурное описание:

Основной структурной единицей программы на языке Verilog является module. Модуль описывается ключевыми словами moduleendmodule. В одном программном файле может присутствовать несколько модулей. Модули не могут быть вложенными. Другие модули могут подключаться к входным и выходным портам модуля, образуя иерархическую структуру. При запуске компилятора языка Verilog, он формирует иерархическое дерево проекта из всех входящих модулей и находит модуль верхнего уровня иерархии. Важно помнить, что имя модуля верхнего уровня иерархии должно совпадать с именем файла, в котором этот модуль описан!

Источник

VHDL vs. Verilog [closed]

Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.

VHDL and Verilog are some of the HDLs used today. What are the advantages and disadvantages of using Verilog or VHDL over the other?

11 Answers 11

I can’t tell you which to learn, but here’s some contrasting points (from a very VHDL-centric user, but I’ve tried to be as fair as possible!), which may help you make a choice based on your own preferences in terms of development style:

Lots of compilation errors to start with, but then mostly works how you expect. This can lead to a very steep feeling learning curve (along with the unfamiliar syntax)

Verilog

Also in Verilog’s favour is that high-end verification is leaning more and more to SystemVerilog which is a huge extension to Verilog. But the high-end tools can also combine VHDL synthesis code with SystemVerilog verification code.

SystemC is also a good option for an HDL. SystemC supports both System level and Register Transfer Level (RTL) design. You need only a C++ compiler to simulate it. High-Level Synthesis tools will then convert SystemC code to Verilog or VHDL for logic synthesis.

I learned both the same week. VHDL is like ADA/Pascal and Verilog is like C. VHDL is more verbose and more painful to get a compile, but once you get a compile your chances at success are better. At least that is what I found. Verilog, like C, is quite content at letting you shoot yourself in the foot. Some industries like aerospace/govt lean toward VHDL, others lean toward Verilog. The problem I find with both is the test bench capabilities, and when trying to learn and trying to get from simulation to silicon/FPGA writing synthesizable only code is another level of education.

There is a language I really like called CDL. It is strictly synthesizable, you write your test benches in other ways, it generates synthesizable Verilog which you can take into other tools. Unfortunately the CDL docs are lacking, I hope to get some samples out in the world to show how much easier it is to use than either Verilog or VHDL, but just dont have that done. It comes with its own sim/test environment. With CDL and GTKWave you can do a considerable amount of work.

Another tool called Verilator, is fairly rigid in keeping your Verilog clean. It is a free Verilog simulator with a very easy way to attach to the sim or create test benches in C/C++. You can use Verilog as well, doesn’t limit you there. There is Icarus Verilog as well, which is bigger and more well known, but I would recommend Verilator if you want to learn Verilog. For VHDL there is GHDL, my experience with it was not as good as Verilator, but at least there is a free tool for trying to get your feet wet. If you have software programming experience you are likely to pick up and enjoy Verilog faster than VHDL.

I definitely agree with Leon, try both. fpga4fun and other web pages has some good info and some of those pages will give you both the Verilog and VHDL equivalents for the topic they are discussing. I find pages like those the most useful for comparing the two languages. If using an HDL is something you want to do in your career, I recommend having at least some capabilities with both, maybe really good with one but don’t be completely unable to use the other.

Many holy wars have been fought over this. One particular disadvantage of Verilog is its non-deterministic behavior. http://www.sigasi.com/content/verilogs-major-flaw

Both have advantages and disadvantages. VHDL is more academic, verbose and complex. You have to write more code, but the rigor means it’s more likely to work. Verilog is simpler for typical digital design, but makes it easier to create tricky bugs. VHDL is more common at universities. Verilog is more common in big semiconductor companies.

Usually the choice of one or the other is driven by the tools you are using. Some of the popular FPGA tools do better with VHDL. Some popular ASIC tools do better with Verilog. So, which is better depends on what you want to do with it.

Say you want to build small projects using the Altera FPGAs that are popular in EE schools. The free tools support both HDLs. But you may find the user community is mostly using VHDL. There will be more example code, reusable modules, etc. if you opt for that language.

More discussion here and useful links here:

For a beginner/hobbyist, the best advice is to decide what chips you want to play with, and see what examples the vendor provides. Use that. Once you’re an experienced digital designer, learning the other language will only take a few days.

Short answer: use SystemVerilog, but learn also VHDL. Avoid Verilog-2001 if you can.

Very long answer: for the moment, I assume by Verilog you mean Verilog-2001 which is probably what also most other answers assume. The best suggestion would probably be to learn both, but use neither (more on this at the end of the answer). The main differences can be resumed in the following:

That said, the most important concepts are shared by the two languages, albeit by different names (e.g. always vs process ) and in any case the difficulty in learning an HDL is more related to the concepts behind (such as the concurrency of all processes, the HW conventions etc.) than to the language itself. Considering the differences, if the choice is between Verilog 2001 and VHDL I personally would address any beginner to VHDL.

However, as I said, my suggestion is actually to use neither VHDL nor Verilog-2001 if you have the power to choose. Contrary to what many people assume, SystemVerilog is not a higher-level language useful only for system-level design or verification and has little to share with languages that can be fed into a high-level synthesis tool like SystemC.

Instead, SystemVerilog is a full update of the Verilog language (based on Verilog-2005, see http://en.wikipedia.org/wiki/SystemVerilog) that has a fully synthesizable subset that matches the conciseness of Verilog with higher expressivity than both Verilog-2001 and VHDL, providing in my opinion the best of both worlds.

Examples of very significant constructs/expressions available in SystemVerilog that are not available in Verilog-2001, VHDL or both include:

I tested all this differences «on my skin» while working on a quite complex multicore system for research purposes. It is now supported by many tools, and I know for sure (from using them almost every day) that it is supported by Synopsys tools (both for ASIC and FPGA synthesis flows), Xilinx Vivado (for FPGA synthesis), and simulation tools such as MentorGraphics Modelsim, Cadence NCsim and Synopsys VCS.

To be totally complete, there are two other significant kinds of languages in the toolbox of the hardware designer (though quality of these tools may vary a lot):

Источник

Verilog — в чем отличия?

Оценить 7 комментариев

Vhdl или verilog что лучше. Смотреть фото Vhdl или verilog что лучше. Смотреть картинку Vhdl или verilog что лучше. Картинка про Vhdl или verilog что лучше. Фото Vhdl или verilog что лучше

Vhdl или verilog что лучше. Смотреть фото Vhdl или verilog что лучше. Смотреть картинку Vhdl или verilog что лучше. Картинка про Vhdl или verilog что лучше. Фото Vhdl или verilog что лучше

Vhdl или verilog что лучше. Смотреть фото Vhdl или verilog что лучше. Смотреть картинку Vhdl или verilog что лучше. Картинка про Vhdl или verilog что лучше. Фото Vhdl или verilog что лучше

Vhdl или verilog что лучше. Смотреть фото Vhdl или verilog что лучше. Смотреть картинку Vhdl или verilog что лучше. Картинка про Vhdl или verilog что лучше. Фото Vhdl или verilog что лучше

Даниил Смирнов, статья напоминает старые времена когда говорили о преимуществах детерминизма при графическом описание схемы из встроенных примитивов. И самое главное в статье не приведен пример кода о котором они рассуждают. Языки имеют абсолютно взаимозаменяемые конструкции только синтаксис разный

Вот в чем более оптимальная запись сдвигающего регистра?

library ieee;
use ieee.std_logic_1164.all;

entity shift_reg is
generic (
NUM_STAGES : natural := 256
);

port (
clk : in std_logic;
enable : in std_logic;
reset : in std_logic;
sr_in : in std_logic;
sr_out : out std_logic
);
end entity;

Vhdl или verilog что лучше. Смотреть фото Vhdl или verilog что лучше. Смотреть картинку Vhdl или verilog что лучше. Картинка про Vhdl или verilog что лучше. Фото Vhdl или verilog что лучше

Михаил, а Вы забавно играете, раз пишите два разных
Начнем с того, что в VHDL как и в Verilog можно написать
clk, enable, reset : in std_logic;
Далее, есть тип данных std_logic_vector, поэтому свой sr_length создавать необязательно
В VHDL 2008 уже также добавили возможность писать вместо if(reset=’1′) просто if(reset)
и операция конкатенации тоже присутствует.

Отличия языков в уровнях абстракции.

Vhdl или verilog что лучше. Смотреть фото Vhdl или verilog что лучше. Смотреть картинку Vhdl или verilog что лучше. Картинка про Vhdl или verilog что лучше. Фото Vhdl или verilog что лучше

На уровне вентилей Verilog имеет все из коробки, язык от туда и начинался, в то время как для VHDL была разработана VITAL. В результате они сравнились по возможностям.

Я начинал с VHDL, он такой строгий и прям в строгости держит, сейчас перебираюсь на Verilog, SystemVerilog.

Источник

Графический дизайн или текст Verilog/VHDL?

Vhdl или verilog что лучше. Смотреть фото Vhdl или verilog что лучше. Смотреть картинку Vhdl или verilog что лучше. Картинка про Vhdl или verilog что лучше. Фото Vhdl или verilog что лучше

Рискну затронуть такую холиварную тему: сравнение двух методов разработки, графический ввод схемы и текстовое описание проекта на языках HDL Verilog / VHDL.

Сразу скажу, что я сторонник текстового ввода, так что наверняка моя заметка может выглядеть предвзятой. Тем не менее, вот еще важные замечания по теме:

Теперь все таки давайте рассмотрим недостатки и преимущества методов разработки в схеме или в текстовом виде.

Условно можно выделить несколько взаимосвязанных критериев для оценки метода разработки цифровых проектов для ПЛИС и ASIC: удобство, скорость разработки, представление, портируемость, управляемость кода, надежность.

Удобство.

Почему я считаю его неудобным? Ну, скажем так, он мог бы быть и получше. Если посмотреть на другие CAD системы (PCAD, AUTOCAD) или даже не только CADы, а, например, всякие 3D редакторы (BLENDER, 3DMax), то можно увидеть несколько иную картину. Интересно, что удобство работы с графическими системами обычно достигается путем использования. строки для текстовых команд. Получается, чем меньше дизайнер использует мышь и чем чаще пользуется командным вводом для манипуляции графическими объектами на экране, тем быстрее у него спорится работа.

Vhdl или verilog что лучше. Смотреть фото Vhdl или verilog что лучше. Смотреть картинку Vhdl или verilog что лучше. Картинка про Vhdl или verilog что лучше. Фото Vhdl или verilog что лучше

Сколько движений мышью и сколько кликов нужно сделать, чтобы добавить новый элемент в схему в среде Altera Quartus II?

Возможно, что сама Altera, понимая, что текстовый ввод продуктивнее, не уделяет внимания совершенствованию своего графического редактора.
Или вот еще аргумент против графики. Если человек привык к схемотехническому вводу в среде Altera Quartus II, то как быстро он сможет переучиться на другую среду проектирования, например, Xilinx ISE? С текстовым вводом все понятно, а как быть с графическим?

Скорость разработки.

Конечно, скорость разработки тесно связана с удобством среды проектирования (смотри пункт первый).
Обычно люди, которые рисуют схемы говорят, что скорость ввода их не волнует, потому что обдумывание проекта занимает гораздо больше времени, чем его отрисовка. Наверное это так, с этим можно даже и согласиться.

На самом деле я сам часто пользуюсь графическим вводом. Часто в проекте у меня бывает графический файл самого верхнего уровня иерархии. Дальше модули, включенные в иерархию это либо Verilog, либо компоненты созданные визардом Altera типа FIFO, компонент DDR контроллера, модуль SRAM или PLL, что-то еще.. Простой проект можно и нарисовать, но вот когда он постепенно усложняется со временем редактировать его становится все сложнее и сложнее. Приходится раздвигать графические объекты, компоненты, провода, шины, чтобы вставить что-то новое. Это перемещение объектов схемы занимает довольно много времени, особенно если дизайнер имеет чувство красоты и ему нравятся схемы с выровненными по сетке элементами. Может так получиться, что вместо работы над собственно проектом человек работает над перемещением компонентов. Напечатать большой графический проект на принтере становится все труднее, формат бумаги A4 уже не подходит, нужно A2 или A1, или склеивать листы.

Кроме этого, надо заметить, что скорость разработки сильно зависит от специфики и возможностей языка программирования или среды проектирования.

И вот важный момент: все, что можно нарисовать в схеме может быть описано текстовым языком HDL, но не все, что описано на языке HDL может быть легко реализовано в схеме. Приведу некоторые примеры:

module hvsync (
// inputs:
input wire pixel_clock,

// outputs:
output reg hsync,
output reg vsync,
);

// video signal parameters, default 1440×900 60Hz
parameter horz_front_porch = 80;
parameter horz_sync = 152;
parameter horz_back_porch = 232;
parameter horz_addr_time = 1440;

parameter vert_front_porch = 3;
parameter vert_sync = 6;
parameter vert_back_porch = 25;
parameter vert_addr_time = 900;
.

.i_system_rdy ( system_rdy ),

.o_wb_adr ( m_wb_adr [1] ),
.o_wb_sel ( m_wb_sel [1] ),
.

В проект может быть вставлен, вкомпилирован либо 5-ти стадийный процессор (он быстрее, но занимает больше логики) либо 3-х стадийный процессор (медленней, но занимает меньше логики). И эта условная компиляция происходит в зависимости от определенного параметра AMBER_A25_CORE. Невозможно использовать условную компиляцию в схемах. Условная компиляция нужна, когда проект имеет несколько вариантов реализации, например, для разных типов ПЛИС, для однотипных проектов, для включения в проект отладочных модулей, которые в финальный продукт не включаются и так далее.

module inst_loop
(
input wire clock,
input wire in,
output wire out
);

genvar index;
generate
for (index=0; index
begin : fu
wire o_q;
if (index==0)
func #(index) func_inst (
.fclk(clock),
.d( in ),
.q(o_q)
);
else
func #(index) func_inst (
.fclk(clock),
.d( fu[index-1].o_q ),
.q(o_q)
);
end
endgenerate

assign out = fu[3].o_q;
endmodule

Vhdl или verilog что лучше. Смотреть фото Vhdl или verilog что лучше. Смотреть картинку Vhdl или verilog что лучше. Картинка про Vhdl или verilog что лучше. Фото Vhdl или verilog что лучше

Такой цикл может создать, например, структуру из 1000 соединенных модулей. Как нарисовать такое в схеме? Сколько времени понадобится? А вдруг нарисовал такую схему, а потом нужно добавить сигнал к модулю, что все заново исправлять-перерисовывать? Это будет трудно.

Наглядность представления.

К сожалению, должен сказать, что лично у меня очень часто возникают именно проблемы чтения схем. Вот такой пример.

Vhdl или verilog что лучше. Смотреть фото Vhdl или verilog что лучше. Смотреть картинку Vhdl или verilog что лучше. Картинка про Vhdl или verilog что лучше. Фото Vhdl или verilog что лучше

Я вижу в схеме стоит стандартный компонент LPM_SHIFTREG из графической библиотеки Altera Quartus II. Кто может мне сразу сказать какой сигнал имеет больший приоритет sclr или load? Что произойдет, если они оба стали активными? Может в регистр запишутся все нули, или произойдет загрузка новых данных в сдвиговый регистр? Вот я все время забываю. Смотрю на этот компонент в схеме и не могу вспомнить, что все это значит. Наверное у меня мало опыта работы со схемами..

С верилогом проще. Нет никакой иносказательности:

reg [7:0]serial_send_reg;
always @(posedge clk)
if (sclr)
serial_send_reg
else
if (load)
serial_send_reg
else
serial_send_reg

В описании на Verilog HDL приоритеты сигналов сразу видны по тексту.

В общем, по поводу визуального представления проекта у меня лично нет предпочтения для схем.

Портируемость и переносимость проектов.

Я думаю с этим все понятно. Если разработчик желает, чтобы его разработки могли использоваться еще где-то кроме как в его ПЛИС, то он должен использовать текстовые описания на Verilog / VHDL. Так получилось, что на сегодняшний день нет единого стандарта для файлов графического описания цифровых схем. Вот и получается, что у Альтеры свой формат графических файлов, а у Xilinx свой. А еще производители микросхем ASIC не примут графический дизайн, примут в работу только текст.

Надежность кода.

Vhdl или verilog что лучше. Смотреть фото Vhdl или verilog что лучше. Смотреть картинку Vhdl или verilog что лучше. Картинка про Vhdl или verilog что лучше. Фото Vhdl или verilog что лучше

Интересно, что производители многих микросхем предоставляют Verilog модели своих микросхем, чтобы облегчить разработчикам отладку проектов.

Есть много хороших примеров симуляции проектов на нашем сайте. Например, мы симулировали работу системы на кристалле Amber и запуск ОС Linux в системе. Это очень сложная симуляция, она включала в себя модель памяти SDRAM, саму систему на кристалле вместе с процессором, bootrom, последовательным портом, таймером, контроллером прерываний. Во время симуляции исследуемый процессор выполняет миллионы инструкций. Понятно, что такая длительная симуляция покрывает практически все возможные внутренние состояния системы. Можно надеяться, что проект правильно работает.

У нас на сайте даже когда-то был обзор симулятора из Quartus II v9. Давно это было. В более поздних версиях среды проектирования Altera исключила симулятор из состава пакета. Ну правда он был не очень удачный.

Не удобно, появляется дополнительный промежуточный этап конвертации. Если многократно исправлять схему и конвертировать ее для симуляции, тогда это вообще может стать мученьем.

Управляемость кода.

Часто бывает, что какая-то нужная функция когда-то работала, а потом вдруг перестала. Отчего? Почему? Кто и когда внес исправления в проект? Как отследить изменение проекта во времени?

При использовании текстовых файлов очень просто сравнивать разные версии одного и того же модуля. Можно просто консольной командой diff в ОС Linux. Или есть средства сравнения и слияния текстовых файлов типа Meld.

А вот скажите как сравнить две схемы: чуть более старую и чуть более новую? Мне это неизвестно. Из-за отсутствия средств сравнения графических схем использование систем контроля версий становится очень проблематичным и неудобным. Вот еще один и существенный довод против схем.

Вывод я могу сделать такой. Использование текстового ввода для описания аппаратных проектов во многих случаях предпочтительней. Средства графического ввода может быть когда-то и вернутся, но только, когда и если появятся стандарты для хранения схем и инструменты облегчающие их ввод, управление схемами и их сравнения.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *