А зачем нам ассоциативные теги?petrenko wrote:Трёхпортовую RAM на рассыпухе ?![]()
А ежели с ассоциативными тегами ?
Ну я могу только посоветовать, не более ..
Троичная перепрограммируемая микросхема TERNARO (TRI00)
Moderator: haqreu
-
Shaos
- Admin
- Posts: 24433
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Троичная перепрограммируемая микросхема TERNARO (TRI00)
-
petrenko
- Doomed
- Posts: 598
- Joined: 10 Mar 2012 16:21
- Location: РФ
Re: Троичная перепрограммируемая микросхема TERNARO (TRI00)
Немного перефразируя : " - А зачем червонец ? - Керосинку покупать. "(С)Shaos wrote:..А зачем нам ассоциативные теги?
Sело ускоряет XCHG (,он же иногда SWAP) - вместо реальных передач между регистрами у них просто меняются имена-теги. Для этого, разумеется, регистры адресуются не жёстко, а ассоциативно, через эти самые теги. И + ещё много всяких творческих няшек. Например можно иметь виртуальных регистров больше, чем есть реальных - если реальных допустим 27 , а именные поля тегов допустим четырёхтритовые, то работаем как бы с 81 ( и еще двухтритовое поле режима доступа к регистру
-
Shaos
- Admin
- Posts: 24433
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re:
На самом деле 8 входов только у одного элемента и им можно пожертвовать - у всех остальных элементов без памяти (кроме селекторов которые лучше делать на селекторах) входов 6 и меньше - получается что на троичном ПЗУ с 6 адресными входами и 4 выходами данных можно построить аналоги большинства моих троичных элементов!Shaos wrote:Просмотрел свои стандартные компоненты - там у 12-ногих вроде как из 9 IO может быть до 8 входов и до 4 выходов, значит отсюда и пляшем - скажем пусть можно будет построить ещё и ROM или RAM - для ROM можно сделать 3-тритные данные (всегда на выход) и 6-тритный адрес (729 триад), а для RAM 4-тритные данные (причём и на вход и на выход), 1 трит управления (N-запись, O-неподкл, P-вывод) и оставшиеся 4 трит будут адресом (81 трида с дополнительным тритом контроля).
Code: Select all
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
-
Shaos
- Admin
- Posts: 24433
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Троичная перепрограммируемая микросхема TERNARO (TRI00)
Ну вот - прошёл только месяц, а я уже забыл что такое E3, P3, MSTR и T0-T3 
-
Lavr
- Supreme God
- Posts: 16804
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: Троичная перепрограммируемая микросхема TERNARO (TRI00)
Бывает!..
Я два дня 4-битник доделываю - вобще как заново делаю: ничего не помню...
С другой стороны - хорошо: не довлеют старые решения, которые казались незыблемыми.
Ну и радует, что я подробно всё же в ветку 4-bit Processor весь процесс записывал - помогает вспомнить!
С другой стороны - хорошо: не довлеют старые решения, которые казались незыблемыми.
Ну и радует, что я подробно всё же в ветку 4-bit Processor весь процесс записывал - помогает вспомнить!
iLavr
-
Shaos
- Admin
- Posts: 24433
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Троичная перепрограммируемая микросхема TERNARO (TRI00)
Форум мне тоже помогает вспомнить, но это только если в форуме все детали фиксировать, а на это к сожалению времени не всегда хватает...
-
Shaos
- Admin
- Posts: 24433
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re:
Нашёл свои бумажные записки от 17 октября 2015 года где тема троичного FPGA была несколько более развитаShaos wrote:Троичный LUT, способный превращаться в троичную ячейку памяти, может выглядеть вот так (нарисовано и сэмулировано в Logisim):Shaos wrote:В качестве базового элемента, множество инстансов которого будут жить внутри кремния, можно взять не отдельный селектор 3:1, а чуть покрупнее - управляемый двумя троичными входами мультиплексор 9:1, составленный из 4 маленьких селекторов:
Интересной особенностью этой схемы является то, что она может легко превратится в ячейку троичной памяти с 6 входами (запоминание происходит на среднем левом мультиплексоре, подключенном в качестве буфера с обратной связью от выходного селектора):
Если на левый сигнал управления подавать всегда O, то схема вырождается в стандартный двух-входовый элемент MEM...
А отдельно троичная ячейка памяти с двумя входами (тот самый MEM) выглядит вот так:
Тут левый троичный селектор подключён как буфер, а правый троичный селектор работает как ключ, подающий обратно на вход буфера либо его же выход, либо один из троичных входов для сохранения троичного сигнала...
Вобщем суть в том, что основным блоком является показанный выше мультиплексор 9к1, который может быть подключен как память (а может как LUT) далее эти блоки расположены в двумерной сетке между ячейками которой проходят соединительные сигналы - восемь горизонтальных и девять вертикальных линий, коммуникации между которыми производятся в узлах сетки девятью троичными селекторами 9к1 (работающими в обе стороны и без возможности превращения в память) - причём к самому центральному каналу ничего не подведено (отсюда и 8 горизонтальных линий), а каждый выход (вход если работаем как демультиплексор) подключен к вертикальной линии. Далее входы и выходы блоков с памятью подключаются как-то к этим горизонтальным и вертикальным каналам, но как я тогда ещё не успел придумать
P.S. Троичный 9-входовой LUT будет программироваться 9 троичными значениями, управляться 2 троичными входами и будет иметь один троичный выход. Будучи подключенным в режиме MEM средний-левый мультиплексор будет ВСЕГДА подключен как NOP (буфер), а верхний-левый и нижний-левый должны иметь возможность быть подключенными как мультиплексоры, коммутирующие какие-то входные сигналы, а не константы, например режим ячейки может задаваться ещё одним (10м) программирующим троичным значением:
N - обратная связь включена, верхний элемент подключен к дополнительным входам, а нижний - к константам;
O - обратная связь отключена, все 3 входных элемента подключены к константам;
P - обратная связь включена, верхний элемент подключен к константам, а нижний - к дополнительным входам.
Получается у нас в этом режиме будет 2+3=5 троичных входов, но всё также один троичный выход.
Входы LUT/MEM-блоков можно цеплять к вертикальным соединительным линиям, а выходы - к горизонтальным...
-
Shaos
- Admin
- Posts: 24433
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Троичная перепрограммируемая микросхема TERNARO (TRI00)
Хотя наверное полноценный 9-входовой мультиплексор также будет нужен - значит надо уметь независимо управлять всеми входами - подключая их либо к константам (обозначенным иксом на картинке, как и все остальные программируемые извне точки), либо к соединительным линиям (которые через интерконнекты уходят в вертикальные каналы):
А интерконнект в узлах сетки визуально выглядит так (тут подразумевается девять селекторов 9-к-1, причём вход 00 висит в воздухе):
P.S. Кстати а почему девять? По идее их может быть сколь угодно много - по количеству вертикальных сигналов в каждом канале...
А интерконнект в узлах сетки визуально выглядит так (тут подразумевается девять селекторов 9-к-1, причём вход 00 висит в воздухе):
P.S. Кстати а почему девять? По идее их может быть сколь угодно много - по количеству вертикальных сигналов в каждом канале...
You do not have the required permissions to view the files attached to this post.
-
Shaos
- Admin
- Posts: 24433
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Троичная перепрограммируемая микросхема TERNARO (TRI00)
На самом деле этот троичный FPGA (или лучше сказать TPLD = Ternary Programmable Logic Device?) будет настраиваться двоичным битстримом (который будет заливаться из внешней двоичной памяти с последовательным доступом), соответственно отсюда и надо плясать, например троичную константу вместо одного троичного значения будут задавать 2 бита (xx), у которых будет четвёртое состояние (11), которое можно использовать как признак того, что данный вход не является константой, а подключается к внешним каналам:
Видно, что каждый такой логический блок будет иметь 1 выход и 11 входов (9 из которых могут быть константами - причём константы высвобождают соответствующие вертикальные каналы для глобального интерконнекта, соединяющего логические блоки в разных концах матрицы). Получается, что если элемент работает в режиме MEM (x=1), то средний входной мультиплексор в обязательном порядке должен быть запитан тремя константами 10,00,01 (NOP), иначе оно не будет защёлкивать состояние.
Видно, что каждый такой логический блок будет иметь 1 выход и 11 входов (9 из которых могут быть константами - причём константы высвобождают соответствующие вертикальные каналы для глобального интерконнекта, соединяющего логические блоки в разных концах матрицы). Получается, что если элемент работает в режиме MEM (x=1), то средний входной мультиплексор в обязательном порядке должен быть запитан тремя константами 10,00,01 (NOP), иначе оно не будет защёлкивать состояние.
You do not have the required permissions to view the files attached to this post.
-
Shaos
- Admin
- Posts: 24433
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Троичная перепрограммируемая микросхема TERNARO (TRI00)
Наверное можно ещё один однобит завести, который разделит управление верхнего и нижнего мультиплексора в режиме MEM.
А то может и два - чтобы все три входных мультиплексора могли управляться независимо друг от друга (и не только в режиме MEM):
А то может и два - чтобы все три входных мультиплексора могли управляться независимо друг от друга (и не только в режиме MEM):
You do not have the required permissions to view the files attached to this post.
-
Shaos
- Admin
- Posts: 24433
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Троичная перепрограммируемая микросхема TERNARO (TRI00)
А чтобы количество программирующих битов было кратным 8 (для целого числа управляющих байтов), можно ещё 3 битика добавить (добив тем самым до 24 битов на логический блок). Интерконнект также можно обинарить, сделав не 9-1 горизонтальных сигналов, а 8-1, управляемых тремя битами, что даст 11*3=33 управляющих бита на каждый логический блок (для круглоты можно убрать один битик, уменьшив число возможных переподключений одного из входов, например управляющего входа последнего мультиплексора). Ну или 16-1, управляемых четырьмя битами, что даст 11*4=44 управляющих бита на каждый логический блок (т.е. это будет 3 байта на сам логический блок и ещё 6 байт на блок интерконнекта, покрывающий этот логический блок):
You do not have the required permissions to view the files attached to this post.
-
Shaos
- Admin
- Posts: 24433
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Троичная перепрограммируемая микросхема TERNARO (TRI00)
Последний, третий вариант, перерисовывал и подрисовывал раз пять наверное
Вобщем если у нас в микросхеме 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 будет означать третий). Формат битстрима - сверху вниз слева направо каждая пара логический блок - блок интерконнекта (на самом деле несколько блоков интерконнекта по числу каналов - см. далее) будет описываться так:
12-я линия добавлена про запас - раз уж есть такая возможность...
Вобщем если у нас в микросхеме 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: Select all
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)
...
-
Shaos
- Admin
- Posts: 24433
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Троичная перепрограммируемая микросхема TERNARO (TRI00)
Хм, по идее ВСЕ вертикальные линии должны иметь возможность заинтерконнектиться со ВСЕМИ горизонтальными - значит число интерконнектов будет зависеть не только от числа логических блоков, но и от числа горизонтальных каналов! При 9 каналах (9 входах) у нас будет ДЕВЯТЬ блоков интерконнекта на КАЖДЫЙ троичный логический блок - значит для полноценного программирования нам понадобится (3+9*6)*63 = 3591 байт!!!
P.S. На самом деле логический блок можно сделать потяжелей - скажем чтобы можно было E12 (XYY) и E21 (XXY) назначать любой из входных мультиплексоров, высвобождая соответствующие вертикальные сигналы, а также скажем добавить возможность включать предопределённые конфигурации как полный сумматор например (точнее его части), регистр срабатывающий по фронту и т.д. ( хотя эти усложнения можно оставить для будущего TERNARO-2 ; )
P.P.S. Первую микросхему можно выпустить попроще - например в виде матрицы 2x2 или 3x3 вместо вышеописанных 7x9 логических блоков - вот например как будет выглядеть 2x2:
P.S. На самом деле логический блок можно сделать потяжелей - скажем чтобы можно было E12 (XYY) и E21 (XXY) назначать любой из входных мультиплексоров, высвобождая соответствующие вертикальные сигналы, а также скажем добавить возможность включать предопределённые конфигурации как полный сумматор например (точнее его части), регистр срабатывающий по фронту и т.д. ( хотя эти усложнения можно оставить для будущего TERNARO-2 ; )
P.P.S. Первую микросхему можно выпустить попроще - например в виде матрицы 2x2 или 3x3 вместо вышеописанных 7x9 логических блоков - вот например как будет выглядеть 2x2:
You do not have the required permissions to view the files attached to this post.
-
Shaos
- Admin
- Posts: 24433
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Троичная перепрограммируемая микросхема TERNARO (TRI00)
Важно понимать, что "TERNARY INTERCONNECT" в данном случае сугубо двоичный блок, способный коммуницировать АНАЛОГОВЫЕ сигналы в коммутаторе 12x15 (т.е. внутри будет много CMOS-ключей работающих в обе стороны - я такую штуку строил в своей микросхеме 2015 года и она работала) - вобщем пока всё выглядит очень даже радужно 
P.S. Для отладки можно предусмотреть возможность снятия состояний всех горизонтальных линий через последовательный интерфейс (точно также по 2 бита на трит) либо адресовать их N-битным адресом (их всего 135 предполагается в полноценном варианте 7x9 из которых 9 будут входами, что уменьшает интересуемое количество до 126, умещаясь в 7 бит адреса)
P.P.S. Ещё в полноценном варианте можно предусмотреть отключение половинок-четвертинок если вдруг будет брак производства (точнее наверное это будет выбор 3-4-7 столбцов)
P.S. Для отладки можно предусмотреть возможность снятия состояний всех горизонтальных линий через последовательный интерфейс (точно также по 2 бита на трит) либо адресовать их N-битным адресом (их всего 135 предполагается в полноценном варианте 7x9 из которых 9 будут входами, что уменьшает интересуемое количество до 126, умещаясь в 7 бит адреса)
P.P.S. Ещё в полноценном варианте можно предусмотреть отключение половинок-четвертинок если вдруг будет брак производства (точнее наверное это будет выбор 3-4-7 столбцов)
-
Shaos
- Admin
- Posts: 24433
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Троичная перепрограммируемая микросхема TERNARO (TRI00)
Вот так в TERNARO можно будет реализовать троичный полусумматор:
Как можно видеть здесь задействовано 2 логических блока (причём которые необязательно расположены рядом друг с другом) и 4 ноги
Кругляками отмечены точки интерконнекта (как я и писал выше, там просто CMOS-ключи, работающие в обе стороны)
Как можно видеть здесь задействовано 2 логических блока (причём которые необязательно расположены рядом друг с другом) и 4 ноги
Кругляками отмечены точки интерконнекта (как я и писал выше, там просто CMOS-ключи, работающие в обе стороны)
You do not have the required permissions to view the files attached to this post.




