4-bit Processor

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

Moderator: Lavr

User avatar
VituZz
God
Posts: 1343
Joined: 13 Nov 2010 04:06

Post by VituZz »

Lavr wrote: PS. И кстати говоря (см. выше), а каково мнение джентльменов по поводу
команд IN, OUT?
Как бы эти команды не входят в минималистический набор, без них вполне можно обойтись. Предлагаю их реализацию отложить до версии 0.2 железа. :)
User avatar
Shaos
Admin
Posts: 24033
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

VituZz wrote:
Lavr wrote: PS. И кстати говоря (см. выше), а каково мнение джентльменов по поводу
команд IN, OUT?
Как бы эти команды не входят в минималистический набор, без них вполне можно обойтись. Предлагаю их реализацию отложить до версии 0.2 железа. :)
Согласен - как показывает опыт 6502 и всяких РК-86 со Специалистами - без портов жить можно ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16682
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos wrote:
VituZz wrote:
Lavr wrote: PS. И кстати говоря (см. выше), а каково мнение джентльменов по поводу
команд IN, OUT?
Как бы эти команды не входят в минималистический набор, без них вполне можно обойтись. Предлагаю их реализацию отложить до версии 0.2 железа. :)
Согласен - как показывает опыт 6502 и всяких РК-86 со Специалистами - без портов жить можно ;)
У меня есть только очень небольшое соображение contra: мне кажется, если
предполагается большая память, не доступная вся непосредственно, а только
постранично, удобнее, когда регистр страниц доступен по IN, OUT,
тогда память получается непрерывной, не так ли?

Но практически IN, OUT действительно можно впихнуть в последний
момент - это всего лишь дополнительные стробы на чтение-запись.
Хотя в прототипе они просто уже реализованы.

Насчёт префикса - мне думается, что F более удобный префикс, чем E, т.к.
однозначно отлавливается совпадением единиц.
Уточним - префикс действует только на одну команду?

