Начало работы с HDL из обычного программирования - PullRequest
2 голосов
/ 26 ноября 2009

Я всегда хотел создать свой собственный микропроцессор. Я прочитал Как я могу создать свой собственный микроконтроллер? .

Я несколько раз пытался изучить Verilog и VHDL. Но за свою жизнь я просто не могу разобраться в языковых стилях. Я пришел из C / C ++ / C # фона и немного (с успехом) увлекся функциональным программированием на Ruby.

Может ли кто-нибудь предложить книгу или онлайн-ресурс для обучения языку HDL с нуля (чтобы я мог отучиться от своего процедурного мышления)

Кроме того, мне трудно понять, как именно симулировать программу HDL. Нет ничего похожего на печать или аппаратные средства, так что как лучше тестировать программы без ПЛИС (хотя я собираюсь заказать один из них когда-нибудь!). Как именно работает симуляция?

По сути, мне просто нужен кто-то, кто поможет мне разобраться с HDL и их симуляцией.

Ответы [ 6 ]

3 голосов
/ 26 ноября 2009

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

Так что в HDL первое, что вам нужно учитывать, это то, что все назначения выполняются одновременно. Единственное место, где происходят вещи в «нормальном» смысле (одно утверждение следует за другим, как в обычном языке программирования), находится внутри блока процесса (в VHDL или всегда в Verilog). Но затем вы должны понимать, что все блоки процесса (или всегда блоки в Verilog) также выполняются одновременно.

ЛПВП просто пытаются смоделировать параллелизм оборудования.

Что касается книг, которые пытаются преподавать HDL разработчикам программного обеспечения ... Я не думаю, что они есть. Большинство из них нацелены на инженеров аппаратного обеспечения.

Вы упомянули, что занимались программированием на Ruby. Если вы хотите поиграть с HDL, написанным на Ruby, вы можете попробовать RHDL: http://rhdl.rubyforge.org/ Основные концепции HDL есть, и они очень похожи на VHDL, но это Ruby, так что вы можете немного поэкспериментировать с внутренностями , Вы можете написать модели, а затем моделировать их. Вот несколько примеров.

2 голосов
/ 01 декабря 2009

Отладка выполняется с помощью симулятора и его средства просмотра формы волны - вы можете наблюдать за тем, что все ваши внутренние устройства делают со временем. Кроме того, с помощью Modelsim вы также можете создавать программные точки останова внутри процессов.

Вы можете распечатать вещи с помощью VHDL, используя оператор «report», но вы должны выполнить форматирование совсем не SW:

report "The value is not " & integer'image(some_integer_variable);

Для упрощения печати используйте текстовый пакет .

Еще один совет - во многих кодах есть use ieee.std_logic_arith.all;. Эта библиотека нестандартная (несмотря на прозвище IEEE), вместо нее используйте ieee.numeric_std.all.

Начните с простого - создайте счетчик, который увеличивается на единицу каждый раз, когда тикают часы (используйте идиому if rising_edge(clk) then). Когда счетчик достигает определенного значения, переключите сигнал.

Создайте тестовый стенд для имитации, что в основном означает просто сделать так, чтобы сигнал clk стал «0», «1», «0», «1».

Простой способ понять это:

process:
begin
    clk <= '0';
    wait for 5 ns;
    clk <= '1'; 
    wait for 5 ns;
end process;

Запустите сим, посмотрите, как поднимется ваш счетчик, и включите сигнал переключения. Если вы сделаете свой счетчик достаточно большим, вы сможете создать FPGA и наблюдать за включением и выключением светодиодов, подключив этот сигнал переключения к выводу светодиодов.

Это эквивалент FPGA для "Hello World"!

0 голосов
/ 26 августа 2015

Если вы сильны в программировании на C, вы можете легко выучить любой другой язык программирования. Языки описания оборудования не сильно отличаются. Но вы должны знать основы часто используемых аппаратных компонентов. Например, конструкция полного сумматора очень проста, если вы знаете, каковы входы и выходы полного сумматора. Также вы должны знать связь между входами и выходами. pdf может быть полезным для новичка.

0 голосов
/ 27 декабря 2014

Иногда нужно напечатать имя экземпляра. Это полезно, если в проекте используется много экземпляров одного и того же компонента: "... В VERILOG это просто (% m в функции системы отображения), но в VHDL требуется немного больше написания кода. $ display ("имя экземпляра базы данных% m в% d", $ time); Пример того, как напечатать имя экземпляра в systemc, также доступен на этом сайте.

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

Сначала должна быть вызвана первая текстовая библиотека ввода-вывода и объявлена ​​строковая переменная. Пожалуйста, обратитесь к примеру печати, чтобы увидеть детали.

Далее вам нужно выбрать один из двух вариантов: один из них: имя экземпляра только в строке отладки, а другой параметр дает больше информации, например, имена записей и архитектуры ... " http://bknpk.ddns.net/my_web/MiscellaneousHW/vhdl_path_name_print.html

0 голосов
/ 07 декабря 2014

Мой ответ может быть на несколько лет позже, но это для будущих зрителей, у которых может быть такой же запрос.

Я также пришел из C ++ / C # фона. Мой ответ касается только Verilog HDL, но не VHDL. В настоящее время я изучаю этот термин, и вот книги, которые помогли мне лучше понять Verilog:

Вы можете найти много книг здесь , перечисленных на сайте asic-world .

Как ответил Скоргон, вы можете использовать Xilinx ISE для симуляции. Это ближе всего к Visual Studio с C ++ / C #, чем к Verilog. Но для примитивного ощущения (без IDE) вы можете попробовать iVerilog или Icarus Verilog . Это тот, который используется в нашем курсе. Вот как выполнить файлы Verilog с помощью iVerilog:

Введите свой код в текстовом редакторе, сохраните как .vl внутри папки bin iVerilog. В командной строке перейдите в папку bin. Затем введите следующее:

iverilog -o <name of exe file you want for your .vl file> <your .vl file>
vvp <name of exe file>
* 1 028 * Пример:
iverilog -o samp sample.vl
vvp samp

Надеюсь, это поможет!

0 голосов
/ 27 ноября 2009

Для отладки Verilog предлагает printf-подобные системные задачи, такие как $ display или $ monitor. Это, конечно, не синтезируемые, но каждый симулятор должен понимать их. Отладка затем выполняется с одной стороны, точно так же, как отладка SW, путем распечатки значений сигналов и всего остального на консоль с использованием уже упомянутого $ diplay и прочего. И с другой стороны, глядя на формы волны сигнала, пока вы не найдете больное место. Для этих вещей вам даже не нужна FPGA, хороший симулятор - это все, что вам нужно. Но наличие ПЛИС, позволяющей мигать некоторым светодиодам, всегда приятно:)

Для моделирования вы должны взглянуть на Modelsim. Если вы работаете в Windows, вы можете получить бесплатную версию для студентов.
http://www.model.com/content/modelsim-pe-student-edition-hdl-simulation

Другим вариантом является веб-пакет ISE Xilinx. Это даже работает на Linux и включает в себя полный поток FPGA. http://www.xilinx.com/tools/webpack.htm
Но я рекомендую Modelsim для симуляции.

Некоторые исходные точки, которые у меня под рукой:
http://www.asic -world.com /
http://www.doulos.com/knowhow/verilog_designers_guide/

...