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

 
 
> Отдельное АЛУ, Простенькое АЛУ, отдельное от ядра для своих нужд
Golikov A.
сообщение May 19 2014, 11:39
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Всем привет!

Понадобилось чтобы для прибора управления (шевелит ножками, крутит моторами, опрашивает датчики) пользователь мог писать свои микропрограмки. Сначала в приборе был свой специализированный автомат который разбирал входной поток команд и превращал его в управляющие воздействия. Поток шел через FIFO, но сейчас захотели чтобы можно было делать циклы, и я так понимаю на этом не остановимся.

Потому вместо наращивания набора команд спец автомата думаю сразу забабахать полноценное АЛУ, выделить пользователю регистров и памяти, и путь пишет программы в машинных кодах. В целом этот велосипед уже изобрел, но хочется поглядеть-послушать на то как еще это делают. Интересует даже не столько сама реализация, а больше сколько надо команд, как сделано сравнение, как сделаны команды перехода, маскирование. Сколько надо регистров для того чтобы было комфортно и не много и так далее...

В общем я тут больше посоветоваться и послушать что умные люди скажут. Готовые ядра ставить не предлагать, это принципиально должен быть отдельный блок, который я защищу от пользовательского произвола как смогу. А любые мысли по поводу того как бы вы это сделали приветствуются!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Golikov A.
сообщение May 20 2014, 12:47
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Ну что же, будет оно все вот так.

Все регистры управления периферией у меня 32 битные, и проц. будет таким.
Программа будет лежать в 2 портовой памяти на Брамах и для процессора будет только для чтения

Оперативной памяти пользователю достанется 4, 32 битных регистра, совмещенных в единое пространство со всеми управляющими регистрами.
Будет 3 специализированных регистра, в том же пространстве памяти
1. это счетчик команд, фактически адрес очередной выбираемой из памяти команды
2. это таймер, который сбрасывается в ноль по спец команде записи в управляющие регистры, а дальше считает каждый клок вперед
3. это аккумулятор куда попадают все результаты операций сложения, вычитания, логического И и ИЛИ, этот регистр будет 33 битным, чтобы просекать переполнение, к этому регистру будут 4 флага, аккумулятор == 0, больше 0, меньше 0, переполнение.
Все входные сигналы на схему собраны в 32 битный регистр в том же пространстве, для этого регистра предусмотрены прерывания

Основные операции, которых будет большинство это задание констант и ожидание заданное время, потому память программы будет 8192 слова по 64 бита. И все команды будут иметь фиксированный вид 32 бита - код операции и адреса операндов, и 32 бита константа. Удобно выжать 16536 слов памяти в 48 бит не удалось, а память хочется иметь цикличную, чтобы после последнего адреса, она прыгала на 0, потому решил не жаться и сделать 8192 слова по 64 бита.

в целом команды будут иметь общий вид
[code] [addr1][addr2][constant]
code - это код
addr1, addr2 - это адреса данных/операндов:
0 - константа из команды, N - регистр из общего адресного пространства


команды будут
0. NOP
1. задать значение в addr1 из addr2
2. задать значение в периферию из addr2, со сбросом таймера
(тут на самом деле серия команд, которые меняют комбинации регистров управления, но все они делают одно, задают значения и сбрасывают таймер)
3. ожидать пока таймер не превысит значение из addr2
4. вычесть, прибавить, ИЛИ, И данных из addr1 c данными из addr2, результат в аккумулятор
5. выполнить переход по данным из addr2, если выставлен флаг регистра аккумулятора (какой флаг выбирается маской)

после каждой команды кроме команд перехода будет выбираться следующая команда, неизвестные или неправильные команды будут останавливать процесс выбора команд и выставлять флаг ошибки команды, который отображается в регистре входных сигналов.

Прерывания:
будут 4 прерывания, все они работают с регистром входных сигналов, для них можно задать
1. полярность входа (какой уровень активный)
2. маску (какие сигналы генерируют прерывание)
3. активный уровень прерывания, 0 или 1 вызывает прерывание
4. адрес перехода, вектор прерывания фактически
5. разрешение прерывания

прерывание <= |((вход ^ полярность) & маска);

Если прерывание разрешено и его значение равно активному уровню, схема переходит по заданному вектору, и снимает разрешение всех прерываний. Адрес с которого совершен переход сохраняется в спец регистре.

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

