nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 17 Oct 2018 11:47



Reply to topic  [ 124 posts ]  Go to page 1, 2, 3, 4, 5 ... 9  Next
АЛУ на NAND 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
АЛУ на NAND

Я тут решил прикинуть, во что выльется процессор на вентилях NAND или ЛА3. Тем более, что Шаос их прикупил 100 штук, а попадалось мне высказывание, что ему и тысячи их не хватит. Ну это - смотря, что делать. Я не знаю, какие планы у Шаоса, но решил сориентироваться, во что выльется хотя бы АЛУ. Вариантов, конечно много, но я решил попробовать самый, на мой взгляд, простой.
Как пишут на одном сайте - АЛУ из учебника для ВУЗов http://www.6502.org/users/dieter/a1/a1_5.htm (там же есть примечание, что этот артефакт обычно не работает, хотя я не вижу для этого особых причин).

Image

Если это перерисовать несколько подробнее и слегка упростить, то может получиться примерно вот такой узел:

Image

Поскольку сдвиги сделаны переназначением выводов и флага переноса, а регистры особого интереса не вызывают, я попробовал смоделировать на вентилях узел, выделенный красным цветом. Ну и поскольку есть в схеме мультиплексор, то я решил, что не станет грехом использовать вентили с открытым коллектором, поскольку это упрощает мультиплексор, если использовать монтажное "ИЛИ".
Чтобы количество корпусов минимизировать, я решил сделать сначала сумматор, а потом в нем доконструировать остальные элементы, поскольку сумматор частично их будет включать. Если не применять для упрощения всякие шустрые схемы переносов, а использовать последовательный перенос, то в рамках одного разряда получилось вот что:

Image

Здесь уже есть NAND - D1, и XOR - (D1, D2, D3, D4). Остаётся изыскать OR, организовать мультиплексор и правильные полярности всех сигналов. Получилась следующая схема:

Image

В основном тут всё сильно усложняет как раз OR, но проще у меня не получилось. Возможно, кто-то предложит упрощение?
Если подсчитать число корпусов для 8-разрядного АЛУ, то получается ( 19х8 )/4+1=39 14-выводных корпусов. Серьёзная такая плата 5х8 посадочных мест.

Неплохо всё упрощается, если вентиль D1 заменить на трёхвходовый. Тогда при его запрещении = 0 (D2, D3, D4) будут работать как OR.

Image

Можно ещё 2 элемента выкинуть, если OR и XOR будут выводиться через один и тот же выход (по сути, они дублируются), но тогда на 1 элемент усложнится выборка выходного мультиплексора. В этом случае количество 14-выводных корпусов составит: ( 16х8 )/4+1=33 штуки (один корпус я добавляю для инверсии сигналов управления мультиплексором, поскольку активный уровень на выходе дешифратора обычно = 0. Дальнейшее уменьшение числа корпусов, как мне кажется, возможно при переходе на более сложную логику.


Last edited by Lavr on 04 Apr 2013 16:14, edited 3 times in total.



16 Jan 2011 10:03
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Очень неплохо получается, если взять более широкую номенклатуру логики. (Готовый XOR я специально не применял).

Image

Всего задействуется: 1/2х8=4 - ЛА3, 1х8=8 - ЛР1, 1х8=8 - ЛА8, 3 - ЛА4 (-1 лишний), 1/3х9=3 - ЛН1 (-2 лишних: 6x3=18-(2x8)=2), всего 8+8+4+3+3=26 корпусов + 4 корпуса на сдвиги = 30 корпусов.



PS. от 16.10.2011 Для тех, кто открыл этот топик впервые и не жаждет изучать 10 страниц наших размышлений, обсуждений и прочих "тёрок", АЛУ исключительно на NAND приобрело в итоге следующий вид:


Image
_______________ Рис. 7. _______________

Согласно приведённой принципиальной электрической схеме 4-битного АЛУ на вентилях NAND, назначение управляющих сигналов следующее.
Сигналы S0–S7 осуществляют выбор операции над двумя операндами, поступающими на входы операционного устройства АЛУ.
Сигналы C0-C3 коммутируют значение на входе линии флага переноса Cin операционного устройства АЛУ, и позволяют выбрать соответственно следующие значения: "0", C, "1", /C для выполнения определённых операций в АЛУ.
Сигналы K0-K2 позволяют подавать на входы первого операнда операционного устройства АЛУ полубайты собственно аргумента A, значения 0h и 0Fh соответственно.
Сигнал BN (B Negative) позволяет инвертировать значение второго операнда операционного устройства АЛУ во всех операциях вычитания.

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

Флаг Р реализован как признак чётности результата (бит 0).

В АЛУ реализуется следующая система команд, приведённая в таблице:

Image

4-битное АЛУ содержит 37 14-выводных корпусов ТТЛ микросхем.

Разработана и более законченная и работоспособная схема:

Image

Кто хочет всё-же узнать, как был достигнут этот результат - читайте весь топик. Он весьма интересен! :D


Last edited by Lavr on 28 Oct 2011 15:15, edited 7 times in total.



17 Jan 2011 08:03
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17008
Location: Colorado
Reply with quote
Post 
А что сказать? Поддерживаю :)
P.S. Вместо открытого коллектора надо буфера юзать т.к. выход 8-битный всё равно будет - я их тоже много прикупил по дешёвке ;)

