|
|
  |
Свои процессоры, Разработка своих процессоров со своей системой команд |
|
|
|
Jun 9 2010, 16:29
|
Участник

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

|
Исправил несколько ошибок. Проверил АЛУ без SMUL (пока нет), load/store. Николай.
Прикрепленные файлы
rf32.rar ( 532.3 килобайт )
Кол-во скачиваний: 61
|
|
|
|
|
Jun 9 2010, 20:41
|
Профессионал
    
Группа: Участник
Сообщений: 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
|
|
|
|
|
Jun 17 2010, 09:23
|
Участник

Группа: Участник
Сообщений: 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
|
|
|
|
|
Jun 18 2010, 11:50
|
Участник

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

|
Цитата(Leka @ Jun 18 2010, 12:34)  По поводу слотов задержки в командах условных переходов. В FPGA вся память - двухпортовая, можно использовать для упреждающей выборки альтернативной инструкции из памяти программ - выигрываем 1 такт. В принципе, можно вообще обойтись без слотов задержки, как, например, в ARM-е. Тогда мы будем терять 3 слота задержки при невыполнении условия перехода (flush). Можно, конечно, сделать альтернативную выборку команд и не терять ни одного слота, переключаясь на альтернативную ветку конвейера. Но это, по моему, будет привязывать данную архитектуру только к FPGA. Как это может сочетаться с кеш, пока не знаю. Николай.
|
|
|
|
|
Jun 20 2010, 09:42
|
Участник

Группа: Участник
Сообщений: 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
|
|
|
|
|
Jun 20 2010, 14:41
|
Профессионал
    
Группа: Участник
Сообщений: 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
|
|
|
|
|
Jun 20 2010, 16:28
|
Участник

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

|
Цитата(Leka @ Jun 20 2010, 18:41)  То-же, что и "<<" и ">>" в Си. Насколько я знаю, "<<" - это всегда логический сдвиг, а ">>" - либо логический либо арифметический, в зависимости от переменной (беззнаковой или знаковой). Это так? Николай.
|
|
|
|
|
Jun 20 2010, 17:03
|
Профессионал
    
Группа: Участник
Сообщений: 1 075
Регистрация: 30-09-05
Пользователь №: 9 118

|
Для чисел в дополнительном коде арифметический и логический сдвиг влево - результат одинаковый. Цитата а ">>" - либо логический либо арифметический, в зависимости от переменной (беззнаковой или знаковой). Это так? Да. У меня пока только один тип "int", и поэтому подразумевается только арифметический сдвиг. В принципе, ввести дополнительные типы несложно, но проект, судя по всему, развиваться не будет(мало участников) - поэтому не вижу смысла (сам предпочитаю "бестиповую" архитектуру).
|
|
|
|
|
Jun 20 2010, 17:11
|
Участник

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

|
Цитата(Leka @ Jun 20 2010, 21:03)  проект, судя по всему, развиваться не будет(мало участников) Согласен.
|
|
|
|
|
Jun 20 2010, 17:18
|
Профессионал
    
Группа: Участник
Сообщений: 1 075
Регистрация: 30-09-05
Пользователь №: 9 118

|
На всякий случай посмотрел стандарт на ANSI C, там результат сдвига вправо знаковых чисел - зависит от реализации. Цитата Согласен. Надеюсь, кое-какая польза все-таки была извлечена из этого проекта.
|
|
|
|
|
  |
5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0
|
|
|