МАРСОХОД

Open Source Hardware Project

Добро пожаловать, Гость
Логин: Пароль: Запомнить меня

ТЕМА: Минималистичное софт-ядро для Марсохода.

Минималистичное софт-ядро для Марсохода. 3 года 1 нед. назад #4810

  • Leka
  • Leka аватар Автор темы
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 631
  • Спасибо получено: 51
Минималистическая аккумуляторная фон Неймановская архитектура с 8-разрядными командами, и 16-разрядными данными.
Команда - 4 бита на код операции + 1 бит на тип адресации + 3 бита на номер регистра.
Разрядность данных можно изменить, не затрагивая систему команд.
Используется одна 2х-портовая память с 10..16-разрядными шинами адреса, 8-разрядной шиной команд, и 16-разрядной шиной данных.
Регистры, кроме PC, физически расположены в одной памяти с командами и данными.
В общем адресном пространстве - команды, данные, регистры, I/O порты.
Доступ к I/O портам - через общую адресацию, специальных команд не предусмотрено.
Аппаратно реализованы 2 типа адресации источника (или приемника в команде ST) - регистровый, и индексный.
В зависимости от типа адресации, src (или dst в команде ST) означает либо Rn, либо imm8(Rn), n=0..7.
Отсутствует разница между константами (включая адреса длинных переходов), и переменными, тк хранятся в общей памяти данных, и используют одинаковые методы адресации.
Флагов нет, условные переходы объединены с командами сравнения.
Команда длинного перехода JMP всегда сохраняет адрес следующей команды в аккумуляторе, поэтому может эмулировать команду вызова подпрограммы.
Аппаратного стека нет, адрес возврата сохраняется в аккумуляторе, и может быть сохранен в регистре следующей командой (ST Rn).
Команда длинного перехода JMP использует регистровую или индексную адресацию, поэтому может эмулировать команду возврата из подпрограммы.
Команда ROT src циклически вращает аккумулятор по счетчику, заданному в src, и эмулирует ROL n, ROR n.
Команда занимает 1 байт, + 1 байт при индексной адресации, + 1 байт для команд с коротким переходом.
Число тактов == числу байт команды (для ROT число тактов увеличивается на число сдвигов).

BR imm -- PC = PC + imm8
BEQ src, imm -- if(A == src) PC = PC + imm8
BNE src, imm -- if(A != src) PC = PC + imm8
BGE src, imm -- if(A >= src) PC = PC + imm8
BGT src, imm -- if(A > src) PC = PC + imm8
BLE src, imm -- if(A <= src) PC = PC + imm8
BLT src, imm -- if(A < src) PC = PC + imm8
JMP src -- A = PC, PC = src
LD src -- A = src
ST dst -- dst = A
ADD src -- A += src
SUB src -- A -= src
AND src -- A &= src
OR src -- A |= src
XOR src -- A ^= src
ROT src -- A = rot(A, src)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Leka. Причина: Убрал спорные моменты

Минималистичное софт-ядро для Марсохода. 3 года 1 нед. назад #4818

  • Leka
  • Leka аватар Автор темы
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 631
  • Спасибо получено: 51
Проект в стадии разработки, могут быть ошибки, неточности, и тд.
Выкладывается для предварительной оценки.
АЛУ, каждый квадратик - функция, реализуемая в 1 ЛЕ/разряд. 6 ЛЕ/разряд * 16 разрядов = 96 ЛЕ. Надо еще прибавить декодер, это ~1 ЛЕ/управляющий вывод, получится ~10. Получаем ~~100 ЛЕ для АЛУ.

Маленькая черточка над сигналом - инверсия знакового разряда, это нужно для знакового сравнения.
Вложения:

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Leka.

Минималистичное софт-ядро для Марсохода. 3 года 1 нед. назад #4819

Leka пишет: В общем адресном пространстве - команды, данные, регистры, I/O порты.
Доступ к I/O портам - через общую адресацию, специальных команд не предусмотрено.

И это правильно. Порты ввода-вывода это анахронизм.

Флагов нет, условные переходы объединены с командами сравнения.

Много раз слышал о таком приёме. Можно чуть подробнее о формате таких инструкций?

Команда длинного перехода JMP всегда сохраняет адрес следующей команды в аккумуляторе, поэтому может эмулировать команду вызова подпрограммы.
Аппаратного стека нет, адрес возврата сохраняется в аккумуляторе, и может быть сохранен в регистре следующей командой (ST Rn).

