реклама на сайте
подробности

 
 
22 страниц V  « < 6 7 8 9 10 > »   
Reply to this topicStart new topic
> Свои процессоры, Разработка своих процессоров со своей системой команд
Ynicky
сообщение Jun 9 2010, 16:29
Сообщение #106


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 26-05-05
Пользователь №: 5 422



Исправил несколько ошибок.
Проверил АЛУ без SMUL (пока нет), load/store.

Николай.
Прикрепленные файлы
Прикрепленный файл  rf32.rar ( 532.3 килобайт ) Кол-во скачиваний: 61
 
Go to the top of the page
 
+Quote Post
Leka
сообщение Jun 9 2010, 20:41
Сообщение #107


Профессионал
*****

Группа: Участник
Сообщений: 1 075
Регистрация: 30-09-05
Пользователь №: 9 118



Принцип получения hex-файла машинных кодов:
компилятор a2m в "машинный"Си будет также автоматически генерировать файл "code.c" для Си-скрипта "machine.c", запускаемого после a2m. Си-скрипт м/б выполнен TinyCC с ключом "-run".
В приложении пробная версия "machine.c"(с выводом мнемоник вместо hex-кодов) и тестовый "code.c".
Для настройки на конкретную систему команд в "machine.c" надо поменять текстовый вывод мнемоник на вывод соответствующих hex-кодов. Переменная "p" обеспечивает несколько проходов(2) для "подгонки" относительных адресов инструкций, тк их число зависит от данных(добавлений "imm20"). "t"!=0 означает константу. Остальное, думаю, понятно будет из исходника.
"a2m" позже подправлю под вывод "code.c".

Сообщение отредактировал Leka - Jun 9 2010, 20:44
Прикрепленные файлы
Прикрепленный файл  machine.zip ( 819 байт ) Кол-во скачиваний: 50
 
Go to the top of the page
 
+Quote Post
Leka
сообщение Jun 16 2010, 10:45
Сообщение #108


Профессионал
*****

Группа: Участник
Сообщений: 1 075
Регистрация: 30-09-05
Пользователь №: 9 118



Концепцию немного поменял, "a2.exe" выводит код для Си-препроцессора.
Не хватает времени, не сделал вывод hex-кодов для конкретного процессора - в "a2b.c" надо поменять текстовый вывод мнемоник на вывод соответствующих hex-кодов ("a2a.c" настроил для конкретного 2х-операндного процессора).
Прикрепленные файлы
Прикрепленный файл  A2.zip ( 29.4 килобайт ) Кол-во скачиваний: 40
 
Go to the top of the page
 
+Quote Post
Leka
сообщение Jun 16 2010, 15:48
Сообщение #109


Профессионал
*****

Группа: Участник
Сообщений: 1 075
Регистрация: 30-09-05
Пользователь №: 9 118



Пример вывода hex-кодов для некоторых команд (mov, cmp, и тп) в "a2b.c", для остальных делается аналогично. М/б стоит переписать "a2a.c" и "a2b.c", чтобы проще было вводить/править hex-коды команд.

Сообщение отредактировал Leka - Jun 16 2010, 15:50
Прикрепленные файлы
Прикрепленный файл  a2b.txt ( 2.74 килобайт ) Кол-во скачиваний: 100
 
Go to the top of the page
 
+Quote Post
Ynicky
сообщение Jun 17 2010, 09:23
Сообщение #110


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 26-05-05
Пользователь №: 5 422



Цитата(Leka @ Jun 16 2010, 19:48) *
Пример вывода hex-кодов для некоторых команд (mov, cmp, и тп) в "a2b.c", для остальных делается аналогично. М/б стоит переписать "a2a.c" и "a2b.c", чтобы проще было вводить/править hex-коды команд.

Что означает hex-код? Файлы a2a.c и a2b.c идентичны.

Николай.

P.S.
С hex-кодом разобрался. Это AL2 в a2b.txt.
А в hex-код можно добавить комментарий в виде мнемоники команд?
Тогда будет проще править.

Сообщение отредактировал Ynicky - Jun 17 2010, 09:39
Go to the top of the page
 
