Самодельный процессор nedoRISC-0 (NEDONAND)

Публичный форум для http://www.nedopc.org/nedopc

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Самодельный процессор nedoRISC-0 (NEDONAND)

Post by Shaos »

Купил на ебее платку для монтажа накруткой - чуть меньше чем за сотню с доставкой :)

Image

14 рядов по 136 золотых контактов в каждом, плюс периодически расставленные ноги земли и питания, плюс разъём 36x3 контактов!

Если ставить туда 74F00, оставляя место под конденсатор (т.е. 8 пар ног занимать на микросхему), то в эту плату влезет 119 микросхем... :roll:

P.S. Хотя наверное крупновата платка для этой конкретной задачи - на ней надо что-то типа такого собирать...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Самодельный процессор nedoRISC-0 (NEDONAND)

Post by Shaos »

Shaos wrote:Вот такая плата 16-байтового ПЗУ вышла:



Уже заказал на oshpark.com:

Image

P.S. Делал в pcb (часть gEDA) - разводил вручную:
http://nedopc.org/nedopc/files/geda-nedonand.zip
Пришли платки:

Image

Собрал пока лишь для 4 байтов т.к. однорядных сокетов таких (для втыкания диодов) у меня больше нет (надо заказывать):

Image

Щас примусь за тестирование...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Самодельный процессор nedoRISC-0 (NEDONAND)

Post by Shaos »

Подключил к 7-сегментному индикатору и закодировал числа 0,1,2,3 - работает :rotate:

Image
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Самодельный процессор nedoRISC-0 (NEDONAND)

Post by Shaos »

Вот думаю а не спаять ли из одной такой платки вечный декодер из 4 битов в 7-сегментный индикатор для показа HEX?

Вечный в том смысле, что диоды будут намертво припаяны - чисто для демонстрации :)

P.S. Более того - индикатор можно прямо в плату воткнуть (скажем в правый-нижний угол)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Самодельный процессор nedoRISC-0 (NEDONAND)

Post by Lavr »

Shaos wrote:а не спаять ли из одной такой платки вечный декодер из 4 битов в 7-сегментный индикатор для показа HEX?
В каком-то древнем журнале "Радио" в разделе "Обмен опытом" предлагали схемку на обычном
дешифраторе типа "код-позиция", дополненным диодным дешифратором, как раз для тех, у кого
нет специфических дешифраторов для 7-сегментного индикатора.

Помню, мы с другом на 5-м курсе сочиняли такой диодный дешифратор сами, в спешке, "в лоб" и
с матюками, ибо время подпирало... :lol:
Долго хранил тот листочек, если подобное повторится, а потом и статью в "Радио" как-то нашел.
Было даже слегка обидно:"если бы мы знали, мы бы так не тужились!" :ebiggrin:
iLavr
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Самодельный процессор nedoRISC-0 (NEDONAND)

Post by Shaos »

Собрал платку-индикатор из NEDONAND-16 и обнаружил, что в этом экземпляре платки есть косяк - дорожка прилипла к паду у одной из земляных ног микросхем с правой стороны платы - в результате на одном из выходов всегда "0" - подрезал дорожку, однако в собранном прошлый раз экземляре платки оно не коротило - видимо таки надо платку переразвести чуток, чтобы оно не залипало при производстве будущих экземпляров...

P.S. Вот думаю как делать в "недонанде" индикацию адреса и опкода - на нескольких таких платках (по одной на каждый шестнадцатиричный разряд) или на одной такой платке плюс мультиплексоры-демультиплексоры, чтобы по циклу переподключать её к разным 7-сегментным индикаторам?
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Самодельный процессор nedoRISC-0

Post by Shaos »

Shaos wrote:
Shaos wrote:
Shaos wrote:Вот нагородил 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: Select all

 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, немного подковырял как предполагалось выше:

Image

Image

Собрал тестовый "стэнд" для втыкания в него nedoCPU-16:

Image

Только наверное скорость особо 20-мегагерцовым пиком не померять т.к. он только 5 миллионов команд в секунду делает (это 200 нс)...

P.S. Думал было на SX-28 нагородить что-то (он может 80 МГц гнать со скоростью одна команда на такт), но потом мне сообщили, что есть такой LogicPirate, который снимает логические осциллограммы прямо в SPI SRAM-ы на частотах до 80 МГц :o

http://dangerousprototypes.com/docs/Logic_Pirate

Так что наверное для анализа скорострельности я буду аналогичный подход использовать...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Самодельный процессор nedoRISC-0 (NEDONAND)

Post by Shaos »

Shaos wrote:Собрал платку-индикатор из NEDONAND-16 и обнаружил, что в этом экземпляре платки есть косяк - дорожка прилипла к паду у одной из земляных ног микросхем с правой стороны платы - в результате на одном из выходов всегда "0" - подрезал дорожку, однако в собранном прошлый раз экземляре платки оно не коротило - видимо таки надо платку переразвести чуток, чтобы оно не залипало при производстве будущих экземпляров...

P.S. Вот думаю как делать в "недонанде" индикацию адреса и опкода - на нескольких таких платках (по одной на каждый шестнадцатиричный разряд) или на одной такой платке плюс мультиплексоры-демультиплексоры, чтобы по циклу переподключать её к разным 7-сегментным индикаторам?
Выпаял четыре микросхемы пока не нашёл вторую залипшую дорожку...

Image

Image

Собрал вместе NEDONAND-3 с двумя NEDONAND-2 плюс NEDONAND-16 с "прошивкой" декодера из 4 битов в шестнадцатиричную цифру:

Image

Видео:


https://youtu.be/JhHOd0FVcaM
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Самодельный процессор nedoRISC-0 (NEDONAND)

