Hello world для ПЛИС на языке Verilog

Наконец-то пришла макетная плата с ПЛИС. Вот ссылка  на нее на ebay. Называется она EP4CE6E22 FPGA Dev Board + USB Blaster Programmer.

Это мой первый опыт с ПЛИС`ами так, что взял по совету именно эту макетку.

Что здесь есть

  • программатор
  • плата
    • 8 светодиодов
    • 2 кнопки
    • питание от USB
    • выведенные все ноги
    • 3 регулятора напряжения
    • резонатор на 25 МГц
  • 2 USB кабеля

Ниже показана обратная сторона платы.

С чего начать

Если подключить плату к USB, то запустится стартовая прошивка. Вы увидите как 1 светящийся СД продвигается вправо. При нажатии на кнопки будет происходить смена направления движения.

И все же хотелось бы сделать что-то свое.

Hello world.

Анализ мной интернетов привел к выводам, что все придумывают слишком сложный стартовый пример.

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

Я все делал по инструкции в последней ссылке за исключением некоторых моментов:

  • Шаг 9. Код программы я адаптировал под свою плату. Хочу чтобы один СД светился, когда нажимаешь хотя бы одну кнопку из двух (ИЛИ), а второй когда обе нажаты (И).
module test_wires(
     input wire key1,
     input wire key2,
     output wire led1,
     output wire led2
     );
assign led1 = key1 & key2;
assign led2 = key1 | key2;

endmodule

На деле все получилось наоборот. Они светились по умолчанию и когда нажимаешь соответствующее комбо гасли.

  • Шаг 22 – 24. Вместо непонятной таблички использовал красивую картинку Assignment/Pin Planner (Ctrl+Shift+N)

С ней намного проще. Просто нажимаешь на вывод который хочешь использовать и  в окне (справа) указываешь провод или регистр который хочешь подцепить.

После этого в табличке снизу заполняется соответствующая строка. Все. Можно закрывать.

  • Шаг 26-28. Вообще странно. Как-то все по другому. + Драйвера пришлось искать непонятно где.

Открываем этот Programmer делаем поиск оборудования, все норм, а вот потом надо найти нашу плату. Это делается нажатием на кнопку Auto Detect.

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

Это не все. После этого появится какая-то строка в табличке а столбец – файл будет пуст. Надо его заполнить. Я делаю это так:

В папке с проектом есть папка output_files. Именно в ней лежит нужный файл.

Ну и все. После того как все графы заполнены ставим галку Programm/… Нажимаем Start. Все!

Про прошивку в ОЗУ и в EEPROM

http://we.easyelectronics.ru/plis/osvoenie-plis-s-ispolzovaniem-yazyka-verilog.html

Должно работать.

Дальше будем разбираться с работой регистров, тем как обрабатывать тактирование от резонатора, как сделать делитель частоты и как сделать ШИМ.

Генерируем изображение на телеке с помощью Arduino

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

http://www.instructables.com/id/TV-Out-with-Arduino/

и соответственно библиотеку которая там используется https://code.google.com/p/arduino-tvout/downloads/detail?name=TVout_R5.91.zip&can=2&q= .

Создатели библиотеки хорошо постарались над ее созданием и написали довольно таки подробный вики: https://code.google.com/p/arduino-tvout/wiki/Useage .

Предлагаю рассмотреть сначала функции библиотеки, а затем саму начинку библиотеки.

Библиоткеа

Рассмотрим работу библиотеки сразу на простом примере:

#include <TVout.h>
#include <fontALL.h>
TVout TV;
 
void setup ( )
{
  TV.begin(NTSC,120,96);
  TV.select_font(font6x8);
  TV.println("Sainquake");
  TV.delay ( 1000 );
}
int i=0;
void loop ( )
{
  TV.clear_screen ( );
  //TV.println("Sainquake");
  TV.draw_rect(0,0,119,95,WHITE);
  TV.print(10,40,"Happy new Year!!!");
  TV.draw_line(10,50,110,50,WHITE);
  TV.print(80,1,i);
  TV.delay ( 10 );
  i++;
}

 

В проекте подключены 2 библиотеки которые скачиваются по ссылке выше. Соответственно содержимое архива надо положить в папку Arduino/libraries/

Итак. В setup у нас стандартная конструкция инициализации: begin. В ней мы указываем стандарт телевидения NTSC или PAL. PAL вам нужен будет только, если вы захотите подключиться к старому ламповому телевизору. Далее задается количество строк и столбцов в будущем изображении. Может быть я что-то каряво сделал, но изменение этих параметров не дало никаких результатов. К сожалению разрешение изображение ограничивается тактовой частотой самой Arduino.

Ну и собственно сразу после инициализации мы можем подключить шрифт и писать текст на экране.

Далее в loop у меня есть несколько функций которые скорее всего понадобятся.

TV.clear_screen ( );

Очистка экрана.

TV.draw_rect(0,0,119,95,WHITE);

Рисуем квадрат. Соответственно аргументы: x0, y0, width, height, color (WHITE || BLACK || INVERT)

TV.draw_line(10,50,110,50,WHITE);

Рисуем линию. Аргументы такие же, только не ширина и высота, а координаты конечной точки.

По большому счету больше функций то и не понадобится.

Теперь о HW части.

По сути это все что вам нужно.

У контроллера выделяетя 2 вывода которые соединяются в один через резисторы. На схеме так же показаны диоды для защиты от обратного тока, но и без них работает.

Эти 2 вывода по распиновке Arduino UNO будут 7 – Video и 9 – Sync.

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

О том как работает библиотека

При инициализации работы (begin) в памяти занимается место под буфер экрана.

А дальше идет только работа с таймером. В функции render_setup запускается таймер1.

Во момент прерывания от переполнения таймера вызывается функция по ссылке line_handler();. В свою очередь эта ссылка меняется на разные функции. Вот тут то и начинается магия.

Далее последовательно по таймеру выполняются несколько функций:

  • vsync_line() – генерирует синхроимпульс
  • blank_line() – вызывает либо синхронизацию либо прорисовку строки.
  • active_line() – прорисовывает строку вызывая функцию render_line();

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

 Бонус

Сделал на основе этой библиотеки следующий проект. По сути создание 3D кубика взято из примера к той же библиотеке.

Описание: Ардуинка считывает с АЦП напряжение на потенциометре и вращает кубик со скоростью пропорционально считанному значению. + идет счет времени (левый верхний угол) + выводится откалиброванное считанное значение с АЦП (Правый верхний угол).

Ставим софт под Altera Cyclone 4

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

1.Качаем Web Edition отсюда http://dl.altera.com/14.0/?edition=web

В какой то момент будет такое окно:

Нужно убедиться, что в Devices стоят галки напротив Cyclone в моем случае. Скачиваем файлы.

ОК.

Запускаем Quartus II открываем закладку tools->Install Devices…

Открывается диалоговое окно, где выбираем место куда вы загружали все. (В частности файлы с расширением .qdz ).

Next – Next – Next… Устанавливается вся эта хрень.

И вуаля. Создаем новый прожект:

Теперь можно выбрать необходимый девайс.

На этом все.

 

Следовал этой статье: http://we.easyelectronics.ru/plis/quartus-ii-nachalo-znakomstva.html

 

Еще полезная ссылка “Hello world”: http://we.easyelectronics.ru/plis/chto-takoe-vhdl-prosteyshiy-primer-sozdaniya-logicheskogo-elementa-v-plis.html

Bluetooth выключатель света

Подключение Bluetooth к Arduino UNO

По сути все это было описано уже много раз например:

Рассмотрим только код:

/*
 The circuit: 
 * RX is digital pin 10 (connect to TX of other device)
 * TX is digital pin 11 (connect to RX of other device)
 */
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
void setup()  
{
 mySerial.begin(9600);
 mySerial.println("Hello, world?");
}
char incomingByte;
void loop()
{
  if (mySerial.available()){
    incomingByte = mySerial.read();
    if(incomingByte == '0') {
       pinMode(13, INPUT); 
       mySerial.println("LED OFF. Press 1 to LED ON!");
    }
    if(incomingByte == '1') {
       pinMode(13, OUTPUT);
       mySerial.println("LED ON. Press 0 to LED OFF!");
    }
  }
}

Чтобы не было проблем подключаем Bluetooth через софтварный UART на других ногах.

Подключение реле

Чтобы не мучатся с разводкой купил следующие готовые платки http://ru.aliexpress.com/item/5V-One-1-Channel-Relay-Module. Там 3 вывода. Земля, питание и дата. На выходе общая точка и 2 вывода. И вот здесь самый главный нюанс – принцип работы ключа.

При подключении ее к любой ноге контроллера замыкание реле происходит при установке ее как вывод. Ввод – реле разомкнуто.

pinMode(13, INPUT);

Как видно на рисунке реле держит до 10А, то есть через него можно подключать электрочайник или пылесос. В моем случае лампочку.

Тест

Скачал https://play.google.com/store/apps/details?id=Qwerty.BluetoothTerminal. Особых проблем нет, только при поиске не определяются имена устройств, так что пришлось перебирать.

Вот собственно как это работает.

Документация на HC-XX: http://www.exp-tech.de/service/datasheet/HC-Serial-Bluetooth-Products.pdf

Запускаем Cubieboard2 UART

Для работы с UART на Cubieboard2 под Android необходимо:

  1. Поставить Android Terminal Emulator
  2. Поставить например Serial Port API Sample или любую другую программу для работы с UART
  3. Иметь на компе любой терминал. Я использую такой терминал

Теперь собственно мы готовы к работе.

Запускаем Терминал эмулятор

Пишем в нем:

$ su
# ls -l /dev/ttyS*

Получаем список UART портов. У меня ttyS0, ttyS2. У них нет прав на запись и чтение, даем их им (по этому поводу моно почитать здесь):

# chmod 666 /dev/ttyS*

ОК. Идем дальше. Запускаем Serial Port:

Setup -> Device -> /dev/ttyS0
Setup -> Baud rate -> 115200

Нажимем Loopback.

Соединяемся

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

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

На Cubie и на DVK521 соединить UART.

Переходим к компу

К USB порту на расширительной плате подключаем комп. Драйверы для платы PL2303 можно установить здесь.

Запускаем Terminal на компутере. Выбираем соответствующий COM порт и скорость 115200, соединяемся. Если на Cubie запустить Loopback то в Терминале сразу польется поток хрени. Это значит что все работает.

Более вразумительной проверкой работоспособности можно в Console

Первый запуск DVK521 Cubieboard

Напишу пока не забыл.
Купил такую штуку

Для Cubieboard
Вот есть видео как ее установить

Там в видео одна проблема, провод для Тач Скрина (маленький) надо вставлять синей стороной вверх с обоих концов.

И лучше сразу выдернуть Джампер BUZ_JMP. С ним при старте платы идет долгий писк.

Запуск на андройде

Запуск на Android требует дополнительных усилий. А именно обновление прошивки. На этой страничке есть образ (img) для платы с Android 4.2 адаптированный под плату. Чтобы его установить без лишних плясок с бубном вам понадобится PhoenixSuit. В папке с ним есть установщик драйверов, его необходимо запустить. После запускаем саму программу. Следуя инструкции отсюда нам надо:

  1. Запустить Suit
  2. Открыть закладку Firmware
  3. Выбрать необходимый образ
  4. Подключить кабель miniUSB к порту USB OTG на Cubieboard
  5. Нажать на Cubieboard на кнопку FEL расположенную на торце платы, возле разъема USB OTG
  6. Не отпуская кнопку подключить кабель USB к ПК
  7. После подключения к ПК, зажатую кнопку FEL отпустить (Отпустить только после запуска установки на компе)

Он ставится где-то минуты 2 и все ОК.

Dota 2 Quiz

Играйте и развивайтесь!
Это игра, где нужно угадывать названия Героев из игры Dota по их изображениям. Если Вы любите игру Dota то проверьте себя и узнайте как хорошо вы их знаете. На протяжении всей игры вам будет представлено множество различных уровней, каждый из которых содержит героев из игры.

В игре 107 героев которые Вам предстоит отгадать!
Для каждого героя Вы можете использовать подсказку.

ОСОБЕННОСТИ
- 7 уровней!
- более чем ~ 100 героев
- для каждого героя в викторине, есть подсказки, которые помогут вам помочь
- если не знаете что это за герой, спросите у своих друзей!

Hello world для Cubieboard2

Download a Free Game!

2014-04-01 15.46.26

Рассмотрим как быстро и просто задействовать GPIO на Cubie. Рассмотрим для начала ручное мигание светодиодиком, а потом уже и собственно напишем программу.
И так.
Хочу заметить, что мы так и остаемся на прошитом Android.

Описывать как подключить к монитору и воткнуть в USB мышку я рассказывать не буду.
Первым делом Вам надо будет скачать из Google Play или с любого другого ресурса Terminal Emulator
Для этой программы, есть Wiki, на случай вопросов. Вообще команды в андройде как и в линуксе. Так что знакомым будет просто. А для таких же как и я буду все рассматривать подробно.
Запускаем эту программу и пишем в ней первым делом

su

Это необходимо для переключения пользователя SwitchUser. После этого у вас место знака $ появится # перед курсором. Это значит что вы имеете права root пользователя.

По умолчанию прошивка собрана с этими правами, так что должно все работать, но если у вас нет root прав, то придется менять прошивку.

Далее пишем

# echo 214 > /sys/class/gpio/export
# ls /sys/class/gpio/
export 
gpio214
...
unexport

Первая команда задействует порт под номером 214, это порт PI13 находится он в левом верхнем углу (самый крайний порт). Следующей командой мы проверяем его наличие.

Названия портов Cubieboard2

Через 2 порта вниз GND. Собственно эти 2 порта нам и понадобятся сейчас.

Ваша задача подключить длинную ножку светодиода к порту PI13, а короткую через резистор номиналом около 330 Ом к порту GND.

Теперь рассмотрим саму суть этого и любого другого порта. Каждый порт может быть настроен как вход или как выход. По умолчанию все порты являются входами (такая настройка предотвращает случайное сжигание порта). Чтобы изменить направление порта на выход нужно написать команду

# echo out > /sys/class/gpio/gpio214/direction

соответственно, чтобы сделать порт входом надо заменить OUT на IN. Далее мы можем узнать состояние порта

# cat /sys/class/gpio/gpio214/value 
0

и изменить состояние порта

# echo 1 > /sys/class/gpio/gpio214/value 
1

Теперь записывая в порт 0 или 1 вы можете переключать светодиод подключенный на этот порт. При value == 0 через светодиод не течет ток, а при value == 1 через светодиод течет ток. Этот ток пропорционален  сопротивлению стоящему последовательно со светодиодом. Так что будьте внимательны! Если поставить слишком маленькое сопротивление, то можно сжечь порт, а если слишком большое то светодиоду может не хватить для эмиссии.

Далее некоторые полезные ссылки

Cubian wiki GPIO-Introduction Оригинал на английском.

habrahabr.ru Общая информация о плате

habrahabr.ru Сервер на такой плате

we.easyelectronics.ru еще один обзор с подключением через putty

likeaferrari.wordpress.com похожая статья на английском

How to access GPIO pins on a Cubieboard 2 инструкция от разработчиков платы

Space Surfers [RU]

icon

 

Описание

ПРОЛЕТИ так долго, как только сможешь!
УВОРАЧИВАЙСЯ от астероидов, космического мусора и космических станций!
ВЫПОЛНЯЙ квесты каждый день и получай монетки!
ПОКУПАЙ улучшения и новые корабли!

Помоги Починить спутники и выполняй задания.
★ Летай по безграничному космосу на различных кораблях
★ Красочная графика!
★ Полеты в подпространстве!
★ Мощный бластер, работает на энергии варпа!
★ Набор кораблей с индивидальными характеристиками!
★ Управление кораблем с помощью жестов!
★ Бросай вызов своим друзьям и помогай им!

Универсальное приложение, схожее с Subway Surfers , Temple Run .

Links

 Direct Download

Android app on Google Play gamedev

http://vk.com/space.surfers

https://www.facebook.com/groups/space.surfers/

http://devgamm.com/moscow2014/games/