DekatronPC эмулятор: различия между версиями

Материал из DekatronPC
 
(не показано 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

Работа панели эмулятора

Панель эмулятора представляет собой блок индикации и управления.

Dpc dmulator.pdf

К ПЛИС подключается плата демультиплексора, на которой располагаются сделающие каналы:

  • 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 необходимо прочитать данные из ОЗУ
    • Блок ввода/вывода
  • Впоследствии, программные блоки реализуются физически и замещают программные блоки. В итоге при наличии эмулятора компьютер всегда работает.
  • Данный подход позволяет своевременно находить аппаратные проблемы и устранять их.

Блок индикации

Эмулятор лицевая 1.jpg


Прогресс

  • С апреля потихоньку пилится модель компьютера с помощью System Verilog.
    • Реализована модель декатронного счетчика
  • (15/11/2020) Заказал корпус 5U 360мм глубиной.
  • Рисую схему блока индикации. Представляет собой дисплей мс6205, блок индикаторов ИН12 и клавиатуру.

Виртуальный эмулятор

VirtualDekatronPCEmulator.png

Установка окружения

Установка 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

Ссылки