Re[5]: Свой процессор на ПЛИС
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 10.02.16 13:07
Оценка:
Здравствуйте, 0x7be, Вы писали:

0>В смысле, код контроллера или железо? Сам-то считыватель уже интегрирован в плату, так что мне надо только код написать, чтобы его подцепить.

Я имею в виду протокол, т.е. код драйвера.

0>У меня пока терминал — это настоящий терминал, то есть у процессора нет произволльного доступа к видеобуферу. Через системную шину можно побайтно посылать символы в ASCII-коде, а реализация контроллера сама их выводит и всё делает.

То есть типа порта чтоли (x86 аналог команд in/out)?

0>В теории всё просто. Но вчера реализовал эту схему, она глючит. Во-первых, работает, почему-то не со значением сдвига "80", а "82". Если 80, то текст едет по диагонали. Во-вторых, при скроллинге текст в некоторых строках размазывается по горизонтали Успел вчера нагуглить на каком-то форуме утверждение, что эта реализация ОЗУ даёт задержку в такт при чтении, видимо я это не учитываю. Сегодня попробую замедлить процесс в два раза, если руки дойдут

Может выравнивание какое? Видеобуферы часто имеют такую "особенность", когда в конце каждой строки есть несколько байт для выравнивания, которые не отображаются на экране.
[КУ] оккупировала армия.
Re[6]: Свой процессор на ПЛИС
От: 0x7be СССР  
Дата: 10.02.16 13:21
Оценка:
Здравствуйте, koandrew, Вы писали:

K>То есть типа порта чтоли (x86 аналог команд in/out)?

Memory-mapped IO. Ячейка с адресом FC00 зарезевирована под терминал. Запись в неё посылает символ в терминал, считывание читает символ с клавиатуры.
Это временное решение, в будущем более тесно интегрирую видеоконтроллер с шиной, а логику терминала перенесу в BIOS, которого пока нет.


0>>В теории всё просто. Но вчера реализовал эту схему, она глючит. Во-первых, работает, почему-то не со значением сдвига "80", а "82". Если 80, то текст едет по диагонали. Во-вторых, при скроллинге текст в некоторых строках размазывается по горизонтали Успел вчера нагуглить на каком-то форуме утверждение, что эта реализация ОЗУ даёт задержку в такт при чтении, видимо я это не учитываю. Сегодня попробую замедлить процесс в два раза, если руки дойдут

K>Может выравнивание какое? Видеобуферы часто имеют такую "особенность", когда в конце каждой строки есть несколько байт для выравнивания, которые не отображаются на экране.
Не, буфер я сделал без выравнивания. Полагаю, что проблемы исключительно с таймингом при работе с памятью.
Re: Свой процессор на ПЛИС
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 14.02.16 00:33
Оценка:
Здравствуйте, 0x7be, Вы писали:

А можно тебя попросить выложить вот эту схему в бОльшем разрешении, чтобы её можно было прочитать?
[КУ] оккупировала армия.
Re[2]: Свой процессор на ПЛИС
От: 0x7be СССР  
Дата: 14.02.16 08:23
Оценка: 2 (1)
Здравствуйте, koandrew, Вы писали:

K>А можно тебя попросить выложить вот эту схему в бОльшем разрешении, чтобы её можно было прочитать?

Может быть проще сделать: я вышлю тебе файл от Logism с этой схемой? Сам симулятор есть в свободном доступе, весит всего-ничего.
Скинь е-мейл, куда послать.
Re[3]: Свой процессор на ПЛИС
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 14.02.16 12:22
Оценка:
Здравствуйте, 0x7be, Вы писали:

0>Может быть проще сделать: я вышлю тебе файл от Logism с этой схемой? Сам симулятор есть в свободном доступе, весит всего-ничего.

0>Скинь е-мейл, куда послать.

Мыло в профиле. Заранее благодарю!
[КУ] оккупировала армия.
Re[4]: Свой процессор на ПЛИС
От: 0x7be СССР  
Дата: 14.02.16 14:15
Оценка: 3 (1)
Здравствуйте, koandrew, Вы писали:

K>Мыло в профиле. Заранее благодарю!

Отправил.
Re: Свой процессор на ПЛИС
От: Mishka Норвегия  
Дата: 15.02.16 17:20
Оценка:
Здравствуйте, 0x7be, Вы писали:

