МАРСОХОД

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 управляет светодиодами на ленте.
Описание этого маленького отдельного проекта читайте далее.

Цифровой КИХ фильтр на Verilog для цветомузыки

color leds

В предыдущей статье я писал об изготовлении самодельного микрофонного шилда к плате Марсоход3bis.
Для чего мне понадобилась такая плата? Мне захотелось сделать "новогодний проект" - "Цветомузыка". Я хочу сделать автономное устройство, которое будет слушать микрофоном окружающий звук, оцифровывать его с помощью АЦП в ПЛИС платы MAX10, далее фильтровать на низкие, средние и высокие частоты и светить соответственно тремя цветами: красным, зеленым и синим в такт музыки.

Конечно, я понимаю, что оцифровывать звук таким маленьким электретным микрофоном типа CZN-15E - это не очень здоровое занятие.. но хотелось получить именно автономное устройство, которое бы не зависило от проигрывателя, компьютера или еще чего..

Пожалуй самый сложный вопрос в этом проекте будет цифровой фильтр. Далее я расскажу, как собираюсь делать фильтр в FPGA MAX10 платы Марсоход3bis.

Изготовление микрофонного усилителя для платы Марсоход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..


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


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