_________________
:eugeek: https://twitter.com/Shaos1973


20 Jan 2011 23:39
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Shaos wrote:
Вместо открытого коллектора надо буфера юзать


Дык в дремучих машинах подсмотрел - у них, наверное, были трудности с МС тристабльных буферов, и они даже шины тянули на ОК, причем тогда писали, что притяжка к +5 резюками улучшает емкостную характеристику шины.
Но, впрочем, у меня ЛА8 хоть и не сто штук, но приемлемая коробка -
думаю вот заюзать их нафиг.


21 Jan 2011 00:01
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Shaos wrote:
Вместо открытого коллектора надо буфера юзать


Кстати говоря, внутренняя шина 6502 выполнена на открытых коллекторах:

Quote:
Недокументированные команды
Многие недокументированные команды реально не выполняют операцию AND между регистрами. Это происходит автоматически, когда два значения помещаются одновременно на внутреннюю шину с открытыми коллекторами.


http://www.emuverse.ru/wiki/MOS_Technology_6502


24 Jan 2011 08:01
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Как я предварительно посчитал, 8-битное только АЛУ вырисовывается в
33 корпуса - а это больше половины двойной макетки если добавить
логику обслуживания. Если перейти к 4-битной конструкции то можно
уложиться ~ в 20 корпусов целиком. Это будет выглядеть вот так:

Image

Есть некоторая надежда в 4-битном варианте воплотить весь компьютер
в виде одноплатной конструкции... если ещё и вспомнить - сколько
155-я серия по питанию жрёт!!! :-?


23 Jun 2011 12:59
Profile
God
User avatar

Joined: 13 Nov 2010 05:06
Posts: 1291
Reply with quote
Post 
Lavr wrote:
если ещё и вспомнить - сколько
155-я серия по питанию жрёт!!! :-?

Не страшно. БП от ПЦ однозначно потянет любой такой комп. Мы же не собираемся питать детище от зарядки для мобилок? Для особых экстремалов и ретроградов - БП от ЕС ЭВМ, минимум 5В 8А - на сотню корпусов 155-й серии хватит... :)


23 Jun 2011 23:15
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
VituZz wrote:
Не страшно. БП от ПЦ однозначно потянет любой такой комп.
...
Для особых экстремалов и ретроградов - БП от ЕС ЭВМ, минимум 5В 8А -
на сотню корпусов 155-й серии хватит... :)

Просто вспомнил свой весьма негативный опыт... :-?
Одна плата, вид которой я привёл в топике МС2702 :
http://www.nedopc.org/forum/viewtopic.php?t=8848
Image
жрала столько, что я не смог её запустить от стандартных "армянских"
источников типа Б3... Б5... на пределе .

