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

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

Moderator: Shaos

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

Re: Самодельный процессор на 74F00 NEDONAND (nedoPC-00)

Post by Shaos »

Lavr wrote:
Shaos wrote:Осталось проверить в реальности будут ли тут иголки и всякая другая фигня с гонками...
Счетчик-делитель твой должен быть синхронным, как ИЕ7, чтобы не возникли "иголки и всякая другая фигня".
А он у тебя синхронный?
В том то и дело что не совсем... Вот, вроде нашёл как попроще сделать так, чтобы все триггеры меняли состояние одновременно:

http://vhdlverilog.blogspot.com/2013/07/synchronous-counter-using-d-flipflop.html

P.S. Похоже это тоже самое, что я для модели своих троичных часов в своё время "изобрёл" - синхронный инкрементатор на полусумматорах ;)
viewtopic.php?f=79&t=60&start=15
viewtopic.php?f=79&t=11076#p119749

P.P.S. Либо можно попрбовать на JK-триггерах нагородить...

P.P.P.S. Вроде пишут, что если J и K подтянуты к "1", то оно превращается в T-триггер, так что правильнее было бы сказать "на T-триггерах нагородить"...

P.P.P.P.S. Согласно ТТЛ-библии ИЕ7 устроено так:
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23991
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Самодельный процессор на 74F00 NEDONAND (nedoPC-00)

Post by Shaos »

А вот синхронный счётчик 74S163 тоже XOR-ы и D-триггеры имеет внутри (именно с буковкой S, т.к. без буковки S без XOR-ов):
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23991
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Самодельный процессор на 74F00 NEDONAND (nedoPC-00)

Post by Shaos »

Вобщем вот что получилось - на каждый бит кроме двухступенчатого D-триггера со сбросом есть полусумматор (XOR+AND) и мультиплексор (для загрузки значения извне синхронно):

Image

Получается что генератор должен быть в 2 раза быстрее - 13.333 МГц или меньше, т.к. как нам надо 3 бита, которые меняют своё состояние одновременно...

P.S. 3 корпуса на триггер и ещё 2 на XOR+AND+MUX и того 5 корпусов 74F00 на бит - т.к. битов у нас 11+3=14, то только на генератор клока+PC для 2Кб потребуется 14*5=70 микросхем...

P.P.S. Или сделать такими "строгими" только младшие 3 бита, которые считают такты внутри одного цикла, а всё остальное (11 битов PC) пусть будет цепочкой? И по идее этим 3 битам не нужна загрузка - они всегда считают от 0 до 7 - а загрузка нужна будет лишь для PC...
Я тут за главного - если что шлите мыло на me собака shaos точка net
petrenko
Doomed
Posts: 598
Joined: 10 Mar 2012 16:21
Location: РФ

Re: Самодельный процессор на 74F00 NEDONAND (nedoPC-00)

Post by petrenko »

561ие8 например внутри устроен вот так : tec.org.ru/_bd/16/41808776.jpg

До 10 выходных сигналов для многофазного тактирования конвейерных схем лучше делать на счётчиках джонсона ( S==2*n )
Больше ( S>10 ) уже невыгодно, поскольку для ( S==2*n ) потребуется намного большее число(==n ) триггеров , нежели для ( S==2^n ) - "капитан очевидность" ..

Для 8-фазного тактирования я взял 4(четыре) JK-триггера из 1531 серии - другими способами добиться надёжной устойчивой работы на 120МГц не удавалось ( в реале - хоть на протезусы смотрю , и даже чутка доверяю , но перепроверяю обязательно - согласно высказыванию одного актёра.. )
User avatar
Shaos
Admin
Posts: 23991
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Самодельный процессор на 74F00 NEDONAND (nedoPC-00)

Post by Shaos »

Короче для первых 3-х битов (которые будут считать такты в цикле) сделаю ещё более навороченный двух-ступенчатый D-триггер со сбросом и установкой (чтобы были симметричные задержки в плечах), а для остальных 11 битов (непосредственно PC) будут использованы триггеры попроще...

P.S. Да наверное для всех 14 битов сделаю навороченные - т.к. при желании каждую пару таких триггеров можно заменить на один корпус 7474...

P.P.S. А вот собственно и он - "навороченный" двух-ступенчатый D-триггер со сбросом и установкой (4.5 корпуса 7400):

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

Re: Самодельный процессор на 74F00 NEDONAND (nedoPC-00)

Post by Shaos »

Вот такой синхрогенератор с программным счётчиком у меня получился:



Всего тут (10+11*8)/4+14*4.5=98/4+63=24.5+63=87.5 корпусов 7400...

P.S. Если вместо самодельных триггеров поставить 7474 микросхемы, то получится всего лишь 31.5 корпусов, а если взять ещё 7486 для XOR-ов, то и того меньше (а если 74163 микросхемы взять, то будет что-то около трёх корпусов :o )

P.P.S. Комп будет работать на ожидаемой максимальной частоте только если адрес будет успевать инкрементироваться за 600 нс - тут вроде успевает (я насчитал 12 гейтовых задержек на бит в худшем случае - что даёт 462 нс в среднем или 660 нс если все гейты будут из плохой партии с 5нс задержкой - что маловероятно)...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23991
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Самодельный процессор на 74F00 NEDONAND (nedoPC-00)

Post by Shaos »

Shaos wrote:P.P.S. С командой RET есть проблема - она должна записать в PC не то что сохранилось из регистров F и G в момент вызова RST, а на единицу большее значение т.к. надо вернуть управление на команду следующую за RST - возможно удастся подсунуть сохранённое в PC непосредственно перед инкрементом, который и так делается после каждой команды "атоматом" либо придётся через то же АЛУ пропускать в 3 захода (т.к. у нас 11-битный адрес) и команда RET займёт как минимум 2 цикла во второй ступени конвейера (при этом первая ступень должна будет стоять)...
Пока вроде решил так сделать - команда NOP будет занимать вторую ступень конвейера и будет ничего не делать - соответственно при RET оно таки будет восстанавливать адрес, который запомнился в момент вызова RST, но кроме того будет взведён флаг "считать текующую инструкцию NOP-ом" (типа SKIP) - тогда прочитанный опять RST не выполнится и PC заинкрементится сам собой, сбросив флаг и указав на следующую за RST инструкцию. А команды A=N, R=~R, R1=R2 и даже RST таки вполне укладываются в первую ступень конвейера (т.е. после операций сложения и вычитания они буду занимать 0 циклов : )
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23991
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

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

Post by Shaos »

Окончательно остановился на названии nedoRISC-0 для системы команд и абстрактного процессора, а конкретная имплементация будет известна миру под наименованием NEDONAND :idea:

Вот примерные прикидки по растактовкам:

Code: Select all

00     - NOP (0 or 1 cycle)
01..7F - A=n copy instruction to A (0 or 1 cycle)
80..87 - RST n (special case): prepare F' & G' and swap (0 or 1 cycle)
88..BE - R1=R2 if R1 and R2 are the same then store incremented value (0 or 1 cycle)
BF     - RET (special case): swap + skip (1 cycle)
C0..DF - fast ALU (1 cycle):  110xxxxx
E0..FF - slow ALU (2 cycles): 111xxxxx

1st stage:

     /OE
000 - 1 updated PC at this point (/CE=0 all the time)
001 - 1
010 - 1
011 - 1
100 - 0
101 - 0
110 - 0 strobe instruction store / execute simple instructions (A=n, R=~R, R1=R2, RST n) + store
111 - 1 strobe PC increment / store instruction for 2nd stage

2nd stage - fast ALU function execution (RRC,RLC,NAN,XOR):

      DMUX
000 - 1 connect 1st nibble
001 - 1
010 - 1 strobe accumulator store (1st nibble) / flags
011 - 2 connect 2nd nibble
100 - 2
101 - 2 strobe accumulator store (2nd nibble) / flags
110 -
111 -

2nd stage - slow ALU function execution (ADC,SBC,ADI,SBI):

000 - 1 connect 1st nibble
001 - 1
010 - 1
011 - 1
100 - 1
101 - 1 strobe accumulator store (low nibble) / flags
110 -
111 -

000 - 2 connect 2nd nibble
001 - 2
010 - 2
011 - 2
100 - 2
101 - 2 strobe accumulator store (high nibble) / flags
110 -
111 -
P.S. Чото 8 тактов на машинный цикл наверное многовато - надо уложиться в 4...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

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

Post by Lavr »

А что у тебя симулятор какие-там диаграммы/осциллограммы не показывает?

Раз уж тактовый генератор, то и диаграммы бы его сразу посмотреть...




P.S. А тебя Гондурас... ну то есть ЧСВ не сильно беспокоит? :o
Shaos wrote:а конкретная имплементация будет известна миру под наименованием NEDONAND :idea:
А то ты его так навязчиво прилюдно чешешь... :wink:
iLavr
User avatar
Shaos
Admin
Posts: 23991
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

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

