vak: (Default)
Omega2+ это относительно новая плата для IoT с интерфейсом Wi-Fi по цене $13. На плате установлен Линукс OpenWRT. В качестве языков програмирования рекомендуются Python и Javascript. Честно говоря, мне все эти скриптовые языки кажутся несерьёзным баловством. Но имея карточку microSD, можно запустить полноценный Debian Linux, а под ним нормальные компиляторы Си, Go и прочие.



Шаг 1: готовим microSD-карточку. Тут понадобится линуксный компьютер. Скачиваем файл debian-stretch-mini.tgz - минимальный вариант корневой файловой системы для Debian 9 (Stretch). Вставляем карточку microSD в компьютер, непосредственно (есть есть слот SD) или через USB-адаптер. Карточка будет видна в системе как /dev/mmcblk0 или как /dev/sdc (или sdb или с другой буквой - проверьте). Нужно карточку отмонтировать, переделать таблицу разделов, создать новую файловую систему, заново смонтировать и распаковать туда файлы. Выглядит это примерно так:

sudo umount /dev/mmcblk0p1
sudo sfdisk /dev/mmcblk0 << EOF
/dev/mmcblk0p2 : size=512M, type=82
/dev/mmcblk0p1 : type=83, bootable
EOF
sudo mke2fs /dev/mmcblk0p1
sudo mkswap /dev/mmcblk0p2
sudo mount /dev/mmcblk0p1 /mnt
sudo tar xzf debian-stretch-mini.tgz -C /mnt
sudo umount /mnt


Шаг 2: подсоединяем консольный порт. Используем штатный Expansion Dock или любой адаптер USB-to-serial, например FT232, CP2102 или CH340. Сигнал GND адаптера соединяем с ножкой GND платы, сигнал TXD - с ножкой P9, RXD - P8. Включаем USB-адаптер в компьютер и подключаемся к консольному порту на скорости 115200. Нажимаем кнопку "Reset" - видим протокол загрузки типа этого.

Шаг 3: настраиваем подключение Wi-Fi, как описано на официальном сайте. Устанавливаем нужные пакеты, подключаем раздел swap. Заметьте: мы никоим образом не портим исходную предустановленную систему OpenWRT. Все имеющиеся функции и методы разработки, описанные в руководстве для платы Omega2+, продолжают работать.

wifisetup
[...]
opkg update
opkg install swap-utils block-mount e2fsprogs


Шаг 4: стартуем среду Debian. Для этого мы используем утилиту chroot. Корневая файловая система Debian находится на карточке microSD. Ее всегда можно вынуть и переставить в другой компьютер: переписать нужные файлы, сдублировать, забэкапить и т.п. В принципе, когда заработал Wi-Fi, консольный порт больше не нужен - можно подключаться через ssh (предварительно установив пароль на root).

swapon /dev/mmcblk0p2
mount --bind /dev /tmp/run/mountd/mmcblk0p1/dev
mount --bind /proc /tmp/run/mountd/mmcblk0p1/proc
mount --bind /sys /tmp/run/mountd/mmcblk0p1/sys
chroot /tmp/run/mountd/mmcblk0p1 /bin/bash


Вы оказываетесь в оболочке bash из окружения Debian. Здесь при первом запуске имеет смысл установить полезные пакеты:

apt-get update
apt-get install locales bison byacc flex libelf-dev libfuse-dev \
build-essential make autoconf automake libtool gdb fuse man-db \
groff less ed bmake git byacc flex exuberant-ctags libfuse-dev \
bmake git byacc flex exuberant-ctags libfuse-dev dialog \
openssh-client subversion le vim gettext iputils-ping locate procps


Теперь у вас имеется полноценный Debian Linux, со всеми наворотами и Wi-Fi подключением к интернету. Можно скачивать, компилировать и запускать любой софт. И все это на платке размером 2x4 сантиметра.

Чтобы освободить карточку перед тем как вынуть, надо будет выполнить:

umount /tmp/run/mountd/mmcblk0p1/dev
umount /tmp/run/mountd/mmcblk0p1/proc
umount /tmp/run/mountd/mmcblk0p1/sys
umount /tmp/run/mountd/mmcblk0p1
swapoff /dev/mmcblk0p2
vak: (Default)
Протокол загрузки платы Omega2+. На пладе установлен процессор MIPS с частотой 580 МГц и 128 мегабайт памяти, а также порт Wi-Fi и SD флэш карточка.