+Quote Post
Leka
сообщение Jun 17 2010, 10:03
Сообщение #111


Профессионал
*****

Группа: Участник
Сообщений: 1 075
Регистрация: 30-09-05
Пользователь №: 9 118



В "a2b.c" я еще исправил ошибку, вернул необходимые пары "{" "}" (случайно выкинул, когда "причесывал") - иначе неправильно считает адреса команд.
Думаю, надо переписать "a2a.c" и "a2b.c", чтобы были комменты, и удобно было править. Но сейчас много дел навалилось, освобожусь - займусь.
Go to the top of the page
 
+Quote Post
Leka
сообщение Jun 17 2010, 21:37
Сообщение #112


Профессионал
*****

Группа: Участник
Сообщений: 1 075
Регистрация: 30-09-05
Пользователь №: 9 118



В "a2b.c" надо вместо "00" кодов операций поставить реальные.

Вывод комментов добавил.
Прикрепленные файлы
Прикрепленный файл  A2.zip ( 33.35 килобайт ) Кол-во скачиваний: 36
 
Go to the top of the page
 
+Quote Post
Leka
сообщение Jun 18 2010, 08:34
Сообщение #113


Профессионал
*****

Группа: Участник
Сообщений: 1 075
Регистрация: 30-09-05
Пользователь №: 9 118



По поводу слотов задержки в командах условных переходов. В FPGA вся память - двухпортовая, можно использовать для упреждающей выборки альтернативной инструкции из памяти программ - выигрываем 1 такт.
Go to the top of the page
 
+Quote Post
Ynicky
сообщение Jun 18 2010, 11:50
Сообщение #114


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 26-05-05
Пользователь №: 5 422



Цитата(Leka @ Jun 18 2010, 12:34) *
По поводу слотов задержки в командах условных переходов. В FPGA вся память - двухпортовая, можно использовать для упреждающей выборки альтернативной инструкции из памяти программ - выигрываем 1 такт.

В принципе, можно вообще обойтись без слотов задержки, как, например, в ARM-е.
Тогда мы будем терять 3 слота задержки при невыполнении условия перехода (flush).
Можно, конечно, сделать альтернативную выборку команд и не терять ни одного слота,
переключаясь на альтернативную ветку конвейера.
Но это, по моему, будет привязывать данную архитектуру только к FPGA.
Как это может сочетаться с кеш, пока не знаю.

Николай.
Go to the top of the page
 
+Quote Post
Ynicky
сообщение Jun 20 2010, 09:42
Сообщение #115


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 26-05-05
Пользователь №: 5 422



Цитата(Leka @ Jun 18 2010, 01:37) *
В "a2b.c" надо вместо "00" кодов операций поставить реальные.
Вывод комментов добавил.

Есть вопросы по командам в "a2b.c".
1. "TST" - это операция "AND" без записи в регистр (т.е. только изменение флагов)?
2. "BZ","BNZ" - ветвление, если результат "=0" и "/=0"? Дело в том, что с командами "CMP"
все условия ветвления сравниваются с '0'. Значит ли это, что их можно приравнять
к командам "BEQ" и "BNE"?
3. Что из себя представляют команды: "COM", "LDI", "LDD", "LDDI", "STI", "STD", "STDI"?
4. "ASL" и "ASR" - это команды арифметического или логического сдвига?

Исправил еще несколько ошибок в процессоре.

Николай.

Прикрепленные файлы
Прикрепленный файл  rf32.rar ( 588.35 килобайт ) Кол-во скачиваний: 64
 
Go to the top of the page
 
+Quote Post
Leka
сообщение Jun 20 2010, 14:41
Сообщение #116


Профессионал
*****

Группа: Участник
Сообщений: 1 075
Регистрация: 30-09-05
Пользователь №: 9 118



Цитата
1. "TST" -

любая операция без записи в регистр, устанавливающая нужные флаги для "BZ","BNZ".
Можно "CMP" с нулевой константой.

Цитата
2. "BZ","BNZ" - ветвление, если результат "=0" и "/=0"?

