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

ТЕМА: SoC для платы Марсоход2

SoC для платы Марсоход2 9 года 6 мес. назад #4803

  • Ynicky
  • Ynicky аватар Автор темы
  • Не в сети
  • Завсегдатай
  • Завсегдатай
  • Сообщений: 209
  • Спасибо получено: 39
А есть пример известного процессора с аккумуляторной архитектурой?
У меня в LCC есть .md файлы на alpha, mips, pdp11, sparc, x86. Не говоря уже про свои.

Николай.

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

SoC для платы Марсоход2 9 года 6 мес. назад #4804

  • Ynicky
  • Ynicky аватар Автор темы
  • Не в сети
  • Завсегдатай
  • Завсегдатай
  • Сообщений: 209
  • Спасибо получено: 39

Проект будет открытым, если будет возможность сделать Си-компилятор.

А нужен ли к такому простому процессору компилятор?

Николай.

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

SoC для платы Марсоход2 9 года 6 мес. назад #4805

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

А есть пример известного процессора с аккумуляторной архитектурой?

В чистом виде только в теории, наверно. А в PIC/51, например, результат м/б записан как в аккумулятор, так и в регистр/память. Я бы считал такую архитектуру промежуточной между аккумуляторной, и регистровой.

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

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

SoC для платы Марсоход2 9 года 6 мес. назад #4806

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

А нужен ли к такому простому процессору компилятор?

Конечно, без какого-либо компилятора Си никто не будет использовать его. Я точно не буду.
Набор команд достаточно полный, с 2-мя типами адресации источника - регистровой, и индексной, например:
ADD Rn --> A += Rn
ADD imm8(Rn) --> A += imm8(Rn)
ST Rn --> Rn = A
ST imm8(Rn) --> imm8(Rn) = A
BGE Rn, imm8 --> if(A >= Rn) goto BAZE+imm8
BGE imm8(Rn), imm8' --> if(A >= imm8(Rn)) goto BAZE+imm8'
и тд.

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

SoC для платы Марсоход2 9 года 6 мес. назад #4807

  • Ynicky
  • Ynicky аватар Автор темы
  • Не в сети
  • Завсегдатай
  • Завсегдатай
  • Сообщений: 209
  • Спасибо получено: 39
Сколько будет регистров в регистровом файле?
Если больше 32, то однозначно LCC не подойдет.
В остальном я пока не вижу ограничений.

Николай.

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

SoC для платы Марсоход2 9 года 6 мес. назад #4808

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
Для 8-разрядной команды - 8, для 9-разрядной команды (при использовании M9K в режиме 1К*9бит) - 16.
Код операции - 4 разряда, тип адресации - 1 разряд, остальное - номер регистра.

Будем пробовать?
Если да, то на неделе открою новую тему, и выложу для начала описание команд, и блок-схему, по которой можно будет оценить число ЛЕ и число уровней логики.

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

SoC для платы Марсоход2 9 года 6 мес. назад #4809

  • Ynicky
  • Ynicky аватар Автор темы
  • Не в сети
  • Завсегдатай
  • Завсегдатай
  • Сообщений: 209
  • Спасибо получено: 39
Последний раз LCC собирал под WIN7/32. NMAKE использовал от Visual Studio 6.
Сейчас стоит WIN10/64. Если получится собрать на нем, то пробуем.

Николай.

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

SoC для платы Марсоход2 9 года 6 мес. назад #4820

Я бы тоже в очередь стал. :)
В смысле - попросил бы помощь в портировании LCC под свою систему команд - нет ни сил, ни времени реализовать генератор кода.
Нельзя ли как-нибудь скооперироваться? Правда скажу честно - не знаю чем я бы мог полезен для Вашей SoC и для софт-процессора от Leka.

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

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

SoC для платы Марсоход2 9 года 6 мес. назад #4826

  • Ynicky
  • Ynicky аватар Автор темы
  • Не в сети
  • Завсегдатай
  • Завсегдатай
  • Сообщений: 209
  • Спасибо получено: 39
Собрал LCC под WIN10/64 с помощью старой Visual Studio 6. Пришлось вспоминать какие переменные среды указывать.
Когда-то тупо скопировал директорию VC98 от Visual Studio 6, где есть файл nmake.exe. Им и пользуюсь.
Если собирать под Linux, то я не знаю как.

попросил бы помощь в портировании LCC под свою систему команд

Буду делать .md файл и выкладывать в теме:
Минималистичное софт-ядро для Марсохода
На этом примере можете учиться.

Николай.
Спасибо сказали: Leka

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

SoC для платы Марсоход2 9 года 5 мес. назад #4909

static int hello(int c, char * a)
{
	int    j = 0x22;
	int    k = 0x7;
	return ~ ((((int)a) + j) ) - c;
}

int main(int argc) 
{
	return hello(argc, "Luck");
}

lcc -S -Wf-target=m16 test.c
; generated by lcc-m16 rev.1.0 on Mon Nov 30 23:27:42 2015

	align 2
_hello:
	subi sp,sp,4
	lea r15,34
	sw r15,-2+4(sp)
	lea r15,7
	sw r15,-4+4(sp)
	mov r15,r5
	lw r14,-2+4(sp)
	add r15,r14
	not r15
	mov r2,r15
	sub r2,r4
_test_c_1:
	addi sp,sp,4
	ret
	nop

	global _main
	align 2
_main:
	subi sp,sp,8
	sw r4,8(sp)
	lw r4,0+8(sp)
	lea r5,_test_c_3
	call _hello
	nop
	mov r15,r2
_test_c_2:
	addi sp,sp,8
	ret
	nop

_test_c_3:
	byte 76
	byte 117
	byte 99
	byte 107
	byte 0

Весьма красивый код получился у m16

А можно ли взглянуть на шестнадцатеричный дамп этого кода?

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

Последнее редактирование: от alman. Причина: int k = 0x7;
Время создания страницы: 0.160 секунд
Работает на Kunena форум