Протокол загрузки )
vak: (Default)
Два года назад Би-Би-Си объявила амбициозный проект: одноплатный компьютер для обучения младших школьников программированию и электронике. Конечно, я тут же подписался на новинку. Три дня назад я наконец получил долгожданную платку.



На видео есть неплохой подробный обзор для начинающих:



Все эти навороты с Джаваскриптом, Питоном и Blocks забавные, конечно, но для для старпёров типа меня есть традиционный способ программировать на классическом C++, под обычным Линуксом. Установка на Ubuntu делается следующим образом.
$ sudo apt-get install python-setuptools cmake build-essential ninja-build python-dev libffi-dev libssl-dev srecord
$ sudo easy_install pip
$ pip install yotta
$ sudo apt-get remove binutils-arm-none-eabi gcc-arm-none-eabi
$ sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa
$ sudo apt-get update
$ sudo apt-get install gcc-arm-embedded
Скачиваем с Гитхаба примеры:
$ git clone https://github.com/lancaster-university/microbit-samples
$ cd microbit-samples
$ yt target bbc-microbit-classic-gcc
Компилируем пример "Hello world":
$ yt build
Загружаем прошивку в плату, подключенную через USB:
$ cp ./build/bbc-microbit-classic-gcc/source/microbit-samples-combined.hex /media/$USER/MICROBIT/
Исходный код примера "Hello world" выглядит так:
#include "MicroBit.h"

MicroBit uBit;

int main()
{
    // Initialise the micro:bit runtime.
    uBit.init();

    // Insert your code here!
    uBit.display.scroll("HELLO WORLD! :)");

    // If main exits, there may still be other fibers running or registered event handlers etc.
    // Simply release this fiber, which will mean we enter the scheduler. Worse case, we then
    // sit in the idle task forever, in a power efficient sleep.
    release_fiber();
}
vak: (Default)
Приехал ко мне OpenScope MZ, простой универсальный осциллограф-генератор-логический анализатор с открытым софтом. Изначально это был проект на Кикстартере, а теперь продукт компании Digilent.



Скачиваем и устанавливаем так называемый агент (для Windows, Mac или Ubuntu), запускаем его (digilent-agent), после чего заходим на сайт http://waveformslive.com/. Подключаем девайс через USB к компьютеру, настраиваем подключение и получаем осциллограф:



Протокол OpenScope открытый, схему и все исходники можно найти на Гитхабе. В качестве процессора используется MIPS (Microchip pic32mz2048ef 200 МГц). Имеются следующие возможности:
  • Два входа АЦП 12 разрядов с полосой 2 МГц, скорость оцифровки 6.25 мегасэпмлов/сек
  • Один выход ЦАП с полосой 1 МГц и скоростью 10 мегасэпмлов/сек
  • Десять цифровых сигналов входа/выхода GPIO со скоростью обновления 25 МГц
  • Порт USB
  • Беспроводной интерфейс Wi-Fi
  • Карточка micro-SD
В принципе, на эту плату можно установить LiteBSD, но как-то не видно большого смысла.
vak: (Default)
Пять лет назад я начал проталкивать через начальство мысль о необходимости поддержки недорогих отладочных средств для процессоров MIPS. Наконец мои усилия увенчались успехом.

"Imagination Technologies announces availability of a powerful development environment for its MIPS M-class and I-class CPU IP cores that includes a state-of-the-art Graphical User Interface (GUI) and an Eclipse Integrated Development Environment (IDE) together with the low cost Bus Blaster JTAG probes – all at an unprecedented price point for professional grade tools."

Bus Blaster это адаптер, чере который можно подключиться к процессору MIPS через порт USB. Его можно приобрести за $44 (плюс доставка). Годится, к примеру, для большинства маршрутизаторов и точек доступа Wi-Fi. Обычно они сделаны на MIPS и имеют порт отладки EJTAG (2x7 пинов).



С бас бластером также отлично работают бесплатные opensource утилиты ejtagproxy и pic32prog.
vak: (Default)
В продолжение темы 1, 2: слушайте радиопередачу про предстоящий на следующей неделе в Киеве семинар по микроэлектронике для школьников.

Аудиофайл (на украинском языке): https://hromadskeradio.org/sites/default/files/media/zvuk/hr_hh_2017-04-22_hutka.mp3

Частичная расшифровка: "Українські школярі вчитимуться проектувати мікросхеми, які застосовують Аpple та Tesla"
vak: (Default)
В конце апреля в Киеве пройдёт экспериментальный семинар для старших и младших школьников по обучению современной цифровой электронике. Программа семинара и форма для регистрации доступны на сайте: http://electronics-ukraine.com/