С прерывания не все гладко на самом деле, возможно стоит добавить команду выход из прерывания в которой будет возвращаться разрешения прерываний. Потому что иначе можно разрешить прерывание перед возвращением, и если оно уже стоит улететь в новое прерывание, с адресом возврата старого прерывания, а не основной программы.

В текущей архитектуре это не нужно, но наверное стоит проработать....
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Golikov A.   Отдельное АЛУ   May 19 2014, 11:39
- - Alex77   Цитата(Golikov A. @ May 19 2014, 19:49) В...   May 19 2014, 14:13
|- - Lmx2315   ..в приложении самоделка ни на что не претендующая...   May 19 2014, 15:06
|- - Pavia   Для Lmx2315: Цитата(Lmx2315 @ May 19 2014, 23...   May 19 2014, 22:19
|- - Serhiy_UA   Тема интересная, но в конечном итоге все может увя...   May 20 2014, 01:14
- - alman   Цитата(Golikov A. @ May 19 2014, 19:49) В...   May 19 2014, 16:42
|- - RobFPGA   Приветствую! Цитата(alman @ May 19 2014,...   May 19 2014, 17:22
|- - alman   Цитата(RobFPGA @ May 20 2014, 01:32) А см...   May 19 2014, 18:54
|- - iosifk   Цитата(alman @ May 20 2014, 03:04) Если к...   May 20 2014, 00:58
|- - alman   Цитата(iosifk @ May 20 2014, 09:08) Проце...   May 20 2014, 04:29
|- - RobFPGA   Приветствую! Цитата(iosifk @ May 20 2014...   May 20 2014, 05:16
- - Golikov A.   Спасибо ответившим. Спасибо за пример, обязательно...   May 20 2014, 01:06
- - Golikov A.   Большой ФСМ - однозначно определен, и придется его...   May 20 2014, 01:53
|- - RobFPGA   Приветствую! Цитата(Golikov A. @ May 20 ...   May 20 2014, 03:49
- - Golikov A.   В целом я определился с тем какого вида я хочу пос...   May 20 2014, 07:23
|- - Serhiy_UA   Цитата(Golikov A. @ May 20 2014, 14:33) Е...   May 20 2014, 08:00
|- - Timmy   А я сделал специализированный процессор для неслож...   May 20 2014, 15:08
|- - Serhiy_UA   к Golikov A. Все же, какая целью этой работы. Похо...   May 21 2014, 01:50
||- - Timmy   Цитата(Serhiy_UA @ May 21 2014, 10:00) В ...   May 22 2014, 10:12
||- - Serhiy_UA   к Timmy Спасибо за информацию. Не совсем понял, ас...   May 23 2014, 01:17
||- - Timmy   Цитата(Serhiy_UA @ May 23 2014, 09:27) Не...   May 28 2014, 04:23
|- - Кнкн   Цитата(Timmy @ May 20 2014, 22:18) сам пр...   May 21 2014, 02:16
- - Golikov A.   Забавный процессор, и всего 700 лутиков. С temp пр...   May 21 2014, 02:58
|- - Serhiy_UA   Цитата(Golikov A. @ May 21 2014, 11:08) В...   May 21 2014, 03:43
|- - iosifk   Цитата(Golikov A. @ May 21 2014, 11:08) Т...   May 21 2014, 10:38
- - Golikov A.   ну так интерпретатор и есть процессор%). Череда у...   May 21 2014, 03:51
|- - RobFPGA   Приветствую! Цитата(Golikov A. @ May 21 ...   May 21 2014, 04:35
|- - Alex77   Цитата(Golikov A. @ May 21 2014, 12:01) н...   May 21 2014, 05:40
- - Golikov A.   1 микросекунда на команду, при 100 МГц основном кл...   May 21 2014, 05:30
|- - RobFPGA   Приветствую! Цитата(Golikov A. @ May 21 ...   May 21 2014, 05:36
- - Golikov A.   я может не внимательно читал, но не увидел там ком...   May 21 2014, 07:13
|- - Alex77   Цитата(Golikov A. @ May 21 2014, 15:23) я...   May 21 2014, 07:18
- - Golikov A.   понятно, спасиб... но я уже успел полюбить свой в...   May 21 2014, 07:31
- - Golikov A.   если нету ПИДа, он сам не появиться. А если есть п...   May 21 2014, 13:18


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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