DekatronPC эмулятор: различия между версиями
Материал из DekatronPC
Radiolok (обсуждение | вклад) |
Radiolok (обсуждение | вклад) |
||
(не показано 10 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
[[категория:Проекты]] | [[категория:Проекты]] | ||
[[категория:DekatronPC]] | [[категория:DekatronPC]] | ||
Строка 6: | Строка 8: | ||
Проект по созданию эмулятора лампового компьютера на ПЛИС. Аппаратная часть сделана на базе отладочной платы Altera De0 Nano и дисплея [[МС6205]] | Проект по созданию эмулятора лампового компьютера на ПЛИС. Аппаратная часть сделана на базе отладочной платы Altera De0 Nano и дисплея [[МС6205]] | ||
== Работа панели эмулятора == | |||
Панель эмулятора представляет собой блок индикации и управления. | |||
[[Файл:Dpc dmulator.pdf|1000px]] | |||
К ПЛИС подключается плата демультиплексора, на которой располагаются сделающие каналы: | |||
* 4-бит катодный регистр. В нем хранится номер текущего отображаемого столбца на блоке ИН12. | |||
* Объединенный 8-бит анодный регистр. Старший и младший и младший октеты соотверствуют верхнему и нижнему индикатору в отображаемом столбце. Значение кодируется в формате 8-4-2-1. | |||
* 8-бит регистр опроса клавиатуры. Клавиатура является матрицей 9х4 кнопок, их назначение описано в таблице ниже. | |||
** Информация о нажатых кнопках поступает непосредственно на вход ПЛИС через параллельную 7-бит интерфейсную шину. | |||
== Цель проекта == | == Цель проекта == | ||
Строка 11: | Строка 26: | ||
* На ПЛИС создается полная копия будущей ламповой машины. которая позволяет упростить процесс разработки микроархитектуры лампового компьютера, а также отладить взяимодействие всех ключевых элементов. | * На ПЛИС создается полная копия будущей ламповой машины. которая позволяет упростить процесс разработки микроархитектуры лампового компьютера, а также отладить взяимодействие всех ключевых элементов. | ||
* Укрупненные блоки: | * Укрупненные блоки: | ||
** Блок счетчика IP - 6 декатронов, работающих в восьмеричной системе. | ** Блок счетчика IP - 6 декатронов, работающих в восьмеричной системе. Счетчик умеет делать +1 и -1, а также, | ||
*** При сигнале IP_READY=1 - на выходе счетчика его текущее значение. | |||
*** Можно сбросить счетчики в нуль. | |||
*** Максимальное число 0777777 - или 263143. для 7 декатронов - 07777777 или 2097151 | |||
** Блок памяти программ | ** Блок памяти программ | ||
** Блок декодера инструкций | ** Блок декодера инструкций | ||
** Блок счетчика Loop | ** Блок счетчика Loop на базе двух декатронов умеет считать +1 и -1 от 0 до 99 в десятичном режиме. | ||
** Блок счетчика AP | *** При сигнале LOOP_READY=1 разрешается считать состояние сигнала LOOP_ZERO | ||
*** Сигнал LOOP_ZERO=1 показывает что счетчик пуст | |||
*** Сигнал LOOP_OVERFLOW=1 показывает, что счетчик переполнился - критическое состояние, вызывает SYSTEM_HALT | |||
** Блок счетчика AP - 5 декатронов, работающих в восьмеричной системе. Счетчик умеет делать +1 и -1 | |||
*** При сигнале AP_READY=1 - на выходе счетчика его текущее значение | |||
*** Сигнал MEMORY_LOCK=1 - означает, что данные по данному адресу выгружены в счетчик данных и перед изменением состояния счетчика их необходимо записать обратно. Запрещает операции +1 и -1. | |||
*** Максимальное число 077777 - или 32767. | |||
** Блок памяти данных | ** Блок памяти данных | ||
** Блок счетчика данных | ** Блок счетчика данных - 3 декатрона в восьмеричной системе. Счетчик умеет делать +1 и -1, а также в него можно записать новые данные извне | ||
*** При сигнале DATA_READY=1 - декатроны находятся в устойчивом состоянии | |||
*** Сигнал MEMORY_LOCK=0 означает, что данных в счетчике еще нет и перед операциями +1 и -1 необходимо прочитать данные из ОЗУ | |||
** Блок ввода/вывода | ** Блок ввода/вывода | ||
* Впоследствии, программные блоки реализуются физически и замещают программные блоки. В итоге при наличии эмулятора компьютер всегда работает. | * Впоследствии, программные блоки реализуются физически и замещают программные блоки. В итоге при наличии эмулятора компьютер всегда работает. | ||
* Данный подход позволяет своевременно находить аппаратные проблемы и устранять их. | * Данный подход позволяет своевременно находить аппаратные проблемы и устранять их. | ||
== Блок индикации == | |||
[[Файл:Эмулятор лицевая 1.jpg|600px|без]] | |||
== Прогресс == | == Прогресс == | ||
Строка 29: | Строка 60: | ||
* Рисую схему блока индикации. Представляет собой дисплей мс6205, блок индикаторов ИН12 и клавиатуру. | * Рисую схему блока индикации. Представляет собой дисплей мс6205, блок индикаторов ИН12 и клавиатуру. | ||
== Виртуальный эмулятор == | |||
[[Файл:VirtualDekatronPCEmulator.png|центр|безрамки|450x450пкс]] | |||
<youtube>qlBzE27at6M</youtube> | |||
== Установка окружения == | |||
Установка [https://verilator.org/guide/latest/install.html Verilator] | |||
<syntaxhighlight lang="bash"> | |||
sudo apt-get install git perl python3 gperf make autoconf g++ flex bison ccache | |||
sudo apt-get install python-is-python3 python3-pip | |||
sudo apt-get install libgoogle-perftools-dev numactl perl-doc help2man | |||
sudo apt-get install libfl2 # Ubuntu only (ignore if gives error) | |||
sudo apt-get install libfl-dev # Ubuntu only (ignore if gives error) | |||
sudo apt-get install zlibc zlib1g zlib1g-dev # Ubuntu only (ignore if gives error) | |||
git clone https://github.com/verilator/verilator # Only first time | |||
# Every time you need to build: | |||
unsetenv VERILATOR_ROOT # For csh; ignore error if on bash | |||
unset VERILATOR_ROOT # For bash | |||
cd verilator | |||
git pull # Make sure git repository is up-to-date | |||
git tag # See what versions exist | |||
git checkout v{version} # Switch to specified release version | |||
autoconf # Create ./configure script | |||
./configure # Configure and create Makefile | |||
make -j `nproc` # Build Verilator itself (if error, try just 'make') | |||
sudo make install | |||
</syntaxhighlight> | |||
Установка Icarus Verilog | |||
<syntaxhighlight lang="bash"> | |||
sudo apt install gtkwave | |||
git clone https://github.com/steveicarus/iverilog.git | |||
cd iverilog | |||
sh autoconf.sh | |||
./configure | |||
make -j`nproc` | |||
sudo make install | |||
</syntaxhighlight> | |||
Установка Yosys | |||
<syntaxhighlight lang="bash"> | |||
sudo apt-get install build-essential clang flex \ | |||
libreadline-dev gawk tcl-dev libffi-dev \ | |||
graphviz xdot pkg-config python3 libboost-system-dev \ | |||
libboost-python-dev libboost-filesystem-dev | |||
git clone https://github.com/YosysHQ/yosys.git | |||
pip install liberty-parser | |||
make config-clang | |||
make | |||
sudo make install | |||
</syntaxhighlight> | |||
== Ссылки == | == Ссылки == | ||
* https://github.com/radiolok/dekatronpc - Общий репозиторий проекта | * https://github.com/radiolok/dekatronpc - Общий репозиторий проекта | ||
* http://www.construc-tiv.ru/19-rack-box.html - тут достаточно бюджетные корпуса 19" | * http://www.construc-tiv.ru/19-rack-box.html - тут достаточно бюджетные корпуса 19" |
Текущая версия на 11:21, 7 июля 2023
Описание
Проект по созданию эмулятора лампового компьютера на ПЛИС. Аппаратная часть сделана на базе отладочной платы Altera De0 Nano и дисплея МС6205
Работа панели эмулятора
Панель эмулятора представляет собой блок индикации и управления.
К ПЛИС подключается плата демультиплексора, на которой располагаются сделающие каналы:
- 4-бит катодный регистр. В нем хранится номер текущего отображаемого столбца на блоке ИН12.
- Объединенный 8-бит анодный регистр. Старший и младший и младший октеты соотверствуют верхнему и нижнему индикатору в отображаемом столбце. Значение кодируется в формате 8-4-2-1.
- 8-бит регистр опроса клавиатуры. Клавиатура является матрицей 9х4 кнопок, их назначение описано в таблице ниже.
- Информация о нажатых кнопках поступает непосредственно на вход ПЛИС через параллельную 7-бит интерфейсную шину.
Цель проекта
- На ПЛИС создается полная копия будущей ламповой машины. которая позволяет упростить процесс разработки микроархитектуры лампового компьютера, а также отладить взяимодействие всех ключевых элементов.
- Укрупненные блоки:
- Блок счетчика IP - 6 декатронов, работающих в восьмеричной системе. Счетчик умеет делать +1 и -1, а также,
- При сигнале IP_READY=1 - на выходе счетчика его текущее значение.
- Можно сбросить счетчики в нуль.
- Максимальное число 0777777 - или 263143. для 7 декатронов - 07777777 или 2097151
- Блок памяти программ
- Блок декодера инструкций
- Блок счетчика Loop на базе двух декатронов умеет считать +1 и -1 от 0 до 99 в десятичном режиме.
- При сигнале LOOP_READY=1 разрешается считать состояние сигнала LOOP_ZERO
- Сигнал LOOP_ZERO=1 показывает что счетчик пуст
- Сигнал LOOP_OVERFLOW=1 показывает, что счетчик переполнился - критическое состояние, вызывает SYSTEM_HALT
- Блок счетчика AP - 5 декатронов, работающих в восьмеричной системе. Счетчик умеет делать +1 и -1
- При сигнале AP_READY=1 - на выходе счетчика его текущее значение
- Сигнал MEMORY_LOCK=1 - означает, что данные по данному адресу выгружены в счетчик данных и перед изменением состояния счетчика их необходимо записать обратно. Запрещает операции +1 и -1.
- Максимальное число 077777 - или 32767.
- Блок памяти данных
- Блок счетчика данных - 3 декатрона в восьмеричной системе. Счетчик умеет делать +1 и -1, а также в него можно записать новые данные извне
- При сигнале DATA_READY=1 - декатроны находятся в устойчивом состоянии
- Сигнал MEMORY_LOCK=0 означает, что данных в счетчике еще нет и перед операциями +1 и -1 необходимо прочитать данные из ОЗУ
- Блок ввода/вывода
- Блок счетчика IP - 6 декатронов, работающих в восьмеричной системе. Счетчик умеет делать +1 и -1, а также,
- Впоследствии, программные блоки реализуются физически и замещают программные блоки. В итоге при наличии эмулятора компьютер всегда работает.
- Данный подход позволяет своевременно находить аппаратные проблемы и устранять их.
Блок индикации
Прогресс
- С апреля потихоньку пилится модель компьютера с помощью System Verilog.
- Реализована модель декатронного счетчика
- (15/11/2020) Заказал корпус 5U 360мм глубиной.
- Рисую схему блока индикации. Представляет собой дисплей мс6205, блок индикаторов ИН12 и клавиатуру.
Виртуальный эмулятор
Установка окружения
Установка Verilator
sudo apt-get install git perl python3 gperf make autoconf g++ flex bison ccache
sudo apt-get install python-is-python3 python3-pip
sudo apt-get install libgoogle-perftools-dev numactl perl-doc help2man
sudo apt-get install libfl2 # Ubuntu only (ignore if gives error)
sudo apt-get install libfl-dev # Ubuntu only (ignore if gives error)
sudo apt-get install zlibc zlib1g zlib1g-dev # Ubuntu only (ignore if gives error)
git clone https://github.com/verilator/verilator # Only first time
# Every time you need to build:
unsetenv VERILATOR_ROOT # For csh; ignore error if on bash
unset VERILATOR_ROOT # For bash
cd verilator
git pull # Make sure git repository is up-to-date
git tag # See what versions exist
git checkout v{version} # Switch to specified release version
autoconf # Create ./configure script
./configure # Configure and create Makefile
make -j `nproc` # Build Verilator itself (if error, try just 'make')
sudo make install
Установка Icarus Verilog
sudo apt install gtkwave
git clone https://github.com/steveicarus/iverilog.git
cd iverilog
sh autoconf.sh
./configure
make -j`nproc`
sudo make install
Установка Yosys
sudo apt-get install build-essential clang flex \
libreadline-dev gawk tcl-dev libffi-dev \
graphviz xdot pkg-config python3 libboost-system-dev \
libboost-python-dev libboost-filesystem-dev
git clone https://github.com/YosysHQ/yosys.git
pip install liberty-parser
make config-clang
make
sudo make install
Ссылки
- https://github.com/radiolok/dekatronpc - Общий репозиторий проекта
- http://www.construc-tiv.ru/19-rack-box.html - тут достаточно бюджетные корпуса 19"