PDP2011 на Altera DE1

FPGA

Posted by Unik on 10.11.2019

Начиная с 2014 года я следил за проектом PDP2011 и хотел его попробовать в живую. Но стоимость FPGA плат, которые поддерживаются автором проекта, была достаточно высокой. Причем платы б/у мне не попадались и можно было заказать только новую. И вот сейчас я все же приобрел подходящую плату и стал разбираться как это всё запустить...

За последнее время в PDP2011 появились дополнения, особенно полезное из них это поддержка SDHC карт памяти. Если у вас плата Altera DE1, то проще всего взять готовый проект с ModernHackers.com на данный момент у них последняя версия проекта, собранная со всем что нужно.

Вкратце что из себя представляет PDP2011:

PDP2011 - это аппаратная эмуляция PDP11 машин в VHDL на FPGA плате. Сделана довольно таки точная эмуляция, позволяющая пройти XXDP тесты.

  • 4МБ оперативной памяти
  • RK11 и RL11 контроллеры диска. До 8шт RK05 или 4шт RL02 дисков можно разместить на одной SD карте
  • RH70 (для 11/70) или RH11 контроллер, позволяющий создать один диск RP04, RP05, или RP06
  • KL11 поддержка до 4х serial линий для подключения терминалов
  • DEUNA/DELUA совместимый контроллер для сети(нужен модуль PMODNIC100)
  • KW-11L Line clock 60 или 50Гц(по дефолту 60, но для России нужно 50Гц)

В итоге это интересный проект, но пользоваться им будет не так удобно как SIMH, поэтому он подойдет не всем. Хотя бы потому что поддерживаются только RK, RL и RH диски. ОС придеться установить из дистрибутива в SIMH и только потом перенести в PDP2011.

Для записи проекта в плату DE1 понадобится "Altera Quartus II Web Edition 13.0 SP1" это последняя версия которая поддерживает эту плату. Скачать можно например тут - dcenet.felk.cvut.cz Есть версия под ОС Linux и под Windows. Я использую Linux версию, кстати в нём проще собрать утилиту sdfmt для RL02 образов, если нужна.

После скачивания Quartus-web-13.0.1.232.iso распаковываем и запускаем установку файлом "./setup.sh" без root прав. При установке на выборе компонентов в Devices указать "Cyclone II/III/IV" и запускаем:

 ~/altera/13.0sp1/quartus/bin/quartus --64bit

Теперь скачиваем проект PDP2011-modernhackers.com и открываем его в Quartus выбрав файл - de1.qpf . Скомпилированый файл проекта называеться top.sof

В плате DE1 уже есть программатор USB-Blaster. По умолчанию USB-Blaster в Linux не будет работать если запускать Quartus без root прав, поэтому нужно создать правило для udev:

#/etc/udev/rules.d/51-usbblaster.rules
# USB-Blaster
SUBSYSTEM=="usb", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6001", MODE="0666", SYMLINK="usbblaster%n"
SUBSYSTEM=="usb", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6002", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6003", MODE="0666"
#
# # USB-Blaster II
SUBSYSTEM=="usb", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6010", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6810", MODE="0666"

Подключаем плату к COM порту ПК со следующими настройками в терминальной программе: 9600-8-1-n-n

Теперь выбираем "Tools -> Programmer" нажимаем на "Hardware setup..." и выбираем USB-Blaster. Всё, можно запустить запись проекта в FPGA нажав на "Start". И видим в терминале:

Hello, world [t47]: cpu 11/06 fpu
177776 psw
177774 slr
177772 pirq
177770 mbr
177766 cer
177764 id
177762 – 177760 size
177752 mr
177750 mnt
177746 – 177740 mr
177676 – 177600 pdr/par
177576 – 177572 mmu
177570 sdr
177566 – 177560 kl
177546 kw
176776 – 176700 rh
174516 – 174510 xu
173776 – 173000 m9312
172516 mmu
172376 – 172300 pdr/par
172276 – 172200 pdr/par
170376 – 170200 ubm
165776 – 165000 m9312

boot from rp:

Прошивка в EPCS4

Запустили, но проект в памяти будет храниться до выключения питания, что не удобно. Поэтому в плате DE1 есть микросхема с последовательным доступом Altera EPCS4 для Cyclone II 2C20. Нужно записать проект в неё. Для этого в папке проекта есть файл с расширением ".pof". Файлы с таким расширением необходимо зашивать, подключившись непосредственно к ПЗУ, но не обязательно. Из ".pof" файла можно в конверторе получить файл с расширением ".jic" который уже можно прошить обычным способом, через jtag.

  • В меню "File" выбираем "Convert Progamming Files...".
  • В открывшемся меню выбираем в поле "Programming file type:" -> "JTAG Indirect Configuration File (.jic)"
  • В "Configuration device:" выбираем тип ПЗУ - "EPCS4"
  • В "Mode:" выбираем режим прошивки Active Serial
  • В "File name:" указываем выходной файл
  • В поле "Inputs File to Convert" кликаем по SOF Data, c правой стороны появляется кнопка "Add File", кликнув по которой можно выбрать файл для конвертации
  • Затем кликаем по Flash Loader, c правой стороны появляется кнопка "Add Device...", кликаем по ней и выбираем "Cyclone II - EP2C20"
  • Запускаем конвертацию, нажав на "Generate" и получаем файл ".jic" для прошивки через "Programmer"

Подготовка карты памяти.

Образ диска в PDP2011 пишется прямо на карту памяти SDHC, вместо того что бы класть туда файл образа диска.

Пишется командой dd if=image.dsk of=/dev/sdX где X буква диска вашего кард ридера, например "sdb"(указывать именно без цифры означающий раздел диска)

Для проверки можно взять этот образ - 211bsd.dsk.gz он гарантировано работает.

Снять образ RP06 с карты памяти можно например так: dd if=/dev/sdb of=rp06.dsk bs=512 count=340670