а не спаять ли из одной такой платки вечный декодер из 4 битов в 7-сегментный индикатор для показа HEX?
В каком-то древнем журнале "Радио" в разделе "Обмен опытом" предлагали схемку на обычном дешифраторе типа "код-позиция", дополненным диодным дешифратором, как раз для тех, у кого нет специфических дешифраторов для 7-сегментного индикатора.
Помню, мы с другом на 5-м курсе сочиняли такой диодный дешифратор сами, в спешке, "в лоб" и с матюками, ибо время подпирало... Долго хранил тот листочек, если подобное повторится, а потом и статью в "Радио" как-то нашел. Было даже слегка обидно:"если бы мы знали, мы бы так не тужились!"
_________________ iLavr
06 Mar 2016 03:39
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22757 Location: Silicon Valley
Собрал платку-индикатор из NEDONAND-16 и обнаружил, что в этом экземпляре платки есть косяк - дорожка прилипла к паду у одной из земляных ног микросхем с правой стороны платы - в результате на одном из выходов всегда "0" - подрезал дорожку, однако в собранном прошлый раз экземляре платки оно не коротило - видимо таки надо платку переразвести чуток, чтобы оно не залипало при производстве будущих экземпляров...
P.S. Вот думаю как делать в "недонанде" индикацию адреса и опкода - на нескольких таких платках (по одной на каждый шестнадцатиричный разряд) или на одной такой платке плюс мультиплексоры-демультиплексоры, чтобы по циклу переподключать её к разным 7-сегментным индикаторам?
Вот нагородил 4-битное АЛУ, построенное из четырёх "слайсов" (см. выше)... .... P.P.P.P.P.S. 1 марта 2016 года поправил взятие аргумента для сдвигов RRC/RLC (надо было B вместо A), добавил обнуление флага C в случае операций A=A+n и A=A-n, а также сделал вывод наружу сигнала /ZERO, который сигнализирует нулём, что выполняемая операция это RRC, для которой порядок исполнения нибблов должен быть обратный (сначала старший ниббл, потом младший)...
Поправил, слегка расширив функционал - теперь надо переделать и перезаказать платку NEDONAND-4...
Тем не менее со дня на день должны прийти три "неправильные" платки NEDONAND-4, заказанные мной ранее, на которых всё же можно потестить большинство функционала АЛУ (разве что придётся тестировать сдвиги через входы A, а не через B, ну и флаг C задавать для всех операций сложения 1xxx). Потестить можно например путём подсоединения к этой NEDONAND-4 (с воткнутыми в неё четырьмя NEDONAND-3) платы с пиком nedoCPU-16, используемой в качестве тестового прибора, задающего входные воздействия и анализирующего выходы на правильность и скорость срабатывания (придётся немножко плату подковырять, подрезав несколько дорожек и бросив несколько проводков):
Code:
NN4 (bad one) -> nedoCPU-16 ----------------------------- 1) GND 2) D0 ~~~ 3) D1 ~~~ 4) D2 ~~~ 5) D3 ~~~ 6) COUT-> RA0 (flag C output) 7) VOUT-> RA1 (flag V output) 8) /O0 RA2 (wire to D0 output) 9) /O1 RA3 (wire to D1 output) 10) /O2 RA4 (wire to D2 output) 11) NC* RA5 (wire to D3 output) 12) VCC -> VCC 13) --- -> GND 14) 15) O0 -> RB0 (operation 0 input) 16) O1 -> RB1 (operation 1 input) 17) O2 -> RB2 (operation 2 input) 18) C -> RB3 (flag C input) 19) A0 -> RB4 (argument A bit 0 input) 20) A1 -> RB5 (argument A bit 1 input) 21) A2 -> RB6 (argument A bit 2 input) 22) A3 -> RB7 (argument A bit 3 input) 23) B0 ~~~ 24) B1 -> RC0 (argument B bit 1 input) 25) B2 -> RC1 (argument B bit 2 input) 26) B3 -> RC2 (argument B bit 3 input) 27) RC3 (wire to B0 input) 28) RC4 (not connected) 29) RC5 (not connected) 30) RC6 (not connected - used for RS232) RC7 (not connected - used for RS232)
Пришли "неправильные" платки NEDONAND-4, немного подковырял как предполагалось выше:
Собрал тестовый "стэнд" для втыкания в него nedoCPU-16:
Только наверное скорость особо 20-мегагерцовым пиком не померять т.к. он только 5 миллионов команд в секунду делает (это 200 нс)...
P.S. Думал было на SX-28 нагородить что-то (он может 80 МГц гнать со скоростью одна команда на такт), но потом мне сообщили, что есть такой LogicPirate, который снимает логические осциллограммы прямо в SPI SRAM-ы на частотах до 80 МГц
Собрал платку-индикатор из NEDONAND-16 и обнаружил, что в этом экземпляре платки есть косяк - дорожка прилипла к паду у одной из земляных ног микросхем с правой стороны платы - в результате на одном из выходов всегда "0" - подрезал дорожку, однако в собранном прошлый раз экземляре платки оно не коротило - видимо таки надо платку переразвести чуток, чтобы оно не залипало при производстве будущих экземпляров...
P.S. Вот думаю как делать в "недонанде" индикацию адреса и опкода - на нескольких таких платках (по одной на каждый шестнадцатиричный разряд) или на одной такой платке плюс мультиплексоры-демультиплексоры, чтобы по циклу переподключать её к разным 7-сегментным индикаторам?
Выпаял четыре микросхемы пока не нашёл вторую залипшую дорожку...
Собрал вместе NEDONAND-3 с двумя NEDONAND-2 плюс NEDONAND-16 с "прошивкой" декодера из 4 битов в шестнадцатиричную цифру:
A=E ; no ALU A=A+1 ; used ALU (2nd stage of pipeline) NOP ; no ALU (required because A is not yet ready) E=A ; no ALU A=0 ; no ALU ADC D ; used ALU (2nd stage of pipeline) NOP ; no ALU (required because A is not yet ready) D=A ; no ALU
8 циклов, причём только 2 из них используют вторую ступень конвейера, а в остальные 6 (NOP-ы могут быть заменены на другие более полезные команды, не задевающие аккумулятор) АЛУ может быть задействовано для чего-нибудь ещё...
Не нравятся мне эти дырки между операциями ALU и копированием аккумулятора куда-то. В-принципе, проц может распознать, что следом за командой, требующей ALU, идёт копирование из аккумулятора, и в результате проц может изменить поведение этой команды копирования, чтобы копировать НЕ аккумулятор, а результат работы ALU ! Причём результат ALU надо записать одновременно в 2 регистра - в регистра аккумулятора и в регистр куда аккумулятор скопировали - по идее должно срастись...
Может я уже поздно, но вы сами меня банили, так что не обессудьте. Хотел бы вас предостеречь от строительства процев на рассыпухи НИЗКОЙ разрядности. Несмотря на кажущуюся экономию ресурсов и времени, подобные проекты оборачиваются излишней сложностью декодирования команд, невозможностью расширения и низкой скоростью выполнения команд - проще сделать последовательный многоразрядный процессор, чем узкий параллельный. Подобный вывод можно проследить также в быстром укрупнение разрядности у всех крупных производителей процессоров, которые за 10 лет перешли от 1 и 4 разрядных секций к 8 и 16 разрядным, полноценным процессорам (1968-1978). И далее не остановились на этом. Оптимальным для человеческого проектирования (без участия в создании разводки кристалла CAD и компьютеров) и программирования, особенно для риск-архитектуры, является как раз 32-битная архитектура. Но она сама по себе является затратной. Для домашнего же проектирования риск-проца оптимальным является 16-ти битный формат. К такому выводу также пришёл известный блоггер Хабра, который и рассказал мне об этом. В чём оптимальность? - прямая адресация регистров проца (особенно в 32 битном формате), без необходимости строить дешифраторы (3 в 8 или 4 в 16) на простой логике, прямая кодировка команд в битах кода операции (32-й бит - это сложение, 31 бит - это вычитание, 30-й бит это ИЛИ, 29-й бит это И и т.д.), Отсутствие дешифраторов ускоряет весь проц, устраняет задержки на считывание, оставляет возможность модернизации системы команд без полной реорганизации и переделки внутренней схемотехники проца. Также становится выгодным делать версии проца на последовательной шине, что конечно замедляет проц, но и сильно удешевляет его демо-вариант. Евген.
13 Mar 2016 02:42
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22757 Location: Silicon Valley
Ну с одной стороны так оно, а с другой расходование пространства опкодов на побитное кодирование оперций выглядит излишне расточительно...
оно конечно горазды же вы потреблять пространство-то... 16 бит - 64 тыщи кодов. 32 бита - даже считать не охота. Но эта конечно для кодированных опкодов. А для расшитых, т.е. прямых микрокодов, где каждый разряд отвечает за одно действие, конечно поменьше останется, в миллион раз....
Ну скажем примем что это самодельный проц и разбегаться не будем: скажем 8 общих регистров - это займёт 16 бит в опкоде для указания источника и приёмника. 4 разряда на булеву алгебру, 4 на сдвиги и арифметику (влево, вправо, сложение, сравнение) и 4 на переходы. 4 останется ещё на что нибудь (резерв, может быть прерывания).
Итого 64 комбинации с каждым регистром на каждое действие, включая переходы. 12х64 = 768 опкодов (включая бесполезные). Ещё останется 4 разряда.
13 Mar 2016 06:27
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22757 Location: Silicon Valley
Users browsing this forum: No registered users and 5 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