МАРСОХОД

Open Source Hardware Project

FPGA & Verilog БлогFPGA chips

САПР Altera Quartus II / Intel Quartus Prime, язык Verilog HDL и кое-что про VHDL, FPGA Cyclone III, Cyclone IV, MAX II, MAX10. Платы разработчика серии Марсоход, Марсоход2, Марсоход3.


Изготовление микрофонного усилителя для платы Марсоход3bis методом ЛУТ

microphone czn-15e

Задумал я подключить микрофон к плате Марсоход3bis. Микрофон электретный CZN-15E. Первая мысль была очень простая: нужно приобрести микрофонный модуль для Ардуино и использовать его. Я нашел и купил вот такой модуль:

microphone module arduino

Казалось, что осталось только подсоединить этот "усилитель" и дальше заниматься программированием, но не тут-то было. Этот микрофонный модуль, как оказалось, был абсолютно не предназначен для усиления аудио сигнала. По сути дела это просто пороговый детектор, который выдает импульс по хлопку или громкому звуку. Я же собирался усиленный сигнал подавать на АЦП моей платы, на FPGA MAX10, и оцифровывать этот аудио сигнал и обрабатывать его цифровыми методами, цифровыми фильтрами там и все такое. Теперь стало понятно, что все придется делать самому. Возможно придется паять какую-то платку расширения для платы Маросход3bis..

Ну раз такое дело и нужно делать свою плату - значит буду делать плату. Здесь я решил применить широко известную всем Лазерно-Утюжную Технологию. Далее расскажу, что у меня получилось.

Yosys Open SYnthesis Suite

yosys

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

Делается так:
1) Меню Processing => Start => Start Analysis & Synthesis
2) Меню Tools => Netlist Viewers => RTL Viewers

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


module cnt(
  input wire clk,
  input wire rst,
  input wire ena,
  output reg [3:0]q
);

always @(posedge clk)
  if(rst)
    q <= 0;
  else
    if( ena )
  begin
    if( q==9 )
      q <= 0;
    else
      q <= q+1;
  end

endmodule


 

Квартус после синтеза покажет его в RTL Viewer вот так:

quartus rtl viewer


Все это очень хорошо, но мне хотелось найти средство попроще, желательно opensource и чтобы можно было бы запускать из скрипта. Самый подходящий вариант, который я нашел - это Yosis - Yosys Open SYnthesis Suite. Далее расскажу, что я знаю про него.

Разворот бит в шине на Verilog

Казалось бы простая задача: как развернуть биты в шине так, чтоб младший бит стал старшим, а старший самым младшим? Первое, что приходит на ум: написать вот так:


reg [7:0]src;
//reverse?
wire [0:7]re1; assign re1 = src; //does not work..


Но это так не работает!
Какие есть работающие варианты?

Modelsim под Windows и Verilog VPI

Когда-то давно я написал статью "Интерфейс Verilog VPI".
В ней рассказывалось, как во время симуляции проекта Verilog вызывать функции пользовательской библиотеки, написанной на языке C. В статье использовался симулятор Icarus Verilog под Ubuntu Linux.

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

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

В этой статье я покажу:

  • как скомпилировать библиотеку C/С++ с использованием Verilog Procedural Interface (VPI) под Windows;
  • как использовать библиотеку с Icarus Verilog под Windows;
  • как использовать библиотеку с ModelSim под Windows.

Как вернуть скрипту результат симуляции Verilog?

result

Появилась простая задача - нужно из скрипта (batch/Windows или bash/Linux) проанализировать результат симуляции Verilog. Причем желательно, чтобы решение работало с разными симуляторами: icarus и modelsim (или другими). Как это сделать?


ВКонтакте  facebook  GitHub  YouTube  Twitter
Вы здесь: Начало