nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 24 May 2020 18:29



Reply to topic  [ 65 posts ]  Go to page Previous  1, 2, 3, 4, 5  Next
Троичная перепрограммируемая микросхема TERNARO (TRI00) 
Author Message
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18573
Location: Silicon Valley
Reply with quote
petrenko wrote:
Трёхпортовую RAM на рассыпухе ? :roll:

А ежели с ассоциативными тегами ?

Ну я могу только посоветовать, не более ..


А зачем нам ассоциативные теги? ;)

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


22 Oct 2015 17:36
Profile WWW
Doomed

Joined: 10 Mar 2012 17:21
Posts: 601
Location: РФ
Reply with quote
Shaos wrote:
..А зачем нам ассоциативные теги? ;)
Немного перефразируя : " - А зачем червонец ? - Керосинку покупать. "(С)
Sело ускоряет XCHG (,он же иногда SWAP) - вместо реальных передач между регистрами у них просто меняются имена-теги. Для этого, разумеется, регистры адресуются не жёстко, а ассоциативно, через эти самые теги. И + ещё много всяких творческих няшек. Например можно иметь виртуальных регистров больше, чем есть реальных - если реальных допустим 27 , а именные поля тегов допустим четырёхтритовые, то работаем как бы с 81 ( и еще двухтритовое поле режима доступа к регистру :wink: ) .


22 Oct 2015 18:07
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18573
Location: Silicon Valley
Reply with quote
Post Re:
Shaos wrote:
Просмотрел свои стандартные компоненты - там у 12-ногих вроде как из 9 IO может быть до 8 входов и до 4 выходов, значит отсюда и пляшем - скажем пусть можно будет построить ещё и ROM или RAM - для ROM можно сделать 3-тритные данные (всегда на выход) и 6-тритный адрес (729 триад), а для RAM 4-тритные данные (причём и на вход и на выход), 1 трит управления (N-запись, O-неподкл, P-вывод) и оставшиеся 4 трит будут адресом (81 трида с дополнительным тритом контроля).


На самом деле 8 входов только у одного элемента и им можно пожертвовать - у всех остальных элементов без памяти (кроме селекторов которые лучше делать на селекторах) входов 6 и меньше - получается что на троичном ПЗУ с 6 адресными входами и 4 выходами данных можно построить аналоги большинства моих троичных элементов!
Code:
  A0--|1  40|--VPOS
  A1--|2  39|--VINT
  A2--|3  38|--VNEG
  A3--|4  37|--IO9
  A4--|5  36|--IO8
  A5--|6  35|--IO7
  D0--|7  34|--IO6
  D1--|8  33|--IO5
  D2--|9  32|--IO4
  D3--|10 31|--IO3
  E3--|11 30|--IO2
  P3--|12 29|--IO1
  S3--|13 28|--
  T0--|14 27|--
  T1--|15 26|--RDY
  T2--|16 25|--SCK
  T3--|17 24|--SDO
MODE--|18 23|--SDI
MSTR--|19 22|--_CS
VNEG--|20 21|--_RES

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