0>Коллеги,


0>я уже писал до этого о том, что сделал свой виртуальный процессор и хотел бы реализовать его в железе.
Автор: 0x7be
Дата: 11.01.16


Зачем?
Re[2]: Свой процессор на ПЛИС
От: 0x7be СССР  
Дата: 15.02.16 18:10
Оценка:
Здравствуйте, Mishka, Вы писали:

0>>я уже писал до этого о том, что сделал свой виртуальный процессор и хотел бы реализовать его в железе.
Автор: 0x7be
Дата: 11.01.16

M>Зачем?
Just4lulz.
Re[3]: Свой процессор на ПЛИС
От: qwertyuiop Российская Империя  
Дата: 16.02.16 07:08
Оценка:
Здравствуйте, 0x7be, Вы писали:

M>>Зачем?

0>Just4lulz.

Но все равно в нем должна быть какая-то суперность-пуперность. В чем она?
Я отвечаю за свои слова, а не за то как вы их интерпретируете!
Re[4]: Свой процессор на ПЛИС
От: 0x7be СССР  
Дата: 16.02.16 07:17
Оценка:
Здравствуйте, qwertyuiop, Вы писали:

0>>Just4lulz.

Q>Но все равно в нем должна быть какая-то суперность-пуперность. В чем она?
В том что его с нуля придумал я
Разве это не круто?
Re[5]: Свой процессор на ПЛИС
От: qwertyuiop Российская Империя  
Дата: 16.02.16 08:39
Оценка:
Здравствуйте, 0x7be, Вы писали:

Q>>Но все равно в нем должна быть какая-то суперность-пуперность. В чем она?

0>В том что его с нуля придумал я
0>Разве это не круто?

Не очень. Для крутости могу подкинуть идею. Я давно думал, что среди различных типов операндов не мешало бы ввести "сокращенные константы". Обычные константы занимают целое слово и требуют для чтения отдельного цикла, а сокращенные можно вставить в код команды. Наиболее часто используемые константы — это "единица, остальные нули", "N единиц, 16-N нулей", а также их инверсии. Их можно закодировать 6-ю разрядами: 4 разряда — номер бита (например единицы, при остальных нулях), 1 разряд — тип константы (один из двух описанных), третий — инверсия полученного числа.

Наличие таких операндов позволило бы сократить систему команд, удалив такие как инкремент/декремент, проверка бита в слове, установка/очистка бита и т.п.
Я отвечаю за свои слова, а не за то как вы их интерпретируете!
Отредактировано 16.02.2016 10:08 qwertyuiop . Предыдущая версия .
Re[6]: Свой процессор на ПЛИС
От: 0x7be СССР  
Дата: 16.02.16 12:00
Оценка:
Здравствуйте, qwertyuiop, Вы писали:

Q>Не очень. Для крутости могу подкинуть идею. Я давно думал, что среди различных типов операндов не мешало бы ввести "сокращенные константы". Обычные константы занимают целое слово и требуют для чтения отдельного цикла, а сокращенные можно вставить в код команды. Наиболее часто используемые константы — это "единица, остальные нули", "N единиц, 16-N нулей", а также их инверсии. Их можно закодировать 6-ю разрядами: 4 разряда — номер бита (например единицы, при остальных нулях), 1 разряд — тип константы (один из двух описанных), третий — инверсия полученного числа.

Q>Наличие таких операндов позволило бы сократить систему команд, удалив такие как инкремент/декремент, проверка бита в слове, установка/очистка бита и т.п.
А оно точно даст выгоду хоть в чем-то? Мне пока это не очевидно. Сокращение системы команд самоцелью не является. Из того, что я понял о философии RISC, её плюс в том, что схема управляющего устройства для такого набора команд существенно проще и быстрее за счет того, что набор команд становится меньше и проще. Ты же предлагаешь идею, которая с одной стороны пытается сократить набор команд, но достичь этого за счёт усложнения логики декодирования команды, т.е. комбинируем худшее из RISC и CISC. Где я ошибаюсь?
Re: Свой процессор на ПЛИС
От: UberPsychoSvin  
Дата: 16.02.16 12:05
Оценка:
Здравствуйте, 0x7be, Вы писали:
0>Ну, во-первых, просто похвастаться и поделиться радостью!
КРУТЬ!

