nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 18 Sep 2019 22:17



Reply to topic  [ 193 posts ]  Go to page Previous  1 ... 6, 7, 8, 9, 10, 11, 12, 13  Next
Самодельный процессор nedoRISC-0 (NEDONAND) 
Author Message
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17995
Location: Colorado
Reply with quote
Купил на ебее платку для монтажа накруткой - чуть меньше чем за сотню с доставкой :)

Image

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

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

P.S. Хотя наверное крупновата платка для этой конкретной задачи - на ней надо что-то типа такого собирать...

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


02 Mar 2016 19:29
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17995
Location: Colorado
Reply with quote
Shaos wrote:
Вот такая плата 16-байтового ПЗУ вышла:



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

Image

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


Пришли платки:

Image

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

Image

Щас примусь за тестирование...

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


03 Mar 2016 21:49
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17995
Location: Colorado
Reply with quote
Подключил к 7-сегментному индикатору и закодировал числа 0,1,2,3 - работает :rotate:

Image

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


04 Mar 2016 18:06
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17995
Location: Colorado
Reply with quote
Вот думаю а не спаять ли из одной такой платки вечный декодер из 4 битов в 7-сегментный индикатор для показа HEX?

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

P.S. Более того - индикатор можно прямо в плату воткнуть (скажем в правый-нижний угол)

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


06 Mar 2016 01:55
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
а не спаять ли из одной такой платки вечный декодер из 4 битов в 7-сегментный индикатор для показа HEX?

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

Помню, мы с другом на 5-м курсе сочиняли такой диодный дешифратор сами, в спешке, "в лоб" и
с матюками, ибо время подпирало... :lol:
Долго хранил тот листочек, если подобное повторится, а потом и статью в "Радио" как-то нашел.
Было даже слегка обидно:"если бы мы знали, мы бы так не тужились!" :ebiggrin:

_________________
iLavr


06 Mar 2016 04:39
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17995
Location: Colorado
Reply with quote
Собрал платку-индикатор из NEDONAND-16 и обнаружил, что в этом экземпляре платки есть косяк - дорожка прилипла к паду у одной из земляных ног микросхем с правой стороны платы - в результате на одном из выходов всегда "0" - подрезал дорожку, однако в собранном прошлый раз экземляре платки оно не коротило - видимо таки надо платку переразвести чуток, чтобы оно не залипало при производстве будущих экземпляров...

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

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


07 Mar 2016 09:46
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17995
Location: Colorado
Reply with quote
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:
 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

Так что наверное для анализа скорострельности я буду аналогичный подход использовать...

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


09 Mar 2016 20:45
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17995
Location: Colorado
Reply with quote
Shaos wrote:
Собрал платку-индикатор из NEDONAND-16 и обнаружил, что в этом экземпляре платки есть косяк - дорожка прилипла к паду у одной из земляных ног микросхем с правой стороны платы - в результате на одном из выходов всегда "0" - подрезал дорожку, однако в собранном прошлый раз экземляре платки оно не коротило - видимо таки надо платку переразвести чуток, чтобы оно не залипало при производстве будущих экземпляров...

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


Выпаял четыре микросхемы пока не нашёл вторую залипшую дорожку...

Image

Image

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

Image

Видео:


https://youtu.be/JhHOd0FVcaM

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


09 Mar 2016 23:44
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17995
Location: Colorado
Reply with quote
Вот интересная статейка про реверснутый АЛУ из 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

Quote:
V = not (((A7 NOR B7) and C6) NOR ((A7 NAND B7) NOR C6))


Что есть тоже самое как и C6 xor C7 (исключающее или между переносами из последнего и предпоследнего битов - я проверил):
Code:
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

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


11 Mar 2016 06:39
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17995
Location: Colorado
Reply with quote
Одновременно пришли все оставшиеся платки, заказанные в период с 26 февраля по 1 марта:

Image

т.е. производство длилось от 10 до 15 дней...

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


11 Mar 2016 21:26
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17995
Location: Colorado
Reply with quote
Shaos wrote:
Вот пример инкремента регистровой пары DE:
Code:
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 регистра - в регистра аккумулятора и в регистр куда аккумулятор скопировали - по идее должно срастись...

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


12 Mar 2016 21:20
Profile WWW
Writer

Joined: 19 May 2014 04:47
Posts: 18
Location: Челябинск
Reply with quote
Может я уже поздно, но вы сами меня банили, так что не обессудьте.
Хотел бы вас предостеречь от строительства процев на рассыпухи НИЗКОЙ разрядности.
Несмотря на кажущуюся экономию ресурсов и времени, подобные проекты оборачиваются излишней сложностью декодирования команд, невозможностью расширения и низкой скоростью выполнения команд - проще сделать последовательный многоразрядный процессор, чем узкий параллельный.
Подобный вывод можно проследить также в быстром укрупнение разрядности у всех крупных производителей процессоров, которые за 10 лет перешли от 1 и 4 разрядных секций к 8 и 16 разрядным, полноценным процессорам (1968-1978). И далее не остановились на этом. Оптимальным для человеческого проектирования (без участия в создании разводки кристалла CAD и компьютеров) и программирования, особенно для риск-архитектуры, является как раз 32-битная архитектура. Но она сама по себе является затратной. Для домашнего же проектирования риск-проца оптимальным является 16-ти битный формат.
К такому выводу также пришёл известный блоггер Хабра, который и рассказал мне об этом.
В чём оптимальность? - прямая адресация регистров проца (особенно в 32 битном формате), без необходимости строить дешифраторы (3 в 8 или 4 в 16) на простой логике, прямая кодировка команд в битах кода операции (32-й бит - это сложение, 31 бит - это вычитание, 30-й бит это ИЛИ, 29-й бит это И и т.д.), Отсутствие дешифраторов ускоряет весь проц, устраняет задержки на считывание, оставляет возможность модернизации системы команд без полной реорганизации и переделки внутренней схемотехники проца. Также становится выгодным делать версии проца на последовательной шине, что конечно замедляет проц, но и сильно удешевляет его демо-вариант.
Евген.


13 Mar 2016 03:42
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17995
Location: Colorado
Reply with quote
Ну с одной стороны так оно, а с другой расходование пространства опкодов на побитное кодирование оперций выглядит излишне расточительно...

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


13 Mar 2016 06:11
Profile WWW
Writer

Joined: 19 May 2014 04:47
Posts: 18
Location: Челябинск
Reply with quote
Shaos wrote:
Ну с одной стороны так оно, а с другой расходование пространства опкодов на побитное кодирование оперций выглядит излишне расточительно...

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

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

Итого 64 комбинации с каждым регистром на каждое действие, включая переходы. 12х64 = 768 опкодов (включая бесполезные). :ebiggrin:
Ещё останется 4 разряда.


13 Mar 2016 07:27
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17995
Location: Colorado
Reply with quote
Подписался на участиве в "The 2016 Hackaday Prize":

https://hackaday.io/submissions/prize2016/list


Attachments:
hackaday160314.png
hackaday160314.png [ 474.83 KiB | Viewed 3563 times ]

_________________
:eugeek: https://twitter.com/Shaos1973
14 Mar 2016 08:35
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 193 posts ]  Go to page Previous  1 ... 6, 7, 8, 9, 10, 11, 12, 13  Next

Who is online

Users browsing this forum: No registered users and 1 guest


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.