Да.

Цитата
Значит ли это, что их можно приравнять к командам "BEQ" и "BNE"?

Напрямую не получится, тк "0" задан неявно.
Либо в "ассемблерном" Си всегда писать "if(a!=0)..." и "if(a==0)..." вместо "if(a)..." и "if(!a)...", либо ввести формальные команды "BZ" и"BNZ", подразумеавющие сравнение с нулем. В фактической системе команд они не нужны, и в машинных кодах
заменяются "BEQ" и "BNE" с нулевой константой.

Цитата
"3. ... COM", "LDI", "LDD", "LDDI", "STI", "STD", "STDI"

COM: Ra=~Ra;
LDI: Ra=*Imm;
LDD: Ra=Rb[Rc];
LDDI: Ra=Rb[Imm];
STI: *Imm=Ra;
STD: Ra[Rb]=Rc;
STDI: Ra[Rb]=Imm;
"LDD" и "STD" - для 3х-операндной системы команд.
"LDDI" и "STDI" получаются "за компанию".

Цитата
4. "ASL" и "ASR" - это команды арифметического или логического сдвига?

То-же, что и "<<" и ">>" в Си.

Можно добавлять свои команды например:
#define MAX( a, b ) AL2( max, maxi, a, b );
и определить соответствующие коды "max" и "maxi", из Си можно вызывать:
MAX( a, b );
Но тогда для отладки в Си надо определить в тестовых программах:
#define MAX( a, b ) if( a < b ) a = b
и тд и тп.

Для другой архитектуры "a2a.c" и "a2b.c" будут другими, а вот "a2с.c" менять не понадобится.

Сообщение отредактировал Leka - Jun 20 2010, 14:44
Go to the top of the page
 
+Quote Post
Ynicky
сообщение Jun 20 2010, 16:28
Сообщение #117


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 26-05-05
Пользователь №: 5 422



Цитата(Leka @ Jun 20 2010, 18:41) *
То-же, что и "<<" и ">>" в Си.

Насколько я знаю, "<<" - это всегда логический сдвиг, а ">>" - либо логический либо арифметический,
в зависимости от переменной (беззнаковой или знаковой). Это так?

Николай.
Go to the top of the page
 
+Quote Post
Leka
сообщение Jun 20 2010, 17:03
Сообщение #118


Профессионал
*****

Группа: Участник
Сообщений: 1 075
Регистрация: 30-09-05
Пользователь №: 9 118



Для чисел в дополнительном коде арифметический и логический сдвиг влево - результат одинаковый.

Цитата
а ">>" - либо логический либо арифметический,
в зависимости от переменной (беззнаковой или знаковой). Это так?

Да. У меня пока только один тип "int", и поэтому подразумевается только арифметический сдвиг.

В принципе, ввести дополнительные типы несложно, но проект, судя по всему, развиваться не будет(мало участников) - поэтому не вижу смысла (сам предпочитаю "бестиповую" архитектуру).
Go to the top of the page
 
+Quote Post
Ynicky
сообщение Jun 20 2010, 17:11
Сообщение #119


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 26-05-05
Пользователь №: 5 422



Цитата(Leka @ Jun 20 2010, 21:03) *
проект, судя по всему, развиваться не будет(мало участников)

Согласен.
Go to the top of the page
 
+Quote Post
Leka
сообщение Jun 20 2010, 17:18
Сообщение #120


Профессионал
*****

Группа: Участник
Сообщений: 1 075
Регистрация: 30-09-05
Пользователь №: 9 118



На всякий случай посмотрел стандарт на ANSI C, там результат сдвига вправо знаковых чисел - зависит от реализации.

Цитата
Согласен.

Надеюсь, кое-какая польза все-таки была извлечена из этого проекта.
Go to the top of the page
 
+Quote Post

22 страниц V  « < 6 7 8 9 10 > » 
Reply to this topicStart new topic
5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 12th August 2025 - 03:41
Рейтинг@Mail.ru


Страница сгенерированна за 0.05628 секунд с 7
ELECTRONIX ©2004-2016