А змейку под этот проц можно сделать?
Re[2]: Свой процессор на ПЛИС
От: 0x7be СССР  
Дата: 16.02.16 12:07
Оценка:
Здравствуйте, UberPsychoSvin, Вы писали:


UPS>КРУТЬ!

UPS>А змейку под этот проц можно сделать?
Для змейки надо доделать в терминале функцию переноса курсора в произвольное положение (или произвольный доступ к видеобуферу).
В остальном всё можно.

Кстати, спасибо за хорошую идею, надо будет написать такую программу чисто для проверки
Re[5]: Свой процессор на ПЛИС
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 16.02.16 18:09
Оценка:
Здравствуйте, 0x7be, Вы писали:

0>Отправил.

Спасибо! А можно ещё ликбезглоссарий по акронимам? А то я что-то плаваю во всех этих BGU, BGR, EOM, TJC и т.д.
[КУ] оккупировала армия.
Re[6]: Свой процессор на ПЛИС
От: 0x7be СССР  
Дата: 16.02.16 19:56
Оценка: 5 (2)
Здравствуйте, koandrew, Вы писали:

K>Здравствуйте, 0x7be, Вы писали:


0>>Отправил.

K>Спасибо! А можно ещё ликбезглоссарий по акронимам? А то я что-то плаваю во всех этих BGU, BGR, EOM, TJC и т.д.

Поля микрокода:
BMS — Bus Master Selector. Идентификатор устройства, которое на данном такте вещает на шину процессора своё значение.
BSS — Bus Slave Selector. Идентификатор устройства, которое на данном такте читает из шины процессора значение в себя.
Коды BMS/BSS:
0-31 — согласно таблице "ЦПУ Блоки".
32 — номер устройства берется из поля машинного слова команды Register 1
64 — номер устройства берется из поля машинного слова команды Register 2

ALUOP — код операции АЛУ. См. лист "АЛУ".
TJC — флаг Test Jump Condition. Если == 1, то включается логика условного перехода, использующая поле JM.
JM — Jump Mask. Трех-битовая маска, которая при TJC == 1 накладывается на значение регистра CF. Принцип такой: если операция (JM and CF) даёт нулевое значение, то генерируется сигнал EOM, т.е. выполнение микрокода для данной команды обрывается и вычитывается следующая команда. Если ненулевое, то выполнение микрокода команды продолжается.
FETCH — вычитать следующее слово из памяти по регистру IP и поместить его в внутренний регистр управляющего устройства DATA (адрес на шине — 1E). Применяется двухсловными командами, которые во втором слове содержат аргумент (константа или адрес).
EOM — End Of Microcode. Бит, которые генерирует сигнал на выборку следующей команды и сброс счётчика микрокода.

Схемы:
BGU — Bus Gate Unit. Схема, которая управляет подключением устройства к внутренней шине процессора. На вход получает свой идентификатор и управляющие сигналы шины. Пропускает сигналы от/к шине в соответсвии с тем, как шина обращается к устройствам (т.е. если BMS = идентификатор, то выводит на шину значение, если BSS = идентификатор, то читает из шины).
BGR — BGU + 16-битный регистр.
CR-8/16 — регистр-счётчик (8 и 16 бит, соответственно).

Лист "Система команд", расшифровка аргументов:
R1, R2 — обобщённое название регистра. Тут терминологическая путаница, т.к. есть конкретные регистры R1 и R2, но тут подразумевается "первый аргумент-регистр в команде" и "второй аргумент-регистр в команде"
const — слово-константа.
addr — слово-константа, которая трактуется как адрес.

Вроде всё осветил. Если что ещё — спрашивай
Отредактировано 16.02.2016 21:33 0x7be . Предыдущая версия .
Re[7]: Свой процессор на ПЛИС
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 16.02.16 20:57
Оценка:
Здравствуйте, 0x7be, Вы писали:

0>Вроде всё осветил. Если что ещё — спрашивай

