В сумме 551 вентиль

Jul. 26th, 2017 09:49 pm
vak: (Default)
[personal profile] vak
Асинхронный наибольший общий делитель на микросхеме Xilinx FPGA Artix-7 занимает вот такое количество ресурсов:
Report Cell Usage:
+----------+------+
|Cell |Count |
+----------+------+
|BUFR | 2|
|LUT2 | 236|
|LUT3 | 4|
|LUT4 | 153|
|LUT5 | 26|
|LUT6 | 102|
|LUT6_2 | 28|
+----------+------+
Здесь LUT2-LUT6 это элементарные логические функции с несколькими входами и одним выходом. Примитив LUT6_2 чуть сложнее, он имеет два выхода. BUFR это повторитель-усилитель сигнала.
vak: (Default)
[personal profile] vak
Вот что происходит с альтеровским софтом Quartus II при попытке синтезировать простую схему асинхронного счётчика, содержащую LUTs с обратными связями.
Фатальная ошибка )
Это если поставить для таких ячеек параметр dont_touch="yes", иначе квартус их просто тихо выкидывает из схемы.
vak: (Default)
[personal profile] vak
Конфигурируем отладочный порт USB Bus Blaster для плат Altera FPGA DE10-Lite под линуксом.

(1) После установки Altera Quartus создаём файл /etc/udev/rules.d/51-altera.rules со следующим содержимым:
# Altera bus Blaster
SUBSYSTEM=="usb",\
ENV{DEVTYPE}=="usb_device",\
ATTR{idVendor}=="09fb",\
ATTR{idProduct}=="6001",\
MODE="0666",\
NAME="bus/usb/$env{BUSNUM}/$env{DEVNUM}",\
RUN+="/bin/chmod 0666 %c"
(2) Активируем новое правило:
$ sudo udevadm control --reload
(3) Копируем данные для работы альтеровского сервиса jtagd:
$ sudo cp /opt/Altera/16.1/quartus/linux64/pgm_parts.txt /etc/jtagd/jtagd.pgm_parts
(4) Чиним известную багу "Unable to read device chain - JTAG chain broken":
$ sudo apt-get install libudev1:i386
$ sudo ln -sf /lib/x86_64-linux-gnu/libudev.so.1 /lib/x86_64-linux-gnu/libudev.so.0
(5) Подключаем плату FPGA и проверяем, что порт работает:
$ /opt/Altera/16.1/quartus/bin/jtagconfig
1) USB-Blaster [4-1]
  031050DD   10M50DA(.|ES)/10M50DC
vak: (Default)
[personal profile] vak
Измерил скорость работы асинхронного алгоритма вычисления наибольшего общего делителя на Xilinx FPGA. Цикл в 20 итераций выполняется чуть меньше чем за 500 наносекунд. Получается 25 нс на итерацию, или 40M итераций в секунду. Для сравнения, если собрать такую схему на рассыпухе (на микросхемах CD4007), будет 72 микросекунды на 20 итераций, или около 280k в секунду.

Время наебениться

Jul. 19th, 2017 11:33 pm
vak: (Default)
[personal profile] vak
"Как мы здесь живём -
великая тайна.
Все кричат 'вира',
а выходит майна.
Бился лбом в бетон,
думал всё изменится.
Бог с ним...
Время наебениться."

vak: (Default)
[personal profile] vak
Довёл я наконец до ума библиотеку асинхронных компонентов для Xilinx FPGA, и затолкал на плату пример вычисления наибольшего общего делителя. В большинстве случаев он даже корректно работает. :) Вводим с переключателей два шестнадцатеричных числа, нажимаем на кнопку, получаем результат. Вот как это выглядит:



Здесь НОД(0x34, 0x27) даёт результат 0xd. В десятичном виде это НОД(52, 39) -> 13.

Но иногда схема врёт. И это ожидаемо, так как для арифметических вычислений я полагаюсь на синтезатор Xilinx Vivado, а он без понятия, что надо генерить "позитивную" логику. Задействовать стандартные примитивы типа CARRY4 нельзя, потому что нарушается монотонность. Получаются вот такие глюки:



Можно видеть, что сигналы out_hidata и out_lodata иногда встают одновременно, и это ошибка. Долдно быть так:



Выход в том, чтобы не доверять арифметические вычисления стандартному синтезатору Verilog, а порождать нужную позитивной логики в структурном виде. Тогда синтезатор уже не сможет ничего испортить.
vak: (Default)
[personal profile] vak
Полезная вещь: интерактивная таблица химических элементов, в картинках.

http://elements.wlonk.com/ElementsTable.htm

January 2017

S M T W T F S
123 45 67
8 910 1112 13 14
15161718192021
2223 2425262728
293031    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 28th, 2017 06:43 pm
Powered by Dreamwidth Studios