Post by Shaos »

Вот интересная статейка про реверснутый АЛУ из 8085 - оказывается вместо сдвига влево он использовал сложение аргумента с самим собой ;)

http://www.righto.com/2013/01/inside-alu-of-8085-microprocessor.html

А вот тут объясняется как работает флаг overflow в реверснутом 6502:

http://www.righto.com/2013/01/a-small-part-of-6502-chip-explained.html
V = not (((A7 NOR B7) and C6) NOR ((A7 NAND B7) NOR C6))
Что есть тоже самое как и C6 xor C7 (исключающее или между переносами из последнего и предпоследнего битов - я проверил):

Code: Select all

D = A7 NOR B7
E = A7 NAND B7
F = D AND C6
G = E NOR C6
V = F OR G

A7 B7 C6| D E F G V | C7 C6xorC7
--------------------------------
0  0  0 | 1 1 0 0 0 | 0    0
0  0  1 | 1 1 1 0 1 | 0    1
0  1  0 | 0 1 0 0 0 | 0    0
0  1  1 | 0 1 0 0 0 | 1    0
1  0  0 | 0 1 0 0 0 | 0    0
1  0  1 | 0 1 0 0 0 | 1    0
1  1  0 | 0 0 0 1 1 | 1    1
1  1  1 | 0 0 0 0 0 | 1    0
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Самодельный процессор nedoRISC-0 (NEDONAND)

Post by Shaos »

Одновременно пришли все оставшиеся платки, заказанные в период с 26 февраля по 1 марта:

Image

т.е. производство длилось от 10 до 15 дней...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Самодельный процессор nedoRISC-0 (NEDONAND)

Post by Shaos »

Shaos wrote:Вот пример инкремента регистровой пары DE:

Code: Select all

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 регистра - в регистра аккумулятора и в регистр куда аккумулятор скопировали - по идее должно срастись...
Я тут за главного - если что шлите мыло на me собака shaos точка net
Bronto
Writer
Posts: 17
Joined: 19 May 2014 03:47
Location: Челябинск

Re: Самодельный процессор nedoRISC-0 (NEDONAND)

Post by Bronto »

Может я уже поздно, но вы сами меня банили, так что не обессудьте.
Хотел бы вас предостеречь от строительства процев на рассыпухи НИЗКОЙ разрядности.
Несмотря на кажущуюся экономию ресурсов и времени, подобные проекты оборачиваются излишней сложностью декодирования команд, невозможностью расширения и низкой скоростью выполнения команд - проще сделать последовательный многоразрядный процессор, чем узкий параллельный.
Подобный вывод можно проследить также в быстром укрупнение разрядности у всех крупных производителей процессоров, которые за 10 лет перешли от 1 и 4 разрядных секций к 8 и 16 разрядным, полноценным процессорам (1968-1978). И далее не остановились на этом. Оптимальным для человеческого проектирования (без участия в создании разводки кристалла CAD и компьютеров) и программирования, особенно для риск-архитектуры, является как раз 32-битная архитектура. Но она сама по себе является затратной. Для домашнего же проектирования риск-проца оптимальным является 16-ти битный формат.
К такому выводу также пришёл известный блоггер Хабра, который и рассказал мне об этом.
В чём оптимальность? - прямая адресация регистров проца (особенно в 32 битном формате), без необходимости строить дешифраторы (3 в 8 или 4 в 16) на простой логике, прямая кодировка команд в битах кода операции (32-й бит - это сложение, 31 бит - это вычитание, 30-й бит это ИЛИ, 29-й бит это И и т.д.), Отсутствие дешифраторов ускоряет весь проц, устраняет задержки на считывание, оставляет возможность модернизации системы команд без полной реорганизации и переделки внутренней схемотехники проца. Также становится выгодным делать версии проца на последовательной шине, что конечно замедляет проц, но и сильно удешевляет его демо-вариант.
Евген.
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Самодельный процессор nedoRISC-0 (NEDONAND)

Post by Shaos »

Ну с одной стороны так оно, а с другой расходование пространства опкодов на побитное кодирование оперций выглядит излишне расточительно...
Я тут за главного - если что шлите мыло на me собака shaos точка net
Bronto
Writer
Posts: 17
Joined: 19 May 2014 03:47
Location: Челябинск

Re: Самодельный процессор nedoRISC-0 (NEDONAND)

Post by Bronto »

Shaos wrote:Ну с одной стороны так оно, а с другой расходование пространства опкодов на побитное кодирование оперций выглядит излишне расточительно...
:ebiggrin: оно конечно горазды же вы потреблять пространство-то...
16 бит - 64 тыщи кодов.
32 бита - даже считать не охота. Но эта конечно для кодированных опкодов. А для расшитых, т.е. прямых микрокодов, где каждый разряд отвечает за одно действие, конечно поменьше останется, в миллион раз....

Ну скажем примем что это самодельный проц и разбегаться не будем:
скажем 8 общих регистров - это займёт 16 бит в опкоде для указания источника и приёмника. 4 разряда на булеву алгебру, 4 на сдвиги и арифметику (влево, вправо, сложение, сравнение) и 4 на переходы. 4 останется ещё на что нибудь (резерв, может быть прерывания).

Итого 64 комбинации с каждым регистром на каждое действие, включая переходы. 12х64 = 768 опкодов (включая бесполезные). :ebiggrin:
Ещё останется 4 разряда.
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Самодельный процессор nedoRISC-0 (NEDONAND)

Post by Shaos »

Подписался на участиве в "The 2016 Hackaday Prize":

https://hackaday.io/submissions/prize2016/list
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net