МАРСОХОД

Open Source Hardware Project

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

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

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

  • Leka
  • Leka аватар Автор темы
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
Ошибся в *.bat, поэтому и не увидел строки исходников для других процессоров.
Сейчас поправил, все Ок.

Тоже не программист по образованию, поэтому быстро в чужих исходниках не разберусь.
Решил так. Важно как можно скорее получить первый вариант работающего ядра с компилятором, пусть с ошибками, и для самых простых программ. Вывод symbolic понятный и простой, уже начал писать программу по разбору/преобразованию в ассемблер. Как напишу первый вариант, вернусь к HDL.

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

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

  • Leka
  • Leka аватар Автор темы
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
16-разрядная команда - 6 бит на код операции, 10 бит на номер регистра (max 1К*16 регистровый файл в памяти).

3 типа адресации в операциях АЛУ (op - операция, A - аккумулятор, Rn - регистр, n=0..1023 ):
аккумулятор-регистр: A = A op Rn, 1слово, 1такт,
память-регистр: @A = @A op Rn, 1слово, 2такта,
регистр-память: Rn = Rn op @A, 1слово, 2такта.
Дополнительно Rn = A, 1слово, 1 такт.
op - почти все базовые 16бит LCC, кроме "тяжелых": преобразование типов, умножение/деление/длинные сдвиги.

1 тип адресации в условных переходах, аккумулятор-регистр:
if(A op Rn) PC=imm16, 2слова, 2 такта.
op - все знаковые и беззнаковые 16бит сравнения LCC.

Переход на подпрограммы - адрес возврата сохраняется в регистре Rn, 2слова, 2такта.
Возврат - по регистру Rn, 1слово, 2такта.
MOV   --   dst = src
COM   --   dst = ~src
NEG    --   dst = -src
ADD    --   dst += src
SUB    --   dst -= src
AND    --   dst &= src
OR      --   dst |= src
XOR   --   dst ^= src
LSH    --   A <<= 1  ;
RSH   --   A >>= 1  ;unsigned
ASR   --   A >>= 1  ;signed
EQ      R, imm  --   if(A == R) PC = imm  ;signed 
NE      R, imm  --   if(A  != R) PC = imm  ;signed
LT       R, imm  --   if(A  <  R) PC = imm  ;signed
GE      R, imm  --   if(A >= R) PC = imm  ;signed
GT      R, imm  --   if(A  >  R) PC = imm  ;signed
LE       R, imm  --   if(A <= R) PC = imm  ;signed
LTU    R, imm  --   if(A  <  R) PC = imm  ;unsigned 
GEU   R, imm  --   if(A >= R) PC = imm  ;unsigned
GTU   R, imm  --   if(A  >  R) PC = imm  ;unsigned
LEU    R, imm  --   if(A <= R) PC = imm  ;unsigned 
CALL  R, imm  --   R = PC, PC = imm 
RET    R   --   PC = R 
ST     R  --    R = A

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

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

Минималистичное софт-ядро для Марсохода. 4 года 2 нед. назад #4868

В командах ветвления, наверное, должно быть PC += imm.

Команду RET я бы сделал совмещенной с JR (JMP по регистру).
Это нужно для switch в *.с.

Николай.

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

Минималистичное софт-ядро для Марсохода. 4 года 2 нед. назад #4870

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

В командах ветвления, наверное, должно быть PC += imm.

Это просто лишние ЛЕ на сумматор, не вижу смысла при 16-разрядном imm после команды (в поле команды только код операции и номер регистра).

Команду RET я бы сделал совмещенной с JR (JMP по регистру)

Так и получится, просто мнемонику добавить.

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

Минималистичное софт-ядро для Марсохода. 4 года 2 нед. назад #4872

  • Leka
  • Leka аватар Автор темы
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
Написал неоптимизирующий транслятор symbolic --> asm. Пример для queens.c в приложении.
Алгоритм "лобовой", поэтому очень много лишних пересылок. Легко оптимизировать, но это на потом.
Сейчас, наверно, переключусь на HDL. Потом транслятор в машинные коды.

