Дешифрация кода команды CPU

4-битные микроконтроллеры и микропроцессоры (прошлое, настоящее, будущее)

Moderator: Lavr

User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

Схемотехника 6502 особенна тем, что каждый такт F2 он формирует обращение к шине. КАЖДЫЙ. С этим и связаны вышеописанные глюки, когда команда перехода находится на границе т.н. страниц. А "страничность" у 6502 не более чем условна: просто старший байт адреса формируется несколько иначе. Я работал с этим процом в составе Денди (клон NES). Так что знаю о нем достаточно. Чтобы не быть голословным, даю оффдоки на него. И посмотрите на диаграму:
Image
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

2_HardWareMan
Благодарю за доки! :kruto:
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

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

В этой связи, когда копал системы команд 4-битных процессоров, наткнулся
на весьма интересную зарисовку:
Когда разрабатывается процессор, одним из важных моментов является решение о его системе команд. Разработчикам хотелось, с одной стороны, ограничиться небольшим количеством элементарных команд. С другой стороны , им хотелось бы
включить в систему команд и такие, которые, не будучи элементарными, позволят, к примеру, ускорить обработку больших массивов данных.
В итоге было принято компромиссное решение. Оно заключалось в следующем.
Был составлен список всех неэлементарных команд, и каждой из них была
сопоставлена последовательность команд элементарных. Если эта
последовательность состояла из более чем N команд, то такая неэлементарная
команда вводилась в систему команд процессора.
PS. Вот здесь, кстати, тоже весьма неглупая статья о системах команд.
http://www.insidepro.com/kk/353/353r.shtml
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

А кто-нибуть имеет информацию о ПО ранних 4-битных процессоров?
Не в кодах же их программировали...
Я уже долго гуглю - 4-битные процессоры юзали обширно, а ПО как
будто и не существует.
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

У PIC-a довольно прозрачная дешифрация опкодов.
В таблице опкоды упорядочены по возрастанию. Видно, что 2 старших бита
делят систему команд на 4 группы. В рамках групп дешифрация просто очевидна.

Image

Может на такую систему команд сориентироваться? Хоть с чем-то будет совместимость...
Last edited by Lavr on 14 Apr 2011 07:52, edited 1 time in total.
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Lavr wrote:Вообще проектирование системы команд для микропроцессора получается задачей
в некотором смысле даже философской. Прямо как задача на оптимизацию
по ёмкости информационного слова.
Всё, что не заложишь в "железку", придётся изображать подпрограммами.
Что-то здесь пора бы уже двигать... а вот в какую сторону - мне так и непонятно...
Обзор всего, что я накопал по сабжу, даёт лишь один неутешительный результат:
каждый "точит", как он хочет... Совместимости с чем-то известным добиваются
крайне редко. :-?
Last edited by Lavr on 12 Jun 2011 09:48, edited 1 time in total.
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Морфинг программного кода

Post by Lavr »

Lavr wrote:Собственная компактная система команд приводит к довольно простой схемотехнике ЦПУ,
в случае, если делаем всё только на мелкой логике.
Но тогда получается вещь в себе, для которой нет ПО.
Единственный видимый компромисс - написать кросс-транслятор для тех
программ, что есть в исходных текстах
.
Наткнулся на более интересную мысль - интерпретировать команды известной
системы, к примеру К580
:

"Мимолетный забег впереди паровоза"
http://www.upweek.ru/mimoletnyj-zabeg-v ... ovoza.html
То есть, если сделать шустрый RISC собственной архитектуры с собственной
системой комманд, можно заставить его интерпретировать команды К580ВМ80.

В принципе, я такую штуку сделал...
viewtopic.php?t=9310
и мысль это неплохая, только работать это будет приемлемо, если свой RISC
потащщится на частотах 6-8 МГц, чего мне в любительских конструкциях практически
не встретилось...
(Это вобщем-то странно, т.к. эмулятор 8080 на логике позиционировался как
в 4-8 раз более быстрый, чем оригинальный кристалл...)

viewtopic.php?t=9453

PS. Но мне эта мысль представляется более перспективной, чем секционированные
БИС и "заливка" микрокоманд, хотя, если приглядеться - это вещи
практически одного порядка.
Last edited by Lavr on 12 Jun 2011 09:48, edited 3 times in total.
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

Ну, в сердце любого современного х86 процессора уже давно сидит RISC. Который интерпретирует команды х86. Так что решение вполне оправданное и современное. Но таки да, хотелось процессор на логике и чтобы шустрый. :3
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

И мне вариант с самодельным RISC уже давно нравится, а статья по ссылке меня
совсем укрепила...
Теперь всё упирается вот в какой вопрос, который я здесь уже заранее поднял:
viewtopic.php?t=9435
Lavr wrote:Ну тогда вопрос чуть полегче. Вот сделаю я АЛУ на мелкой логике:
viewtopic.php?t=9386
а как проверить, какие его предельные частотные характеристики?
Иначе говоря, как оценить его быстродействие?
АЛУ, сконструированное в этом топике мне безусловно нравится, обжалованию
не подлежит и можно его уже и делать, но как узнать его быстродействие, чтобы
"отплясывать" от его максимальной частоты дальше.

