|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Author |
Message |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
А кто в принципе сталкивался - как часто используется в наших программах рекурсия?
Размышления вокруг TMS1000 в итоге привели меня к следующему собственному выводу,
что б ольшая глубина вложения подпрограмм, пожалуй, полезнее наличия возможности рекурсии.
Тем более, что с одной ячейкой стека ни о какой рекурсии и говорить-то не приходится...
Другое дело, что у безстековой машины вся программа должна храниться в ОЗУ, а не в ПЗУ.
А вот тут и проходит тонкая граница между удобством и схемотехническим нищебродством...
PS. А вот тут я думал было, что просадился в размышлениях... Ан - нет!... Но уж больно механизм хитрозадумчивый!
_________________ iLavr
|
13 May 2013 06:33 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Получается упростить и очень даже круто! Собственно, я сегодня над этой идеей и думал,
пока про классификацию "Спецтрумов" спорили...
Выходит так, что аппаратно, более того что я уже нарисовал, и добавлять-то ничего не надо
практически!
Но меня смущает получающаяся система команд...
Как вы считаете, не будет ли слишком дикой, к примеру, такая команда:
загрузить сразу два регистра, выполнить над ними тут же одну из операций АЛУ, и результат - поместить в один из них?
И всё это в одном цикле за 4 такта?
В терминах 580ВМ80 - выглядит очень непривычно... даже не могу аналога мнемоники подобрать...
_________________ iLavr
|
01 Jun 2013 21:59 |
|
|
VituZz
God
Joined: 13 Nov 2010 04:06 Posts: 1345
|
Я над этим тоже раздумывал некоторое время. Но только за один такт - по фронту загрузить нужные "приёмники" все сразу, по спаду - выгрузить результат. Но, блин, никак не получается посидеть над идеей достаточное количество времени, может, это и хрень полная ...
П.С. А ведь теоретически выгрузку предыдущего результата можно совместить с загрузкой следующих данных в "приёмники"...
--------
Ширина шины микрокоманд, как мне кажется, достаточно дешёвый ресурс. Нужно "переложить на её плечи" как можно больше работы в схеме.
|
03 Jun 2013 05:59 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Виталий, я сначала решал более нищебродскую задачу - сократить 2 микрухи ОЗУ
до одной.
Но все мучения подсказали мне - RISC не получится так, а CISC - усложнит мне
устройство управления и синхронизации, для разных длин команд.
Сейчас у меня всё четко аппаратно уложилось в один цикл - FETCH+ВЫПОЛНЕНИЕ.
Я набросал систему команд и оказалось, что похоже на PDP-8, кроме вот таких "диких"
команд...
Раз уж я не смог ужаться до 1 микрухи ОЗУ, решил юзать обе ОЗУ - на полную!
И оказалось - что аппаратно больше НИЧЕГО добавлять не надо!
Получается на первый взгляд всё очень удобно аппаратно...
Конечно, микрокоманды переписать придется и цепи микропрограммного
управления пересмотреть.
Но из тупика я вроде вышел - помогла фраза из текстов про PDP-8 - "максимально использовать
то, что даже для этой цели не предназначено".
Не дословно - но мысль такая.
Но прежде чем дальше биться лбом в открытые двери хочу "пощупать" команды PDP-8,
чтобы оценить свою систему команд.
_________________ iLavr
|
03 Jun 2013 12:59 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Потому что схема была вот такая:
Я "увольняю" теперь БЛОК РОН и Селектор регистра ОН.
Вместо них будет - второй регистр " В" - на втором входе АЛУ.
На первом - аккумулятор или - " А".
Больше регистров ОН в ЦПУ - не будет! Очень по нищебродски, как я и стремился...
У PDP-8 - один аккумулятор " АС" - и ей " выразительности" хватает.
Но раз у меня 4-битник, регистров будет два - " А" и " В", чтобы "выхватывать" байт,
или сохранять байт.
_________________ iLavr
|
03 Jun 2013 13:09 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Раздумывая над системой команд PDP-8, пришел к выводу, что такая команда просто бестолковая,
хотя и всё это и получется аппаратно в одном цикле за 4 такта...
По сути это:
А вот загрузить сразу два регистра - это команда вполне полезная...
_________________ iLavr
|
04 Jun 2013 11:46 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Поскольку схема практически вырисовалась - остался последний вопрос - с прерываниями.
Поскольку я заменил аппаратно способ вызова подпрограмм, то оказалось, что аппаратно
прерывания почти релизованы, если ориентироваться на способ PDP-8 и некоторых
микроконтроллеров.
Прерывание - вызывает переход на адрес 000Н с сохранением адреса возврата.
А у меня Reset PC и так уже микропрограммно управлять можно.
Разве что можно добавить 4-битный регистр, запоминающий прерывания и
определяющий их приоритеты.
То есть, при аппаратном переходе на адрес 000Н с сохранением адреса возврата,
надо будет прочитать этот регистр, перейти на обслуживание нужного прерывания и
сбросить его бит.
Программно можно ввести аналог RST0 (или BRK).
Только вот теперь я думаю перед полной "сборкой" схемы, наверное, лучше написать
эмуляцию получающейся системы команд и попробовать в ней попрограммировать,
чтобы не конструировать зря железо, которое работает бестолково...
_________________ iLavr
|
14 Jun 2013 08:47 |
|
|
tihsasha1967
Junior
Joined: 08 Jan 2014 02:08 Posts: 6 Location: Ленинградская обл
|
Хоть проект вроде заброшен и топик-стартер заинтересовался EDUC-8, но всё же.
Первая версия проекта 4_Bit_CPU работает вроде без ошибок.
А вот после внесения в схему дешифратора и естественно изменения прошивки
нижней ПЗУ микрокоманд команда LIT выполняется не правильно.
Во время выполнения команды нет сигнала -E DATA INSTR.
Нет выборки данных инструкции и в аккумулятор всегда заносится 0FFh.
Для устранения этого надо в нижнюю ПЗУ микрокоманд
(файл ROM_12.bin) записать с адреса 04: 65 65 65 17. Сейчас там 04: 15 15 15 17.
И ещё появилась ошибка при выполнении команд JUMPL, JUMPG и JUMPE.
Первоначально сигнал Reset регистра Segment Reg формировался кнопкой Reset,
а сейчас во время выполнения этих команд он сброшен.
Теперь есть желание "прикрутить" АЛУ.
|
08 Jan 2014 02:54 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Топик-стартер заинтересовался , чтобы посмотреть, как проще реализовать в схеме косвенную адресацию, ибо без неё работать очень неприятно. Топик-стартеру нужен некоторый опыт архитектуры НЕ-Интелловских процесоров. Насколько я помню, во второй версии я ПЗУ не правил до конца. Я понял, что прошивку придётся многократно править, а правил я её в Ворде, что довольно трудоёмко, поэтому возникла мысль упростить этот процесс и сделать редактор прошивки с помощью мыши... Но этот вариант так пока и не случился...
И я хотел это сделать в перую очередь! Но вышло вот как: то АЛУ, которое я сгоряча
сконструировал на вентилях - слишком избыточно для этой конструкции.
Конструкция должна быть простой и доступной, а опыт EDUC-8 и РDР-8 показал мне:
задачи можно решать более простым набором команд.
Я не буду приделывать в эту конструкцию ни 74181, ни его аналог К155ИП3.
Но проект открытый - можете использовать его так, как сочтёте для себя интересным...
_________________ iLavr
|
08 Jan 2014 08:33 |
|
|
tihsasha1967
Junior
Joined: 08 Jan 2014 02:08 Posts: 6 Location: Ленинградская обл
|
Спасибо за этот проект. Хочу ребятам на кружке перед показом работы 580вм80
показать такой принцип работы. Всё довольно просто.
|
08 Jan 2014 09:32 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Вам спасибо - что нашли полезное применение промежуточному результату этого проекта!
С этой целью АЛУ было бы, безусловно, полезно!
Но, к сожалению, в моей версии Протеус готовая модель 74181 отсутствует...
Иначе было бы нетрудно "прикрутить" его, как я показывал на схеме здесь ранее.
Но либо подсхему АЛУ собирать, как автор APOLLO181, либо писать его динамическую
библиотеку!
Желаю Вам удачи! Ребятам, безусловно, полезно это посмотреть для понимания принципов
работы процесора, хотя я в этой схеме руками и ногами пытаюсь оттолкнуть от себя
"Интелловские" привычки...
_________________ iLavr
|
08 Jan 2014 09:45 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
В общем с косвенной адресацией я разобрался - это будет стОить схемотехнически
3 корпуса мультиплексоров (ну или 6 корпусов 155ЛА8, если по-нищебродски)...
Но вот один момент я никак приемлемо для себя разрешить не могу...
И проблема вот в чем:
Процессор 4-битный, а память - 8-битная.
Это с одной стороны неплохо, т.к. одновременно можно считать
4 бит КОП + 4 бит Данное;
4 бит КОП + 4 бит Адрес;
4 бит Данное + 4 бит Данное;
4 бит Адрес + 4 бит Адрес;
Но вот когда идёт запись в память:
4 бит ???? + 4 бит Данное;
Внутренности 4-битные -> на 8 битную шину данных при записи можно выставить только
4-битное число по одному адресу.
А вот что выставлять в старший ниббл? При записи с ним ведь что-то да произойдёт!
Нельзя записать в 8 битную память только младший ниббл!
Пока вижу только одно не элегантное решение. Запись в память проводить как цикл:
чтение-модификация-запись. Т.е. старший ниббл считывать и обратно записывать, вместе с
младшим... Но это выглядит так бестолково...
_________________ iLavr
|
16 Jan 2014 14:21 |
|
|
AIS
Novelist
Joined: 30 Nov 2013 05:04 Posts: 32 Location: 83.149.47.40
|
Чем не подходят однобитные м.сх ОЗУ?
Недавно затарился КР537РУ3А - однобитная статика, 4кбит. Отдают за копейки. Уж на что чип-дип грабительский могазин, даже они по 7руб. такие отдают.
или КР537РУ13 - четырехбитная.
Из однобиток можно набрать сколько нужно разрядов, чтобы и КОП и данные и адрес одним махом читать.
|
16 Jan 2014 15:24 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Тем, что, собственно говоря, поздно что-либо менять, т.к. вся концепция довольно
четко проработана в RISC - стиле.
Есть и 4-битные ОЗУ, но тут весь смысл в том, что для упрощения мы одновременно
получаем 4 бит КОП + 4 бит Данное одним обращением к памяти.
То есть, тип ОЗУ не повлияет на общую парадигму конструкции.
_________________ iLavr
|
16 Jan 2014 16:01 |
|
|
AIS
Novelist
Joined: 30 Nov 2013 05:04 Posts: 32 Location: 83.149.47.40
|
Я хотел сказать: Берем две четырехбитных памяти. Считывание одновременно из двух - 8 бит. Запись только в одну. Тогда не надо будет делать: "старший ниббл считывать и обратно записывать, вместе с
младшим..."
Тоесть для считывания такая память будет восьмибитной - адреса обеих м.сх памяти объединяем, данные - старший ниббл снимаем с одной, младший с другой. По сигналу записи память переконфигурируется а четырехбитную: данные с двух м.сх объединяем в четырехбитную шину , для выбора конкретной м.сх памяти используется младший бит адреса, тогда четные адреса будут записываться в одну м.сх, а нечетные в другую.
Соответственно при считывании записанных таким образом данных в восьмибитном режиме получим содержимое сразу двух идущих подряд адресов. Получим на каждом четном адресе КОП, на каждом нечетном данные.
Как вариант при записи можно выбирать одну из двух м.сх памяти старшим битом адреса. Тогда все КОП будут с первой половине адресного пространства, а все данные во второй половине.
Last edited by AIS on 17 Jan 2014 01:25, edited 1 time in total.
|
17 Jan 2014 00:54 |
|
|
Who is online |
Users browsing this forum: No registered users and 6 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|