О! Похоже что некоторые идеи витают в воздухе и приходят сразу в несколько голов. :) Я сделал похоже, но использовал префикс. Если префикс стоит перед любой инструкцией перехода, то следующий адрес сохраняется в одном из регистров общего назначения (R15). А инструкция возврата (RET) это переход по значению регистра (R15).

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Минималистичное софт-ядро для Марсохода. 3 года 1 нед. назад #4821

  • MVV
  • MVV аватар
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 13
  • Спасибо получено: 7
Собирал для одного проекта J1: a small Forth CPU Core for FPGAs для быстрой обработки видео данных.



На страничке проекта есть примеры с исходниками игры Invaders и демки.
Спасибо сказали: Leka

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Минималистичное софт-ядро для Марсохода. 3 года 1 нед. назад #4822

  • Leka
  • Leka аватар Автор темы
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 631
  • Спасибо получено: 51

alman пишет:

Флагов нет, условные переходы объединены с командами сравнения.

Много раз слышал о таком приёме. Можно чуть подробнее о формате таких инструкций?

Флаги обычно используются только в командах условных переходов в паре с командой сравнения.
Вне этих пар команд флаги обычно не имеют смысла (м/б кто-то и использует их для разного рода ассемблерных трюков, но это порочный путь. имхо). Если объединить эти пары команд в одну команду сравнения-перехода, надобность во флагах исчезнет. И тогда вместо двух соманд:
CMP a, b
JMP case, label
имеем одну:
CMPandJMP a, b, case, label.
Вопрос только в достаточной разрядности команд.
Спасибо сказали: alman

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Минималистичное софт-ядро для Марсохода. 3 года 1 нед. назад #4823

  • Leka
  • Leka аватар Автор темы
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 631
  • Спасибо получено: 51

MVV пишет: J1: a small Forth CPU Core for FPGAs

Одна из целей моего проекта - показать на конкретном примере, что учет в полной мере особенностей FPGA позволяет в несколько раз сократить ресурсоемкость дизайна, и в ~2 раза поднять тактовую. А описание АЛУ в виде одного длинного case (как в J1, и большинстве других открытых проектов) никак не способствует такой оптимизации - возможности синтезаторов далеки от идеала.

Выделил из J1 АЛУ - синтез для Альтеры дал ~400 ЛЕ. После удаления команд сдвигов на n разрядов получил ~270 ЛЕ. Число слоев логики не смотрел. Картинкой выше я показывал, что подобное АЛУ укладывается в ~100 ЛЕ, и 2 слоя логики (на пути память данных -- регистр результата).

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Leka.

Минималистичное софт-ядро для Марсохода. 3 года 1 нед. назад #4824

  • MVV
  • MVV аватар
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 13
  • Спасибо получено: 7

Leka пишет: А описание АЛУ в виде одного длинного case (как в J1, и большинстве других открытых проектов) никак не способствует такой оптимизации - возможности синтезаторов далеки от идеала.

Т.е. дешифратор команд построен без case, это как? Микроинструкции ввиде ПЗУ блока?

Leka пишет: Картинкой выше я показывал, что подобное АЛУ укладывается в ~100 ЛЕ, и 2 слоя логики (на пути память данных -- регистр результата).

Описание картинки на verilog или vhdl можете показать как подтверждение?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Минималистичное софт-ядро для Марсохода. 3 года 1 нед. назад #4825

  • Leka
  • Leka аватар Автор темы
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 631
  • Спасибо получено: 51

Т.е. дешифратор команд построен без case, это как?

АЛУ разбивается на отдельные модули (один или несколько квадратиков на картинке), со своими управляющими сигналами. Сами управляющие сигналы получаются непосредственно из кода операции и сигналов, выдаваемых блоком управления.
Пример можно посмотреть на картинке, и в core.txt для упрощенного 430 ядра, которое выкладывал раньше. Там не Верилог, но понять можно, тк почти Си. Для данного минималистического ядра переведу все на Верилог.

Картинкой выше я показывал, что подобное АЛУ укладывается в ~100 ЛЕ, и 2 слоя логики (на пути память данных -- регистр результата).

Описание картинки на verilog или vhdl можете показать как подтверждение?

Обязательно, после отладки переведу все в Верилог.

Кстати, спасибо за картинку по J1 - напомнили, как правильно рисовать конвейер.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Leka.

Минималистичное софт-ядро для Марсохода. 3 года 1 нед. назад #4827

To Leka:
Как назовем процессор для LCC?

Николай.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Минималистичное софт-ядро для Марсохода. 3 года 1 нед. назад #4828

  • Leka
  • Leka аватар Автор темы
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 631
  • Спасибо получено: 51

Как назовем процессор для LCC?

Не придумал еще, пока m16.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Время создания страницы: 0.475 секунд

facebook  GitHub  YouTube  Twitter
Вы здесь: Начало Forum Наш форум Проекты пользователей Минималистичное софт-ядро для Марсохода.