И вопрос конкретно к тебе, HardWareMan, какие предельные характеристики
РФ2, РФ4 - я на них собираюсь ПЗУ микрокоманд сделать...


PS. Обсуждение проблем и характеристик микросхем памяти вынесено в
топик:
ПЗУ и ОЗУ для ЦПУ
Last edited by Lavr on 20 Mar 2012 12:08, edited 1 time in total.
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Чтобы не быть голословным, я собираюсь танцевать вот от этого образца как от прототипа.


Источник

Я его смоделировал, он успешно работает,
viewtopic.php?t=9213
далее - расширю его до 8 бит и вделаю здешнее АЛУ.
После чего - буду посмотреть...
Shaos wrote:74F - 100 MHz (TTL)
74AC - 90 MHz (CMOS)
74ACT - 80 MHz (TTL+CMOS)
Только 155-я серия из списанных плат... :wink: Это у тебя там мешки 74F
по дешевке продаются - у меня такого здесь нет... :-?
Last edited by Lavr on 20 Mar 2012 12:09, edited 1 time in total.
User avatar
VituZz
God
Posts: 1343
Joined: 13 Nov 2010 04:06

Post by VituZz »

А! Ну, значит, я где-то пропустил правила! :) Но 555-я серия была в те годы, и 556. Да и 155, как правило, до 15МГц работоспособна. В "Орионе" мне не попадались экземпляры, не работавшие в генераторе. Тем более что в генераторе они работают как аналоговое устройство.
В критических местах можно применить К131 :). Неужто так плохо обстоят дела с наличием старой логики?
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

VituZz wrote:В критических местах можно применить К131 :). Неужто так плохо обстоят дела с наличием старой логики?
К131-я есть у меня, но в начале топика я для себя поставил ограничение
юзать только легко доставаемые в то время микросхемы. Даже в 155-й
были деффицитные позиции...
А иначе и не было смысла городить АЛУ на NAND - взять 2 4-разрядных
корпуса АЛУ 155-й серии и нефиг калбасицца...

В принципе и ПЗУ - уступка правилам... В оригинале у меня смоделировано
на дешифраторе и диодах - оно и по быстродействию выше...
Просто - одно дело - КОПИ-ПАСТ диоды, другое дело - их паять, хотя по
количеству у меня их хватит. :wink:
User avatar
VituZz
God
Posts: 1343
Joined: 13 Nov 2010 04:06

Post by VituZz »

Ну, столь сложная работа - использовать только И-НЕ - должна иметь результат и помимо for fun. Я бы не решился собирать такой аппарат даже по готовой схеме, уж очень много работы... :o
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

VituZz wrote:Ну, столь сложная работа - использовать только И-НЕ - должна иметь результат и помимо for fun. Я бы не решился собирать такой аппарат даже по готовой схеме, уж очень много работы... :o
Поэтому я и стараюсь излишне не усложнять и ориентируюсь на прототип
априори весьма компактный. Когда железка начинает работать, расширять
её куда приятней и веселее... :roll:

Только И-НЕ - мы эту жесть отбросили сразу...
А пользы и fun я уже и в процессе вижу много. Я никогда не конструировал
процессоров, но рассмотрев все варианты, пришел к выводу, что это осуществимо.
А потом - сначала всё-равно будет модель в Протеусе. Если заработает - дальше
будем посмотреть. Во всём этом уже fun-а целый пуд! :kruto:

Вобщем-то основная идея проекта - вот какая: попробовать показать,
что и во времена Микро 80 можно было сделать простой и быстрый RISC
процессор на мелкой логике
. А чтобы это не было ненужной вещью в себе,
сделаем его интерпретатором команд К580ВМ80 и этим получим программную
совместимость, что позволит использовать наработанный софт и обеспечить
очевидную пользу такого изделия.
User avatar
Stan
Banned
Posts: 397
Joined: 04 Jan 2013 10:09
Location: 95.24.178.158

Post by Stan »

Lavr wrote:...регистровый пул схемотехнически
удобно сделать 8-разрядными. В этом случае программный счетчик получится как PC(Low)
и PC(Hi). Младший - указатель в странице 256 байт, старший - по сути перключатель
страниц (или банков - как в микроконтроллерах).
Команды удобно выровнять, скажем, на 2 байта. В этом случае PC(Low) и PC(Hi) загружаются
раздельно, а одновременно на шину выставляются только в случаях вызовов и переходов.
Если судить по блок-схеме 6502
Image
взятой вот отсюда: https://chessprogramming.wikispaces.com/6502,
6502 может пропускать часть программного счетчика через сумматор, чего Вы почему-то сделать не решаетесь.
Отсюда 6502 может легко выполнить относительный переход типа $ + N, благодаря удачной внутренней шинной структуре, а i8080, который пропускает РС лишь через "схему инкремента-декремента" такого сделать не может.
Отсюда, видимо, и методы адресации у 6502 более развиты, в силу чего он и соперничает успешно с i8080 даже на меньших частотах.

Кстати, столь часто упоминаемая здесь PDP-8 тоже умеет ведь выполнить $ + N, или нет?