RUЭВМ
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.
Ноябрь 2024
ПнВтСрЧтПтСбВс
    123
45678910
11121314151617
18192021222324
252627282930 

Календарь Календарь

Последние темы
» Вити больше нет!
автор bug19 Пн Фев 20 2023, 19:54

» Собираем оригинальный Орион 128
автор bug19 Пн Фев 20 2023, 19:47

» Проблема плющеного экрана ОРИОНА
автор kanzler Пн Ноя 28 2022, 12:05

» Орион 128 и его клоны возрождение 2019-2022 год
автор kanzler Пн Ноя 28 2022, 12:03

» Электроника КР-04. Информация, документы, фото.
автор kanzler Пн Ноя 28 2022, 12:02

» Новости форума
автор kanzler Пн Ноя 28 2022, 11:52

» Орион-128 НГМД запуск 2021 года
автор matrixplus Сб Сен 10 2022, 17:36

» ПЗУ F800 для РК86
автор ведущий_специалист Сб Сен 10 2022, 10:37

» Микропроцессорная лаборатория "Микролаб К580ИК80", УМК-80, УМПК-80 и др.
автор Электротехник Вт Июл 26 2022, 19:33

» Орион-128 SD карта в Орионе
автор matrixplus Чт Июн 02 2022, 09:00

» 7 Мая. День Радио!
автор Viktor2312 Чт Май 12 2022, 10:58

» Серия: Массовая радио библиотека. МРБ
автор Viktor2312 Ср Май 11 2022, 12:17

» Полезные книги
автор Viktor2312 Пн Май 09 2022, 15:07

» Орион 128 Стандарты портов и системной шины Х2
автор matrixplus Вс Май 08 2022, 23:08

» Орион-128 и Орион ПРО еще раз про блоки питания
автор matrixplus Вс Май 08 2022, 19:09

» Орион-128 Программаторы
автор matrixplus Вс Май 08 2022, 19:02

» Орион ПРО история сборки 2021 до 2022
автор matrixplus Вс Май 08 2022, 18:47

» Анонсы монет (New coin).
автор Viktor2312 Сб Май 07 2022, 23:11

» Хочу свой усилок для квартиры собрать не спеша
автор Viktor2312 Сб Май 07 2022, 19:33

» Амфитон 25у-002С
автор Viktor2312 Сб Май 07 2022, 09:38

» Майнер: T-Rex
автор Viktor2312 Вс Май 01 2022, 09:12

» GoWin. Изучение документации. SUG100-2.6E_Gowin Software User Guide. Среда разработки EDA.
автор Viktor2312 Пн Апр 25 2022, 01:01

» GoWin. Изучение документации. UG286-1.9.1E Gowin Clock User Guide.
автор Viktor2312 Сб Апр 23 2022, 18:22

» GoWin. Documentation Database. Device. GW2A.
автор Viktor2312 Ср Апр 20 2022, 14:08

» GOWIN AEC IP
автор Viktor2312 Ср Апр 20 2022, 12:08

Самые активные пользователи за месяц
Нет пользователей

Поиск
 
 

Результаты :
 


Rechercher Расширенный поиск


Тренируемся писать Софт-процессоры

Перейти вниз

Тренируемся писать Софт-процессоры Empty Тренируемся писать Софт-процессоры

Сообщение  Viktor2312 Вс Окт 04 2015, 10:47

1
Тут немного предварительных изысканий.

Эхх, надо всё таки писать, по крайней мере начинать писать свой Soft-процессор.

В общим думаю, что 32-бит для данных будет вполне достаточно.
Для команд остановимся на 40 битах, то есть всего команд может быть 256.

Верхний уровень иерархии будет в схемотехническом виде, чтобы наглядно было.
Остальные все модули и блоки на VHDL естественно.

Сначала попробую сделать простенькое, что-то, но работающее, а потом уже буду пробовать усложнять проект.

Пока всё, дальше нужно думать.

В общим пока код такой:
Спойлер:

Так же ясно, что первая команда которая точно будет, это
NOP с кодом 0x0000000000 (нет операции).

***

Пожалуй можно добавить ещё одну команду, довольно простую, которая сразу приходит на ум.

JMP
безусловный переход по адресу заданному в младших 32-разрядах команды.
0х01хххххххх

И немного дополнил код:

Спойлер:

***

Но нужно добавлять описание системы команд, начну пожалуй с NOP

Выглядеть это будет так:

when 0 => cp <= cp + 1;

Так сказать перейдём на десятичную систему, чтобы уменьшить объём кода, а то 40 ноликов и единицек, будет слишком громоздко.
И соответственно код примет вид:

Спойлер:

***

Viktor2312;832028 пишет:JMP
безусловный переход по адресу заданному в младших 32-разрядах команды.
0х01хххххххх

Нужно добавить теперь эту команду в код.

0х0100000000...0х0111111111 - это весь диапазон адресов на которые возможен переход.
То есть в десятичной системе получается 4.294.967.296 - 8.589.934.591, естественно описывать их поштучно не реально, слишком много when -ов получится аж 4.294.967.296
Поэтому опишем их одной строчкой:

when 4294967296 to 8589934591 => cp <= com(31 downto 0);

но не получается, пишет, что литерал 4294967296, и второй соответственно тоже превышает максимальное целочисленное значение.
ERROR:HDLCompiler:916 - "E:\Project\cpu1\cpu1_core.vhd" Line 37: Literal 4294967296 exceeds maximum integer value
А вот почему, понять не могу, com у нас 40 разрядный, 4294967296 только 33 разряда использует, вот придётся разбираться.
Возможно причина в разрешённом диапазоне допустимых значений определяемых этой строкой: case conv_integer(com) is
Эх, как всё сложно...

***

Перешёл на 24 бита для данных и 32 бита для команд, переписал код, и компилятор ругаться перестал.

Пока код выглядит так:

Спойлер:


Теперь нужна команда условного перехода.
Если регистр АR равен 0 (Z).
JMPZ
0x02xxxxxx переход по адресу заданному младшими 24 битами при выполнении условия.

Так же есть диапазон адресов, чтобы не было много when -ов, запишем компактной записью.
Следующим образом:
Код:

                                   -- JMPZ
when 33554432 to 50331647 => if conv_integer(ar) = 0 then
                                 cp <= com(23 downto 0);
                                 else cp <= cp + 1;
                             end if;

И теперь код выглядит вот так:

Спойлер:

***

Вот думал, что она у меня ругается немного, а я для case не добавил в конце other, дописать нужно ещё одну строчку:

when others => cp <= cp + 1;    -- cp + 1 при others

Теперь, пока код выглядит так:

Спойлер:

Viktor2312
RIP

Сообщения : 15492
Дата регистрации : 2012-08-10
Возраст : 45
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения