nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 16 Apr 2024 12:41



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

Joined: 08 Jan 2003 23:22
Posts: 22519
Location: Silicon Valley
Reply with quote
Lavr wrote:
Shaos wrote:
Осталось проверить в реальности будут ли тут иголки и всякая другая фигня с гонками...

Счетчик-делитель твой должен быть синхронным, как ИЕ7, чтобы не возникли "иголки и всякая другая фигня".
А он у тебя синхронный?


В том то и дело что не совсем... Вот, вроде нашёл как попроще сделать так, чтобы все триггеры меняли состояние одновременно:

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

P.S. Похоже это тоже самое, что я для модели своих троичных часов в своё время "изобрёл" - синхронный инкрементатор на полусумматорах ;)
http://www.nedopc.org/forum/viewtopic.php?f=79&t=60&start=15
http://www.nedopc.org/forum/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 устроено так:


Attachments:
74193.jpg
74193.jpg [ 127.68 KiB | Viewed 8239 times ]

_________________
:dj: https://mastodon.social/@Shaos
18 Jan 2016 10:29
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22519
Location: Silicon Valley
Reply with quote
А вот синхронный счётчик 74S163 тоже XOR-ы и D-триггеры имеет внутри (именно с буковкой S, т.к. без буковки S без XOR-ов):


Attachments:
74S163.jpg
74S163.jpg [ 131.13 KiB | Viewed 8239 times ]

_________________
:dj: https://mastodon.social/@Shaos
18 Jan 2016 20:27
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22519
Location: Silicon Valley
Reply with quote
Вобщем вот что получилось - на каждый бит кроме двухступенчатого 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...

_________________
:dj: https://mastodon.social/@Shaos


18 Jan 2016 23:48
Profile WWW
Doomed

Joined: 10 Mar 2012 16:21
Posts: 598
Location: РФ
Reply with quote
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МГц не удавалось ( в реале - хоть на протезусы смотрю , и даже чутка доверяю , но перепроверяю обязательно - согласно высказыванию одного актёра.. )


19 Jan 2016 03:06
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22519
Location: Silicon Valley
Reply with quote
Короче для первых 3-х битов (которые будут считать такты в цикле) сделаю ещё более навороченный двух-ступенчатый D-триггер со сбросом и установкой (чтобы были симметричные задержки в плечах), а для остальных 11 битов (непосредственно PC) будут использованы триггеры попроще...

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

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


_________________
:dj: https://mastodon.social/@Shaos


19 Jan 2016 10:24
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22519
Location: Silicon Valley
Reply with quote
Вот такой синхрогенератор с программным счётчиком у меня получился:



Всего тут (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нс задержкой - что маловероятно)...

_________________
:dj: https://mastodon.social/@Shaos


19 Jan 2016 22:01
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22519
Location: Silicon Valley
Reply with quote
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 циклов : )

_________________
:dj: https://mastodon.social/@Shaos


19 Jan 2016 23:37
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22519
Location: Silicon Valley
Reply with quote
Окончательно остановился на названии nedoRISC-0 для системы команд и абстрактного процессора, а конкретная имплементация будет известна миру под наименованием NEDONAND :idea:

Вот примерные прикидки по растактовкам:
Code:
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...

_________________
:dj: https://mastodon.social/@Shaos


20 Jan 2016 19:04
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
А что у тебя симулятор какие-там диаграммы/осциллограммы не показывает?

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




P.S. А тебя Гондурас... ну то есть ЧСВ не сильно беспокоит? :o
Shaos wrote:
а конкретная имплементация будет известна миру под наименованием NEDONAND :idea:
А то ты его так навязчиво прилюдно чешешь... :wink:

_________________
iLavr


20 Jan 2016 19:37
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22519
Location: Silicon Valley
Reply with quote
Ну я же не для себя стараюсь - для человечества :lol:

А по поводу диаграмм - мы же вроде обсуждали в своё время, что логисим - отстой т.к. не имеет в своём составе виртуального осциллографа ;)

_________________
:dj: https://mastodon.social/@Shaos


20 Jan 2016 20:11
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
мы же вроде обсуждали в своё время, что логисим - отстой т.к. не имеет в своём составе виртуального осциллографа ;)

Виноват, подзабыл... :osad: поскольку с тех пор я им и не пользуюсь... :-?
У логисима только индикаторы 0 и 1 что-ли на выводах что-то показывают? :roll:

Блин... а еще все норовят плюнуть и кинуть камень в мою любимую "резиновую тётку" по фамилии Протезус! :o
А она у меня даже иголки показывает в асинхронных счетчиках! :esurprised:

_________________
iLavr


20 Jan 2016 22:40
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22519
Location: Silicon Valley
Reply with quote
В логисиме ещё логировать можно выбранные сигналы в текстовой форме, правда не по времени, а по изменениям состояния этих сигналов...

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

_________________
:dj: https://mastodon.social/@Shaos


21 Jan 2016 07:56
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22519
Location: Silicon Valley
Reply with quote
Вот тактовый генератор на 4 такта на цикл с вспомогательными выходами:



Примерно так будет:
Code:
            _________________
/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

_________________
:dj: https://mastodon.social/@Shaos


21 Jan 2016 21:53
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22519
Location: Silicon Valley
Reply with quote
Вот и демультиплексоры подоспели - слева распостраняющий нолик и справа распостраняющий единичку:

Image Image

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



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

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


_________________
:dj: https://mastodon.social/@Shaos


22 Jan 2016 01:16
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22519
Location: Silicon Valley
Reply with quote
Пока решаю проблему непредвиденных самовозбудов заменой самодельных триггеров и регистров на библиотечные из логисима...

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

_________________
:dj: https://mastodon.social/@Shaos


22 Jan 2016 07:12
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 193 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6, 7 ... 13  Next

Who is online

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