Начало работы с HDLS из обычного программирования

StackOverflow https://stackoverflow.com/questions/1800994

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

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

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

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

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

Другие советы

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

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

report " значение не " & Амп; integer'image (some_integer_variable);

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

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

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

Создайте тестовую среду, чтобы имитировать ее, что в основном означает, что сигнал 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"!

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

Для симуляции вы должны взглянуть на Modelsim. Если вы находитесь на Windows, есть бесплатная версия для студентов.
http://www.model.com/content/modelsim- ре-студент-издание ЛВП-моделирование

Другой вариант - веб-пакет 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/

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

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

Вы можете найти много книг здесь как указано в asic-мир Сайт.

Как ответил скоргон, вы можете использовать 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>

Пример:

iverilog -o samp sample.vl
vvp samp

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top