23 Oct 2015 19:30
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18573
Location: Silicon Valley
Reply with quote
Ну вот - прошёл только месяц, а я уже забыл что такое E3, P3, MSTR и T0-T3 :(

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


21 Nov 2015 20:46
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Бывает!.. :ebiggrin: Я два дня 4-битник доделываю - вобще как заново делаю: ничего не помню...
С другой стороны - хорошо: не довлеют старые решения, которые казались незыблемыми.
Ну и радует, что я подробно всё же в ветку 4-bit Processor весь процесс записывал - помогает вспомнить! :ewink:

_________________
iLavr


22 Nov 2015 10:57
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18573
Location: Silicon Valley
Reply with quote
Форум мне тоже помогает вспомнить, но это только если в форуме все детали фиксировать, а на это к сожалению времени не всегда хватает...

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


22 Nov 2015 16:40
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18573
Location: Silicon Valley
Reply with quote
Post Re:
Shaos wrote:
Shaos wrote:
В качестве базового элемента, множество инстансов которого будут жить внутри кремния, можно взять не отдельный селектор 3:1, а чуть покрупнее - управляемый двумя троичными входами мультиплексор 9:1, составленный из 4 маленьких селекторов:

Image

Интересной особенностью этой схемы является то, что она может легко превратится в ячейку троичной памяти с 6 входами (запоминание происходит на среднем левом мультиплексоре, подключенном в качестве буфера с обратной связью от выходного селектора):

Image

Если на левый сигнал управления подавать всегда O, то схема вырождается в стандартный двух-входовый элемент MEM...


Троичный LUT, способный превращаться в троичную ячейку памяти, может выглядеть вот так (нарисовано и сэмулировано в Logisim):

Image

А отдельно троичная ячейка памяти с двумя входами (тот самый MEM) выглядит вот так:

Image

Тут левый троичный селектор подключён как буфер, а правый троичный селектор работает как ключ, подающий обратно на вход буфера либо его же выход, либо один из троичных входов для сохранения троичного сигнала...

Нашёл свои бумажные записки от 17 октября 2015 года где тема троичного FPGA была несколько более развита

Вобщем суть в том, что основным блоком является показанный выше мультиплексор 9к1, который может быть подключен как память (а может как LUT) далее эти блоки расположены в двумерной сетке между ячейками которой проходят соединительные сигналы - восемь горизонтальных и девять вертикальных линий, коммуникации между которыми производятся в узлах сетки девятью троичными селекторами 9к1 (работающими в обе стороны и без возможности превращения в память) - причём к самому центральному каналу ничего не подведено (отсюда и 8 горизонтальных линий), а каждый выход (вход если работаем как демультиплексор) подключен к вертикальной линии. Далее входы и выходы блоков с памятью подключаются как-то к этим горизонтальным и вертикальным каналам, но как я тогда ещё не успел придумать :roll:

P.S. Троичный 9-входовой LUT будет программироваться 9 троичными значениями, управляться 2 троичными входами и будет иметь один троичный выход. Будучи подключенным в режиме MEM средний-левый мультиплексор будет ВСЕГДА подключен как NOP (буфер), а верхний-левый и нижний-левый должны иметь возможность быть подключенными как мультиплексоры, коммутирующие какие-то входные сигналы, а не константы, например режим ячейки может задаваться ещё одним (10м) программирующим троичным значением:
N - обратная связь включена, верхний элемент подключен к дополнительным входам, а нижний - к константам;
O - обратная связь отключена, все 3 входных элемента подключены к константам;
P - обратная связь включена, верхний элемент подключен к константам, а нижний - к дополнительным входам.
Получается у нас в этом режиме будет 2+3=5 троичных входов, но всё также один троичный выход.
Входы LUT/MEM-блоков можно цеплять к вертикальным соединительным линиям, а выходы - к горизонтальным...

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


17 Jul 2018 23:21
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18573
Location: Silicon Valley
Reply with quote
Хотя наверное полноценный 9-входовой мультиплексор также будет нужен - значит надо уметь независимо управлять всеми входами - подключая их либо к константам (обозначенным иксом на картинке, как и все остальные программируемые извне точки), либо к соединительным линиям (которые через интерконнекты уходят в вертикальные каналы):

Attachment:
9to1.jpg
9to1.jpg [ 76.35 KiB | Viewed 3383 times ]


А интерконнект в узлах сетки визуально выглядит так (тут подразумевается девять селекторов 9-к-1, причём вход 00 висит в воздухе):

Attachment:
ternaro-interconnect.jpg
ternaro-interconnect.jpg [ 59.54 KiB | Viewed 3383 times ]


P.S. Кстати а почему девять? По идее их может быть сколь угодно много - по количеству вертикальных сигналов в каждом канале...

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


18 Jul 2018 21:14
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18573
Location: Silicon Valley
Reply with quote
На самом деле этот троичный FPGA (или лучше сказать TPLD = Ternary Programmable Logic Device?) будет настраиваться двоичным битстримом (который будет заливаться из внешней двоичной памяти с последовательным доступом), соответственно отсюда и надо плясать, например троичную константу вместо одного троичного значения будут задавать 2 бита (xx), у которых будет четвёртое состояние (11), которое можно использовать как признак того, что данный вход не является константой, а подключается к внешним каналам:

Attachment:
ternaro-9to1mux.jpg
ternaro-9to1mux.jpg [ 65 KiB | Viewed 3362 times ]


Видно, что каждый такой логический блок будет иметь 1 выход и 11 входов (9 из которых могут быть константами - причём константы высвобождают соответствующие вертикальные каналы для глобального интерконнекта, соединяющего логические блоки в разных концах матрицы). Получается, что если элемент работает в режиме MEM (x=1), то средний входной мультиплексор в обязательном порядке должен быть запитан тремя константами 10,00,01 (NOP), иначе оно не будет защёлкивать состояние.

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


21 Jul 2018 00:55
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18573
Location: Silicon Valley
Reply with quote
Наверное можно ещё один однобит завести, который разделит управление верхнего и нижнего мультиплексора в режиме MEM.
А то может и два - чтобы все три входных мультиплексора могли управляться независимо друг от друга (и не только в режиме MEM):


Attachments:
ternaro-9to1mux2.jpg
ternaro-9to1mux2.jpg [ 91.28 KiB | Viewed 3360 times ]

_________________
:eugeek: https://twitter.com/Shaos1973
21 Jul 2018 01:34
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18573
Location: Silicon Valley
Reply with quote
А чтобы количество программирующих битов было кратным 8 (для целого числа управляющих байтов), можно ещё 3 битика добавить (добив тем самым до 24 битов на логический блок). Интерконнект также можно обинарить, сделав не 9-1 горизонтальных сигналов, а 8-1, управляемых тремя битами, что даст 11*3=33 управляющих бита на каждый логический блок (для круглоты можно убрать один битик, уменьшив число возможных переподключений одного из входов, например управляющего входа последнего мультиплексора). Ну или 16-1, управляемых четырьмя битами, что даст 11*4=44 управляющих бита на каждый логический блок (т.е. это будет 3 байта на сам логический блок и ещё 6 байт на блок интерконнекта, покрывающий этот логический блок):


Attachments:
ternaro-9to1mux3.jpg
ternaro-9to1mux3.jpg [ 137.51 KiB | Viewed 3356 times ]

_________________
:eugeek: https://twitter.com/Shaos1973
21 Jul 2018 02:02
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18573
Location: Silicon Valley
Reply with quote
Последний, третий вариант, перерисовывал и подрисовывал раз пять наверное :oops:

Вобщем если у нас в микросхеме TERNARO имеется 9 возможных входов, то делаем 9 горизонтальных каналов по 15 линий, как на рисунке выше - 14 линий будут выходами 7 логических блоков, расположенных по горизонтали и 15-ая линия это соответствуюший вход (а 0, как мы помним, означает неподключение ни одной горизонтали к вертикальному сигналу в данной точке) - получается у нас будет 9 * 7 = 63 троичных логических блока (каждый будет программироваться 3 байтами) и столько же блоков интерконнекта (каждый будет программироваться 6 байтами). Выходит, что длина битстрима для программирования такой троичной логической матрицы будет 567 байт...

P.S. Объём троичного ПЗУ, построенного на такой матрице, в пределе может достигать 567 тритов (189 триад) - это если каждый логический блок будет использоваться как 1-тритная ячейка на 9 адресов (но т.к. для ПЗУ ещё нужна будет схема управления и адресации, то фактически тритов чисто на память будет меньше - надо прикинуть сколько).

P.P.S. На самом деле задействовать все горизонтальные линии под выходы логических блоков неправильно - некоторые горизонтали должны быть свободны для организации магистралей для соединения разных секций, ну либо AUX сделать таким, чтобы он отключал вспомогательный выход вовсе - тогда например INDEPENDENT будет управлять обеими плечами, а высвободившийся бит можно пустить на управление отключением-подключением промежуточных выходов (я думаю это было бы полезно для отладки и для составления более мелких схем) т.е. AUX будет управляться двумя битами вместо одного (в таком случае даже чтение среднего мультиплексора в первом ряду можно задействовать - 00 будет означать неподключение AUX, 01 будет означать первый входной мультиплексор, 10 будет означать второй и 11 будет означать третий). Формат битстрима - сверху вниз слева направо каждая пара логический блок - блок интерконнекта (на самом деле несколько блоков интерконнекта по числу каналов - см. далее) будет описываться так:
Code:
Byte 0 - 1st selector:
 bit 0 - input N of 1st selector
 bit 1 /
 bit 2 - input O of 1st selector
 bit 3 /
 bit 4 - input P of 1st selector
 bit 5 /
 bit 6 - make 1st selector E12
 bit 7 - make 3rd selector E21

Byte 1 - 2nd selector:
 bit 0 - input N of 2nd selector
 bit 1 /
 bit 2 - input O of 2nd selector
 bit 3 /
 bit 4 - input P of 2nd selector
 bit 5 /
 bit 6 - connect feedback line to form MEM block
 bit 7 - make 1st and 3rd selectors independent

Byte 2 - 3rd selector:
 bit 0 - input N of 3rd selector
 bit 1 /
 bit 2 - input O of 3rd selector
 bit 3 /
 bit 4 - input P of 3rd selector
 bit 5 /
 bit 6 - AUX line control (00 - not connected, 01 - 1st selector output, 10 - 2nd selector output, 11 - 3rd selector output)
 bit 7 /

Byte 3 - 1st and 2nd vertical line control (0000 means not connected)
Byte 4 - 3rd and 4th vertical line control (0000 means not connected)
Byte 5 - 5th and 6th vertical line control (0000 means not connected)
Byte 6 - 7th and 8th vertical line control (0000 means not connected)
Byte 7 - 9th and 10th vertical line control (0000 means not connected)
Byte 8 - 11th and 12th vertical line control (0000 means not connected)
...

12-я линия добавлена про запас - раз уж есть такая возможность...

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


21 Jul 2018 03:14
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18573
Location: Silicon Valley
Reply with quote
Хм, по идее ВСЕ вертикальные линии должны иметь возможность заинтерконнектиться со ВСЕМИ горизонтальными - значит число интерконнектов будет зависеть не только от числа логических блоков, но и от числа горизонтальных каналов! При 9 каналах (9 входах) у нас будет ДЕВЯТЬ блоков интерконнекта на КАЖДЫЙ троичный логический блок - значит для полноценного программирования нам понадобится (3+9*6)*63 = 3591 байт!!!

P.S. На самом деле логический блок можно сделать потяжелей - скажем чтобы можно было E12 (XYY) и E21 (XXY) назначать любой из входных мультиплексоров, высвобождая соответствующие вертикальные сигналы, а также скажем добавить возможность включать предопределённые конфигурации как полный сумматор например (точнее его части), регистр срабатывающий по фронту и т.д. ( хотя эти усложнения можно оставить для будущего TERNARO-2 ; )

P.P.S. Первую микросхему можно выпустить попроще - например в виде матрицы 2x2 или 3x3 вместо вышеописанных 7x9 логических блоков - вот например как будет выглядеть 2x2:


Attachments:
ternaro-9to1mux3-2x2.png
ternaro-9to1mux3-2x2.png [ 216.64 KiB | Viewed 3352 times ]

_________________
:eugeek: https://twitter.com/Shaos1973
21 Jul 2018 04:25
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18573
Location: Silicon Valley
Reply with quote
Важно понимать, что "TERNARY INTERCONNECT" в данном случае сугубо двоичный блок, способный коммуницировать АНАЛОГОВЫЕ сигналы в коммутаторе 12x15 (т.е. внутри будет много CMOS-ключей работающих в обе стороны - я такую штуку строил в своей микросхеме 2015 года и она работала) - вобщем пока всё выглядит очень даже радужно :roll:

P.S. Для отладки можно предусмотреть возможность снятия состояний всех горизонтальных линий через последовательный интерфейс (точно также по 2 бита на трит) либо адресовать их N-битным адресом (их всего 135 предполагается в полноценном варианте 7x9 из которых 9 будут входами, что уменьшает интересуемое количество до 126, умещаясь в 7 бит адреса)

P.P.S. Ещё в полноценном варианте можно предусмотреть отключение половинок-четвертинок если вдруг будет брак производства (точнее наверное это будет выбор 3-4-7 столбцов)

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


21 Jul 2018 05:44
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18573
Location: Silicon Valley
Reply with quote
Вот так в TERNARO можно будет реализовать троичный полусумматор:

Attachment:
ternaro-halfadder.jpg
ternaro-halfadder.jpg [ 56.63 KiB | Viewed 3344 times ]


Как можно видеть здесь задействовано 2 логических блока (причём которые необязательно расположены рядом друг с другом) и 4 ноги

Кругляками отмечены точки интерконнекта (как я и писал выше, там просто CMOS-ключи, работающие в обе стороны)

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


21 Jul 2018 11:37
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 65 posts ]  Go to page Previous  1, 2, 3, 4, 5  Next

Who is online

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