Вложенный файл:

Имя файла: queens.txt
Размер файла: 2 KB
Вложения:

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

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

Минималистичное софт-ядро для Марсохода. 4 года 2 нед. назад #4873

  • Leka
  • Leka аватар Автор темы
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
Кстати, для ARG мне надо получать имя функции, для которой создаются эти аргументы (чтобы вычислить смещение, тк предполагаю передавать не через стек). Если кто знает/разобрался, как в symbolic.c вывести имя функции для ARG, просьба подсказать. Но это не обязательно, тк можно выделить по asm (в строке CALL).

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

Минималистичное софт-ядро для Марсохода. 4 года 2 нед. назад #4874

  • Leka
  • Leka аватар Автор темы
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
Рисунок, поясняющий, как регистры памяти, программного счетчика, и аккумулятора, позволяют организовать 3х-ступенчатый конвейер:
с 1 тактом на A = A op Rn, Rn = A, ...
и 2 тактами на A = A op @Rn, if(A op Rn) PC = imm, @Rn = A, ...

Темным залиты элементы, используемые предыдущей, и следующей командами, светлым - используемые текущей командой.

Также по рисунку можно оценить, сколько ЛЕ потребуется на минималистичное ядро:
8 ЛЕ/разряд * 16 разрядов = 128 ЛЕ, + немного на декодер и управляющий автомат.
После написания транслятора symbolic --> asm, система команд опять немного поменялась (убраны некоторые методы адресации, которые неэффективно использовать с LCC).
Вложения:
Спасибо сказали: Ynicky

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

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

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

  • Leka
  • Leka аватар Автор темы
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
Написал HDL, теперь проверять. Синтез: ~180 ЛЕ, ~130 МГц. После проверки переведу в Верилог, и выложу.
Вернул чисто аккумуляторную архитектуру, и ортогонализировал систему команд, теперь во всех командах допускаются R и @R (кроме ASL/ASR). Решил выкинуть беззнаковые сравнения - просто из принципа минимализма, только int (иначе LCC будет вставлять лишние операции приведение типов).
src, dst       --  Rn, @Rn

ST   dst       --  dst = A
LD   src       --  A = src
COM  src       --  A = ~src
NEG  src       --  A = -src
ADD  src       --  A += src
SUB  src       --  A -= src
AND  src       --  A &= src
OR   src       --  A |= src
XOR  src       --  A ^= src
ASL            --  A <<= 1
ASR            --  A >>= 1
EQ   src, imm  --  if(A == src) PC = imm
NE   src, imm  --  if(A != src) PC = imm
LT   src, imm  --  if(A <  src) PC = imm 
GE   src, imm  --  if(A >= src) PC = imm 
GT   src, imm  --  if(A >  src) PC = imm 
LE   src, imm  --  if(A <= src) PC = imm
CALL dst, imm  --  dst = PC, PC = imm 
RET  src       --  PC = src

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

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

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

А может сделать процессор 32-х разрядным, с 16-ти разрядными командами?

Николай.

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

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

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

  • Leka
  • Leka аватар Автор темы
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
Вроде можно, тк у памяти раздельные порты команд/данных. Если получится, сделаем параметризируемым, 16/32бит.

Проблема с тестированием. Сначала решил тестировать все в текстовом тестбенче, на Верилоге. С выводом в текстовый лог нужных сигналов/шин/регистров. Под рукой IcarusVerilog, Модельсим переустанавливать надо. Но в IcarusVerilog тест зависает, и это удивляет, тк латчей гарантированно нет... Сейчас проверяю по-другому. Стараюсь побыстрее получить более-менее живое ядро в Верилоге, и выложить.

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

Последнее редактирование: от Leka.
Время создания страницы: 0.497 секунд

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