Ещё раз спасибо! И ещё пара вопросов:
1. Я правильно понимаю, что весь этот огород с отдельными входами-выходами в подмодулях нужен из-за необходимости обхода ограничения Logisim?
2. Я заметил, что у тебя АЛУ выполняет все операции сразу. Мне это кажется неэффективным с точки зрения расхода электричества, тем более, что эта проблема легко устраняется добавлением демультиплексора на вход первого операнда. Или у тебя есть какие-то веские причины так не делать?
[КУ] оккупировала армия.
Re[8]: Свой процессор на ПЛИС
От: 0x7be СССР  
Дата: 16.02.16 21:32
Оценка: 2 (1)
Здравствуйте, koandrew, Вы писали:

K>Ещё раз спасибо! И ещё пара вопросов:

K>1. Я правильно понимаю, что весь этот огород с отдельными входами-выходами в подмодулях нужен из-за необходимости обхода ограничения Logisim?
Да. Logisim не позволяет в подсхеме иметь контакты "ввод-вывод". Либо ввод, либо вывод. Пришлось обходить.
В версии 2.2 я заменил большинство этих схем парой демультиплексор-мультиплесор. Оно не так наглядно, зато симуляция быстрее работает.
В VHDL-версии процессора я тоже реализовал схему с (де)мультиплексором.

K>2. Я заметил, что у тебя АЛУ выполняет все операции сразу. Мне это кажется неэффективным с точки зрения расхода электричества, тем более, что эта проблема легко устраняется добавлением демультиплексора на вход первого операнда. Или у

тебя есть какие-то веские причины так не делать?
Так сделано ради простоты. Расход электричества — последнее, что меня волнует
Re[9]: Свой процессор на ПЛИС
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 16.02.16 22:13
Оценка: 2 (1)
Здравствуйте, 0x7be, Вы писали:

0>Да. Logisim не позволяет в подсхеме иметь контакты "ввод-вывод". Либо ввод, либо вывод. Пришлось обходить.

0>В версии 2.2 я заменил большинство этих схем парой демультиплексор-мультиплесор. Оно не так наглядно, зато симуляция быстрее работает.
0>В VHDL-версии процессора я тоже реализовал схему с (де)мультиплексором.
Ясно

0>Так сделано ради простоты. Расход электричества — последнее, что меня волнует

Понятно Мне просто сразу в глаза бросилось — я тут недавно только воевал за энергопотребление, потому у меня теперь нюх на такие штуки
[КУ] оккупировала армия.
Re[7]: Свой процессор на ПЛИС
От: qwertyuiop Российская Империя  
Дата: 17.02.16 06:54
Оценка:
Здравствуйте, 0x7be, Вы писали:

Q>>Наличие таких операндов позволило бы сократить систему команд, удалив такие как инкремент/декремент, проверка бита в слове, установка/очистка бита и т.п.


0>А оно точно даст выгоду хоть в чем-то? Мне пока это не очевидно.


Как минимум, оно дает выгоду в быстродействии: для считывания константы не требуется еще раз обращаться к памяти.

0>Сокращение системы команд самоцелью не является.


...после чего ты начинаешь рассказывать о преимуществах RISC

0>Из того, что я понял о философии RISC, её плюс в том, что схема управляющего устройства для такого набора команд существенно проще и быстрее за счет того, что набор команд становится меньше и проще. Ты же предлагаешь идею, которая с одной стороны пытается сократить набор команд, но достичь этого за счёт усложнения логики декодирования команды, т.е. комбинируем худшее из RISC и CISC. Где я ошибаюсь?


RISC понятие относительное и используется часто лишь в рекламных целях, в слове ARM буква R тоже означает RISC, однако система команд там отнюдь не простая. Кстати, там тоже есть сокращенные константы, причем более сложные: там в качестве константы может быть набор единиц и нулей, у которых "расстояние" между крайними единицами не превышающей 8 бит, этот набор может быть помещен в любое место в 32-разрядном слове.

Что же касается декодирования, то декодировать придется не команду, а операнд, самих же команд будет меньше, например не потребуются инкремент и декремент — они заменяются на сложение с единицей. А операнд все равно надо декодировать, у тебя же наверное есть поле где указывается номер регистра, а также находятся ли данные в самом регистре или к ним надо обращаться косвенно через адрес. Просто в тип операнда добавится еще одна возможность: он может быть сокращенной константой.
Я отвечаю за свои слова, а не за то как вы их интерпретируете!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.