Может всё происходило в импульсе включения, а может плата нам попалась
неисправная, но она так и не включилась.
Срабатывала защита источников перегрузки по току...
Исследований проводить не стали - ну если она столько жрёт, куда ж нам
её задействовать
... Правда в ней шинных формирователей "туевы хучи", но
у меня и "Специалист МХ" под ампер кушает - а он примерно 3/4 этой платы. :(


Last edited by Lavr on 14 Oct 2011 07:56, edited 1 time in total.



24 Jun 2011 07:15
Profile
God
User avatar

Joined: 13 Nov 2010 05:06
Posts: 1291
Reply with quote
Post 
У меня одна платка 8х8см кушает около ампера, одни только 4х580ИР82=4х160ма=640мА. Пришлось использовать БП от ПЦ.


24 Jun 2011 10:15
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
b2m wrote:
Возможны следующие варианты:
D7 D6
- делят на 4 группы команд (можно сказать однотипных)
D5 D4 D3
- регистр, где данные модифицируются
- регистровая пара (D5 D4) в этом случае D3 будет относиться к коду операции
- код условия в командах перехода, вызова процедур или возврата
D2 D1 D0
- регистр, откуда берутся данные
- код операции

Дмитрий - а нет ли какого программного примера побитного парсинга
команд К580ВМ80?
Посмотрел на имеющиеся у меня образцы исходников дизассемблеров -
там в основном табличная перекодировка код - мнемоника. :-?


24 Jun 2011 16:26
Profile
Doomed

Joined: 26 May 2003 07:57
Posts: 634
Reply with quote
Post 
Lavr wrote:
Дмитрий - а нет ли какого программного примера побитного парсинга
команд К580ВМ80?

Это как?

Lavr wrote:
Посмотрел на имеющиеся у меня образцы исходников дизассемблеров -
там в основном табличная перекодировка код - мнемоника. :-?

По таблице гораздо быстрее: я обычно делаю табличку 256 байт, в которой содержатся номера мнемоник, а по номеру в другой табличке беру саму мнемонику и какие параметры нужно декодировать.

_________________
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/


25 Jun 2011 12:51
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
b2m wrote:
Lavr wrote:
Дмитрий - а нет ли какого программного примера побитного парсинга
команд К580ВМ80?

Это как?

Ну можно сделать примерно вот так:
Code:
GETPAR
  MOVFW  PARAM    ;get code byte
  MOVWF  OLDBT    ;save as previous (IREG) is only five bits wide
  MOVLW  BUNK     ;укажем страницу PCLHI для ADDWF  PC,1
  IORWF  PCLHI,1  ;register address = 1XXXX
  SWAPF  PARAM,W  ;get high nibble of byte
  ANDLW  0FH      ;W = instruction code offset
  ADDWF  PC,1     ;jump to handler table

  GOTO  HND0
  GOTO  HND1
  GOTO  HND2
  GOTO  HND3
  GOTO  HND4
  GOTO  HND5
  GOTO  HND6
  GOTO  HND7
  GOTO  HND8
  GOTO  HND9
  GOTO  HND10
  GOTO  HND11
  GOTO  HND12
  GOTO  HND13
  GOTO  HND14
  GOTO  HND15
; - - - - - - - - - - - - - - - -

Хотя это можно считать по сути разновидностью таблицы...


25 Jun 2011 15:30
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Я здесь несколько раз поднимал вопрос о том, как проверить быстродействие самодельного АЛУ, и к общему знаменателю мы как-то так и не пришли...
Поскольку 4-битный компьютер имеет смысл делать только если его быстродействие весьма велико, о чём свидетельствуют соотношения для Wang 2200:
http://www.nedopc.org/forum/viewtopic.php?t=9573&start=135
то тест на быстродействия для АЛУ представляет актуальность.

Есть у меня такая мысль: поскольку АЛУ - устройство комбинационного типа, и есть варианты его исполнения как таблицы, зашитой в ПЗУ, то можно предложить следующий вариант теста.

Таблицу для конкретного АЛУ заносим в быстродействующее статическое ОЗУ, после чего начинаем одновременно перебирать на чтение адреса ОЗУ, которые для АЛУ будут аргументами А, В и кодом функции. По выходам ставим цифровые компараторы, или схемы совпадения.
После нескольких переборов, частоту смены адресов увеличиваем, и так до тех пор, пока не будет обнружено несовпадение на выходах АЛУ и статического ОЗУ.
Это значение частоты и будет определять быстродействие АЛУ, причём несовпадение должно сразу же оключить перебор адресов, а не моргать визуальной индикацией.


16 Jul 2011 07:36
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Lavr wrote:
b2m wrote:
Lavr wrote:
Дмитрий - а нет ли какого программного примера побитного парсинга
команд К580ВМ80?

Это как?

Ну можно сделать примерно вот так:
Code:
GETPAR
  MOVFW  PARAM    ;get code byte
  MOVWF  OLDBT    ;save as previous (IREG) is only five bits wide
  MOVLW  BUNK     ;укажем страницу PCLHI для ADDWF  PC,1
  IORWF  PCLHI,1  ;register address = 1XXXX
  SWAPF  PARAM,W  ;get high nibble of byte
  ANDLW  0FH      ;W = instruction code offset
  ADDWF  PC,1     ;jump to handler table

  GOTO  HND0
  GOTO  HND1
  GOTO  HND2
  GOTO  HND3
  GOTO  HND4
  GOTO  HND5
  GOTO  HND6
  GOTO  HND7
  GOTO  HND8
  GOTO  HND9
  GOTO  HND10
  GOTO  HND11
  GOTO  HND12
  GOTO  HND13
  GOTO  HND14
  GOTO  HND15
; - - - - - - - - - - - - - - - -

Хотя это можно считать по сути разновидностью таблицы...


Авторы PMD-85 на ATmega128 такой метод считают быстрым:
Quote:
Инструкция декодирования - используйте IJMP RJMP и инструкций (в диапазоне от 8 килобайт кода), это намного быстрее, чем классические таблицы.

Code:
i_table:
000a00 cb3c    rjmp    _nop
000a01 cd8f     rjmp   _lxi_b
000a02 c144     rjmp   _stax_b
000a03 cd72     rjmp   _inx_b
...


18 Jul 2011 08:27
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
4-BIT АЛУ на TTL

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

Image
_______________ Рис. 1. _______________

где А0–А3 – входы от 4-битного регистра-аккумулятора, исполняющего функцию первого операнда; В0–В3 – входные сигналы второго операнда – регистра временного хранения; R0R3 – выходные сигналы АЛУ, линии регистра временного хранения результата; S0–S2 – выбор функций, выполняемых арифметико-логическим устройством; Cin – вход сигнала переноса; Z, S, P, С – флаги-признаки результата последней операции, соответственно, нуля, знака, чётности и переноса.
Три сигнала выбора функции АЛУ – S0–S2 – определяют наличие в его составе 2^3=8 аппаратных блоков, реализующих соответствующие функции. В качестве основных блоков в состав АЛУ введём полный сумматор, выполняющий арифметические функции сложения (ADD, ADI), вычитания (SUB, SUI) и сравнения (CMP, CPI); логические вентили И, ИЛИ, ИСКЛЮЧАЮЩЕЕ ИЛИ, реализующие соответственно логические операции конъюнкции (AND, ANI), дизъюнкции (ORA, ORI) и суммирования операндов по модулю два (XOR, XRI), а также отрицания (поразрядного дополнения до единицы) одного из операндов (NOTXOR 0Fh). Следует иметь в виду, что логические команды этой группы сбрасывают бит переноса С. Также в состав АЛУ введём схемы реализации арифметических и логических сдвигов – RAR, RAL, RRC и RRC – реализованные перестановкой сигнальных линий операнда А0–А3. В схеме АЛУ не используются инверторы, поскольку функция поразрядного инвертирования бит аккумулятора выполняется на основе вентиля XOR, представляющего собой вариант управляемого инвертора.

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

Принципиальная электрическая схема окончательного варианта АЛУ приведена на следующем рисунке.

Image
_______________ Рис. 2. _______________

Согласно приведённой принципиальной электрической схеме 4-битного АЛУ, назначения управляющих сигналов следующее.
Сигналы S0–S2 осуществляют выбор операции над двумя операндами, поступающими на входы операционного устройства АЛУ.
Сигналы C1,C2 коммутируют значение на входе линии флага переноса C0 операционного устройства АЛУ, и позволяют выбрать соответственно следующие значения: "0", C, "1", /C для выполнения определённых операций в АЛУ.
Сигналы K1,K2 на входах 1 и 2 мультиплексоров аргумента позволяют подавать на входы первого операнда операционного устройства АЛУ полубайты собственно аргумента A и значения 0h , 0Fh и 0h соответственно. Последнее значение 0h является избыточным, и может быть впоследствии заменено на другое (возможно, /A).
Сигнал BN (B Negative) на входе вентилей XOR микросхемы К155ЛП5 позволяет инвертировать значение второго операнда операционного устройства АЛУ во всех операциях вычитания.

Возникает вопрос - нужен ли реальный флаг чётности Р в составе АЛУ? Есть мнение, что это рудимент использования в коммуникационных программах. Может имеет смысл и удобен флаг просто чётности результата (как Р со штрихом) т.е. состояние бита 0?

В АЛУ реализуется следующая система команд, приведённая в таблице, где также указаны значения всех управляющих сигналов.

Image

Для сравнения я рассмотрел аналогичные команды, реализованные в i8080. Похожая логика в кодировке прослеживается.

Image

Вопросы, прежде чем двигаться дальше, хотелось бы обсудить следующие:

1. Достаточна ли реализованная система команд?
2. Не избыточна ли реализованная система команд?

Это вопрос у меня возник при сравнении с системой команд микроконтроллера PIC16F84.

Image

У него нет аналогов RRC и RLC, а есть только - RAR, RAL - насколько такое упрощение существенно для программирования?
И второе микроконтроллер PIC16F84 вычитает операнд не из регистра-аккумулятора, а наоборот: из второго операнда вычитается значение регистра-аккумулятора. Схемотехнически это позволяет убрать из схемы инверсию второго операнда.

В PIC16F84 также не реализованы операции сложения с учётом флага переноса и вычитания с заёмом - это также значительно упрощает схемотехнику АЛУ. Но программирование, как мне кажется, серьёзно осложняет.

Жду вашего мнения…


Last edited by Lavr on 15 Oct 2011 04:03, edited 6 times in total.



14 Oct 2011 06:12
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 124 posts ]  Go to page 1, 2, 3, 4, 5 ... 9  Next

Who is online

Users browsing this forum: No registered users and 2 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

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.