vak: (Default)
Приехала ко мне вот такая штуковина:



Это Arduino-совместимая плата, построенная на микроконтроллере FE310 фирмы SiFive. Процессор имеет открытую архитектуру RISC-V. Фактически это первая реализация RISC-V в кремнии, доступная широкой публике. Плату можно заказать за $59 на сайте CrowdSupply.

Скачиваем и устанавливаем среду разработки:
git clone --recursive https://github.com/sifive/freedom-e-sdk.git
cd freedom-e-sdk
make tools
Компилируем и загружаем в плату тест Dhrystone:
make software PROGRAM=dhrystone BOARD=freedom-e300-hifive1
make upload PROGRAM=dhrystone BOARD=freedom-e300-hifive1
Подключаемся к консоли платы и жмём кнопку Reset:
core freq at 279979622 Hz
циферки )
Dhrystones per Second: 775193.8


Progam has exited with code:0x00000000
Видим, что процессор работает на частоте 280 МГц. Измеренную производительность надо поделить на 1757 (скорость VAX), чтобы получить величину DMIPS = 775193.8 / 1757 = 441.2. Для сравнения: микроконтроллер ATmega2560 16MHz даёт 7.23 DMIPS, процессор STM32F103 72MHz - 48.8 DMIPS, PIC32MX 80MHz - 92 DMIPS.

Для оценки эффективности архитектуры процессора имеет смысл поделить производительность на частоту процессора. Получим характеристику DMIPS на MHz. Результат такой:
Processor    Architecture    DMIPS/MHz
-----------------------------------------
ATmega2560 AVR 0.45
STM32F103 ARM 0.68 PIC32MX MIPS 1.15
FE310 RISC-V 1.57
vak: (Default)
Устали от всех этих современных SDRAM и Flash? За $40 вы можете приобрести набор для самостоятельной сборки платы Arduino с 32 битами настоящей ферритовой памяти! :)



Вся теория и схемотехника подробно описана в файле: http://jussikilpelainen.kapsi.fi/wordpress/wp-content/uploads/2016/04/coremem-complete.pdf
vak: (Default)
Все слышали про курский вокзал FPGA, но мало кто видел. :)
Внутреннее устройство самого хитрого элемента FPGA, а именно четёрехвходовой логической таблицы LUT4, можно увидеть на рисунке из патента US6667635:

Patent US6667635

Шестнадцать элементов RB 301-316 с левой стороны это биты сдвигового регистра, задаваемые при конфигурации микросхемы FPGA. Дальше ряд вентилей 311-326 попарно выбирает значения, в зависимости от входа IN1. Полученные 8 бит поступают на вход следующего ряда вентилей 331-338. Из них выбираются 4 бита в зависимости от входа IN2. Вентили 351-354 превращают их в два бита под управлением входа IN3. В конце концов вентили 361 и 362 выдают результат.
vak: (Улыбка)
Советские микросхемы по большей части были совсем не советские, а копии импортных. Это позволяло не заниматься конструкторскими разработками и исследованиями, а просто переписывать номенклатуру из западных справочников. Документацией опять же не надо заморачиваться. Я пытался выяснить, кто задал такую моду в советской промышленности. Известно, что Сталин одно время приказывал Туполеву не городить отсебятину, а тупо повторять американский В-29 под именем ТУ-4. Но традиция гораздо более давняя, восходит еще к Николаю I и первой железной дороге (Царскосельской). За несколько лет до этого Черепановы уже построили в России первую железную дорогу (в Нижнем Тагиле), но царь приказал делать как в Европе. С тех пор так и живём.

1804BA1 Am2905
1804BA2 Am2908
1804BA3 Am2916
1804BA4 Am29853
1804BC1 Am2901
1804BC2 Am2903
1804BH1 Am2914
1804BM1 Am29116
1804BP1 Am2902
1804BP2 Am2904
1804BP3 Am2913
1804BT1 Am2964
1804BT2 Am2965
1804BT3 Am2966
1804ВЖ1 Am2960
1804ВЖ2 Am2961
1804ВЖ3 Am2962
1804ВУ1 Am2909
1804ВУ2 Am2911
1804ВУ3 Am29811A
1804ВУ4 Am2910
1804ВУ5 Am2930
1804ВУ6 Am2940
1804ВУ7 Am2942
1804ГГ1 Am2995
1804ИР1 Am2918
1804ИР2 Am2920
1804ИР3 Am2950
1804ИР4 Am29705A
vak: (Улыбка)
В микро-БЭСМ в качестве программируемого таймера использовалась микросхема к580ви53. Ну не вопрос, подумал я, это ведь классический Intel 8253. Для него в интернете есть куча исходников на Верилоге, сейчас быстренько привинчу. Не тут-то было. Нашёл три разные реализации i8253 - все оказались кривоватые и не соответствующие реальному чипу. И неспроста: проблема оказалась глубже. Дело в том, что этот чип представляет собой классический пример асинхронного дизайна, забытого в наше время. В микросхеме отсутствует опорный синхросигнал.