NOP я предпочитаю, как 00Н (90Н у х86 для меня было просто плевком в душу).
Да так оно и логичнее "забить" NOP-ом ненужное в ПЗУ можно только нулями,
нежели единицами.
User avatar
Lavr
Supreme God
Posts: 16682
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos wrote:
Lavr wrote: Условные переходы предлагаю - только по выполнению условия.
JZ
JC
JM
А может как на пике? Skip if Zero и Skip if Not Zero?
Ну надо посмотреть как на схемотехнике отражается.
Пиковские Skip if Zero и Skip if Not Zero
и один безусловный JMР мне казались столь неудобны... :(
User avatar
VituZz
God
Posts: 1343
Joined: 13 Nov 2010 04:06

Post by VituZz »

А как вам вот это: http://www.wasm.ru/forum/viewtopic.php?id=8642?
Если баян (как вариант - боян :), пинать не более одного раза.
User avatar
Lavr
Supreme God
Posts: 16682
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

VituZz wrote:А как вам вот это: http://www.wasm.ru/forum/viewtopic.php?id=8642?
Если баян (как вариант - боян :), пинать не более одного раза.
Shaos трактует боян по-местному... :wink: но я это видел.
Я лично приветствую все рассуждения в привязке к схемам, а то абстрактно
можно нарассуждать много, но это прерогатива математиков ИМХО.
User avatar
Lavr
Supreme God
Posts: 16682
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos wrote:Я посмотрел систему команд японской поделки - разумно: 15 4-битных команд плюс ещё 16 возможных после "префикса" E - всего выходит 29. Если завести второй префикс, то команд уже будет 14+16+16=46.
Что-то это мне вдруг напомнило!!! :lol:

Code: Select all

4004 instruction set consists of 46 instructions: 

Data moving instructions. 
Arithmetic - add, subtract, increment, decrement. 
Logic - rotate. 
Control transfer - conditional (limited to current ROM), unconditional, call subroutine and return from subroutine. 
Input/Output instructions. 
Other - carry flag operations, decimal adjust, etc.
http://www.cpu-world.com/Arch/4004.html
User avatar
Lavr
Supreme God
Posts: 16682
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Как и обещал, разместил некоторые из известных систем команд 4-битных
самодельных ЦПУ здесь:
viewtopic.php?p=90363#90363
User avatar
Lavr
Supreme God
Posts: 16682
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Джентльмены, ну что-то надо решать со стеком. :roll:
Обзор систем команд показывает, что PUSH и POP зело непопулярны, кстати,
и в i4004 их тоже нет.
Поэтому вопросы такие - как аппаратно выполнить стек?
Как реализуем RET?
Может у кого есть схемотехнический пример?
Пока со всеми командами (кроме переходов) можно уложиться в 4 такта
при однофазной синхронизации.
Впрочем и переходы можно уложить в них, если вы согласны с моделью
памяти смещение-сегмент (отдельный регистр - щёлкать сегментами по 256).
У меня что-то красивых решений в схемотехнике стека пока не придумалось. :(

Пиковские Skip if Zero и Skip if Not Zero реализовать очень легко.
Это всего лишь за 4 такта увеличить программный счетчик PCL(ow).
Безусловный JMР по идее должен быть длинным, как и CALL. Обычно
их выполняют в два цикла.
Но если JMР аппаратно реализован, то условные JMР - по идее то же самое,
только с учётом флагов.
А вот CALL... он по сути JMР только надо успеть защелкнуть текущие PCL(ow)
и PCH(igh) изменяя указатель стека.
В принципе - склоняюсь к мысли VituZz-а - стек в отдельном пространстве
памяти со своим регистром-счетчиком стека, тогда и PUSH, POP сделать легче.
Отдельный корпус ОЗУ - сугубо под стек... вполне разрешимо...
User avatar
VituZz
God
Posts: 1343
Joined: 13 Nov 2010 04:06

Post by VituZz »

В книжке Щелкунова, Дианова "Микропроцессорные средства и системы" со страницы 21 есть некоторые соображения по набору регистров и системам команд. Я, как новичок в деле процессоростроения (и даже процессороэмуляции), несколько систематизировал свои знания. Если в двух словах, то стройная адресация и система команд возможны лишь начиная с 16-ти разрядов, более простые системы - результат компромиссов. Для 4-х разрядов это будут очень жестокие компромиссы. Поэтому, если компромиссов не избежать, я всё же склоняюсь к максимальной простоте нашего 4-разрядного детёныша динозавра. Если мы разрабатываем его в эмуляторе, то давайте сразу ограничимся 16-ю командами и минимальным набором регистров. Сделав работоспособную модель, можно будет её развивать дальше.
User avatar
Lavr
Supreme God
Posts: 16682
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

VituZz wrote: Если мы разрабатываем его в эмуляторе, то давайте сразу ограничимся 16-ю командами и минимальным набором регистров. Сделав работоспособную модель, можно будет её развивать дальше.
Работоспособную модель я уже сделал год назад зимой. Можешь взять её здесь,
viewtopic.php?t=9213
если есть желание, и - погонять. А можешь и доработать - она не совсем
закончена, но позволяет посмотреть реализацию узлов и команд.
Я как раз и хотел плясать не от нуля, а от "живой" модели, чтобы что-то
пробовать, приделывать и т.д.
К сожалению, у меня модель зело тормозит на ноуте 360 МГц, так что сейчас
переношу именно её в "Протеус" (У меня в модели и ПЗУ микрокоманд были на
диодных матрицах) :o .
Я тоже делаю процессор в первый раз, и навыки у меня - только от указанной
модели, на схему которой я ссылаюсь. Но она не с потолка взята, по моему
мнению, среди всего, что я рассмотрел, она довольно оптимальная, и имеет
все возможности расширения, как в развитый 4-бит, так и в 8-бит.

Впрочем, я своего мнения не навязываю, а наоборот, готов к любому
конструктивному диалогу.
User avatar
Lavr
Supreme God
Posts: 16682
Joined: 21 Oct 2009 08:08
Location: Россия

Аппаратный интерфейс

Post by Lavr »

Джентльмены, у кого-нибуть есть образец чисто аппаратной реализации какого-либо
популярного последовательного интерфейса: RS-232, SPI, FSK или чего-то
подобного?
Мне кажется недостойным атавизмом загружать память программ тумблерами
и кнопками в тот момент, когда наш процессор еще не способен загрузить
что-либо сам ввиду отсутствия программы.
User avatar
Lavr
Supreme God
Posts: 16682
Joined: 21 Oct 2009 08:08
Location: Россия

Реализация стека

Post by Lavr »

Здесь приведена схема уже проверенного на макете узла программного счётчика
и программной памяти 4-битного ЦПУ
.

Image

Видно, что без особых проблем мы сможем сделать шину команд-данных 16-разрядной.

Поскольку в прототипе стек никак не реализован, а возврат выполнен как
рестарт по фиксированному адресу, образца схемотехники стека я не имею.
Как мне кажется, аппаратный стек должен быть выполнен по такому-же принципу:
счетчик адреса стека + ОЗУ стека.

Если не использовать PUSH и POP, как в PIC, то счетчик адреса стека будет
работать только на инкремент и декремент, сохраняя в своём ОЗУ только
значения PCH(igh)-сегмента адреса и PCL(ow)-программного счётчика, который
на момент выполнения CALL, после выборки КОП CALL, уже априори содержит
адрес следующего КОП - а это и есть адрес возврата, который надо сохранить
в ОЗУ стека, и сдвинуть счетчик адреса стека на единицу.

Если у кого есть другие мысли о схемотехнике стека - готов выслушать.
User avatar
Lavr
Supreme God
Posts: 16682
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Кстати - приведу живой, зримый и убеждающий пример, почему я склонился к
4-битной конструкции. 8-битное АЛУ на NAND, в том виде, как оно уже разработано,
займёт на макетке примерно столько места, сколько выделено на приведенном
здесь рисунке.

Image

Для всего ЦПУ УЖЕ остаётся очень мало места! Поэтому я и решил пойти на 4-битный
компромисс. Конечно, решение не окончательное, но габариты нас поджимают.

PS. Можно, конечно, свернуть это в 2 корпуса 74181 (К155ИП3), но тогда зачем
весь этот огород городился? :wink: - Не спортивно... :(
User avatar
Shaos
Admin
Posts: 24033
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Аппаратный интерфейс

Post by Shaos »

Lavr wrote:Джентльмены, у кого-нибуть есть образец чисто аппаратной реализации какого-либо
популярного последовательного интерфейса: RS-232, SPI, FSK или чего-то
подобного?
SPI
Я тут за главного - если что шлите мыло на me собака shaos точка net