Post by Shaos »

Ну я же не для себя стараюсь - для человечества :lol:

А по поводу диаграмм - мы же вроде обсуждали в своё время, что логисим - отстой т.к. не имеет в своём составе виртуального осциллографа ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

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

Post by Lavr »

Shaos wrote:мы же вроде обсуждали в своё время, что логисим - отстой т.к. не имеет в своём составе виртуального осциллографа ;)
Виноват, подзабыл... :osad: поскольку с тех пор я им и не пользуюсь... :-?
У логисима только индикаторы 0 и 1 что-ли на выводах что-то показывают? :roll:

Блин... а еще все норовят плюнуть и кинуть камень в мою любимую "резиновую тётку" по фамилии Протезус! :o
А она у меня даже иголки показывает в асинхронных счетчиках! :esurprised:
iLavr
User avatar
Shaos
Admin
Posts: 23991
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

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

Post by Shaos »

В логисиме ещё логировать можно выбранные сигналы в текстовой форме, правда не по времени, а по изменениям состояния этих сигналов...

P.S. По-быстрому нарисовал в бесплатной версии Eagle v5 платку с двумя "навороченными" D-триггерами (см. eagle-nedonand.zip):



Развёл автороутером (всё кроме цепей питания, которые нарисовал вручную) плюс полигон земли пришлёпал снизу:



И заказал на oshpark.com несколько штучек :)

Image

По сути это аналог 7474, но входы установки не выведены наружу как пины, а представлены кнопками S1 и S2:
1) GND
2) D1
3) ^C1
4) /R1
5) Q1
6) /Q1
7) D2
8) ^C2
9) /R2
10) Q2
11) /Q2
12) VCC
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23991
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

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

Post by Shaos »

Вот тактовый генератор на 4 такта на цикл с вспомогательными выходами:



Примерно так будет:

Code: Select all

            _________________
/RST ______|
     ______   _   _   _   _
CLK        |_| |_| |_| |_| |_  6.666 MHz
     ______     ___     ___
CLK1       |___|   |___|   |_  3.333 MHz
     ______         _______
CLK2       |_______|       |_  1.666 MHz

           .       .       .
     __________             _
/OE            |___________|   450 ns
           .        ___    .
REGRD _____________|   |_____  150 ns
           .       .    ___ 
REGWR _________________|   |_  150 ns
           | 300ns | 300ns |
           ^           ^
           |   450ns   |
           |           \data ready
           \address ready

1st stage:

    /OE
00 - 1 updated PC at this point (/CE=0 all the time)
01 - 0
10 - 0 strobe execute simple instruction (A=n, R=~R, R1=R2, RST n) 
11 - 0 strobe result store (higher priority for accumulator) and PC increment (if enabled)

2nd stage - fast ALU function execution (RRC,RLC,NAN,XOR):

     DMUX
00 - 1 connect 1st nibble
10 - 1 strobe accumulator store (1st nibble) / flags
10 - 2 connect 2nd nibble
11 - 2 strobe accumulator store (2nd nibble) / flags

2nd stage - slow ALU function execution (ADC,SBC,ADI,SBI):

00 - 1 connect 1st nibble
01 - 1
10 - 1
11 - 1 strobe accumulator store (low nibble) / flags

00 - 2 connect 2nd nibble
01 - 2
10 - 2
11 - 2 strobe accumulator store (high nibble) / flags
P.S. А вот отдельно полусумматор:

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

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

Post by Shaos »

Вот и демультиплексоры подоспели - слева распостраняющий нолик и справа распостраняющий единичку:

Image Image

А это большой демультиплексор 1:8 распостраняющий единичку:



В схему main уже прикрутил 2K ПЗУ и пытаюсь декодить команды...

P.S. Всё - дошёл до состояния, когда логисим самовозбуждается на пустом месте:

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

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

Post by Shaos »

Пока решаю проблему непредвиденных самовозбудов заменой самодельных триггеров и регистров на библиотечные из логисима...

P.S. Уже читаются инструкции из ПЗУ (пока играюсь с первыми 16 ячейками - т.е. адрес 4 бита) и уже работает запись числа в регистр A и копирование регистров через вспомогательный регистр (пока без инверсии) - это (если вычесть инверсии и RST/RET) покрывает 2/3 всей таблицы опкодов :roll:
Я тут за главного - если что шлите мыло на me собака shaos точка net