Интерфейс к управляющему процессору состоит из сигналов адреса, данных, /CS, /RD, /WR. Здесь не участвуют сигналы CLK. Они влияют только на декремент счётчиков времени, но не на логику внешнго интерфейса. Хитрая задача абитража между осинхронными запросами от процессора и событиями от синхросигналов решается схемотехникой, что нетривиально. Современные средства Verilog-синтеза такое не могут. Приходится признать, что с развитием технологий разработки цифровых микросхем мы кое-что утеряли, а именно способность проектировать асинхронные схемы.

Чтобы сделать i8253 "понятным" для современных Verilog-синтезаторов, достаточно сделать его синхронным, то есть ввести глобальный высокоскоростной сигнал CLK со стороны процессора, и тактировать все остальные события по нему. Хотя это будет уже не совсем i8253, но для проектов типа микро-БЭСМ вполне годится.
vak: (Улыбка)
Отсканировал описание микросхемы К1802ВВ1, вдруг пригодится кому: https://github.com/besm6/micro-besm/raw/master/doc/k1802bb1.pdf

Это довольно уникальный чип, не имевший западного аналога. Внутри находится четыре 4-битовый регистра, к которым можно обращаться с четырёх независимых двунаправленных портов. В процессоре микро-БЭСМ микросхема К1802ВВ1 (16 штук) применяется для организации взаимодействия между внутренними 64-битными шинами данных.
vak: (Улыбка)
Воспроизвести чип Am2904 на Верилоге нетрудно. Насколько он соотвествует реальности, это другой вопрос. Надо каким-то образом сравнить его с реальныи чипом. Для этого я собрал вот такой стенд на базе Ардуино Мега.



vak: (Улыбка)
К1804ВС1, К1804ВР2, К1804ВУ4



Давно не производятся, но на Ebay всё еще можно добыть по сходной цене.
vak: (Улыбка)
Чудная книжка: объясняет в деталях, как работают секционные процессоры серии К1804 (Am2900). Досталась мне за $0.01 на Амазоне. Неясных мест почти не осталось, можно начинать восстанавливать схему процессора микро-БЭСМ.



Заметьте забавную наклеечку в правом верхнем углу. Раньше книжка принадлежала профессору Гарольду Картеру из университета Цинцинатти.

vak: (Улыбка)
Сделал чип Am2904 на СистемВерилоге.
Теперь задача протестировать.
vak: (Улыбка)
Имеющийся тест чипа Am2910 проходит на файле alg_beh/alg_beh2910.vhdl, но выдаёт кучу ошибок на файле funct_block_alg_beh/funct_block_alg_beh2910.vhdl. Вывод - нельзя слепо доверять этим исходникам, без тестов никак нельзя.
150 ошибок из 1037 проверок )
Возможно, это всё проблемы GHDL. На симуляторе Modelsim оба теста проходят чисто. Modelsim входит в состав бесплатной версии Altera Quartus (с некоторыми ограничениями).

На симуляторе Cadence IUS оба теста alg_beh тоже проходят. OEM-версия IUS содержится в бесплатном пакете Xilinx Vivado. Но у него есть минус: он не понимает guard-выражения языка VHDL.
ERROR: [XSIM 43-3147] "funct_block_alg_beh2901.vhdl" Line 135. Guard expressions are not supported. 
ERROR: [XSIM 43-3147] "funct_block_alg_beh2901.vhdl" Line 151. Guard expressions are not supported. 
vak: (Улыбка)
Попробовал скомпилить исходники чипа Am2901 используя GHDL. Падает по внутренней ошибке, пытаясь обработать двунаправленные сигналы.
Протокол )
GHDL не может справиться с функцией WiredOr в строке:
    signal RAM0, RAM3, Q0, Q3 : WiredOr MVL7;