3niti alpha simu1 - троичный компьютер на двоичном пике

8-битные микроконтроллеры PICmicro (ПИКи) от Microchip и совместимые, а также 16-битные PIC24 и 32-битные PIC32

Moderator: Shaos

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

Post by Shaos »

Напоминаю как работают троичные часы - количество часов показывается в диапазоне от OOOO (0) до PONN (23), минуты и секунды в диапазоне от NONO (-30) до POPN (+29). Т.е. термин "полвторого" в случае троичных часов принимает буквальное значение - они будут показывать не 1:30, а 2:-30 :roll:
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Собрал тестовый вариант nedoSerial-2009 на печатке, полученной лутом - буду тестить последовательное соединение с PC (точнее с маком):

Image
Last edited by Shaos on 09 Apr 2010 18:37, edited 1 time in total.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

На форуме www.Ternary.info рассказываю в картинках про правильную сборку платы Rev.A:

http://ternary.info/modules/newbb/viewt ... 59&forum=4

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

Post by Shaos »

Shaos wrote:На форуме www.Ternary.info рассказываю в картинках про правильную сборку платы Rev.A:

http://ternary.info/modules/newbb/viewt ... 59&forum=4

Если кому есть что сказать-прокомментировать - прошу не стесняться :roll:
Повествование закончено! :dj:
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote:Программная эмуляция троичного процессора будет вычерпывать из внешней последовательной памяти (по I2C на частоте 400 кГц) байты, в которых будут хранится триады (два бита на один трит) с контрольным тритом, блоками по 27 триад во внутренний "кеш" команд, по которому будет проходить быстрая эмуляция. Кеша данных наверное не будет (во всяком случае пока), т.е. для данных будет прямое чтение-запись триад. По коду видно, что в переменных пика выделены две области по 27 байт - с адресами от 32 до 58 (c_base) и от 59 до 86 (d_base - эта область предполагалась для кеша данных, но скорее всего там будет вторая страницы блока команд) - именно туда будут сливаться команды для эмуляции на максимальной скорости pic16f870 - 5 миллионов команд в секунду (при тактовой частое 20 МГц). Например подпрограмма троичной инверсии (tri_neg) занимает 14 тактов - это значит что на максимальной скорости этот "эмулятор" сможет делать 357 тысяч троичных инверсий в секунду.
Внимательный читатель может спросить - почему в таблице компонентов у меня стоит 24c32 (последовательное ПЗУ на 4 КБ), а в схеме - 24c512 (последовательное ПЗУ на 64 КБ). Ответ простой - для минимальной работы достаточно 24c32, а в будущем возможна поддержка микросхем памяти вплоть до 24c512. Разве что в отличие от 24c32 и 24c64, где WP защищает от записи только старший квадрант (соответственно старшие 1 КБ и 2 КБ), а во всём, что старше (24c128, 24c256, 24c512), нога WP запрещает запись во всю память, т.е. для полноценной эмуляции троичных ПЗУ/OЗУ в одном флаконе может и не подойти. С другой стороны для этих больших микросхем вместо аппаратной можно сделать программную защиту от записи в область, эмулирующую троичное ПЗУ - т.е. любые попытки записи туда через троичные тумблеры просто не будут разрешаться эмулятором.

Чтобы определиться сколько же нам надо килобайтов, сначала вспомним описание оригинальной архитектуры 3niti alpha, где про память написано следующее:
In first prototype highest trit of address will be always 0 and remaining address space is divided to 3 equal parts:
-3280...-1094: space for peripheral devices (ternary or binary);
-1093...+1093: space for ROM with basic system program;
+1094...+3280: space for RAM with user program/data.
Как видно доступная память разделяется на три куска по 2187 триад (каждая триада будет у нас описываться одним байтом). В случае же полноценного использование всех 9 тритов для адресации троичной памяти полный диапазон адресов будет -9841...+9841, причём под ПЗУ будyт также отданы лишь средние 2187 триад, размер же ОЗУ (расположенного выше +1094 включительно) составит 8748 триад. Область периферийных устройств может также потребовать наличия памяти для эмуляции - это ещё 8748 триад. Т.е. для полноценной работы с 9-тритовыми адресами нам надо как минимум 19683 байт в нашем ПЗУ с последовательным доступом из которых желательно защитить от записи до 2187 байт.

В случае 24c32 (4 КБ) мы можем аппаратно защитить от записи старшие 1024 байта, что несколько меньше чем нужно, однако вполе достаточно на первое время - скажем они могут покрыть область троичного ПЗУ с адресами от 0 до +1023 (что означает, что старшие 71 триада и отрицательная часть троичного ПЗУ эмулироваться через двоичное ПЗУ не будут). Оставшиеся 3072 байта (что есть 3 КБ) могут быть поделены между 2187 триадами троичного ОЗУ и оставшимися 885 байтами, которые можно отнести в область периферии (адреса ниже -1094 включительно), из которых скажем 729 (для круглого троичного счёта) можно назначить буфером обмена для "умных" внешних устройств, а оставшиеся 156 зарезервировать под остальную виртуальную периферию.

В случае 24c64 (8 КБ) мы можем аппаратно защитить от записи старшие 2048 байт, что только немного меньше чем нужно (а нужно напомню 2187 триад). Оставшиеся 6 КБ полностью покроют область троичного ОЗУ и область виртуальной периферии первого прототипа, причём ещё и останется (1770 байт). Для эмуляции же полной 9-тритовой троичной памяти этого чипа будет недостаточно.

Для последовательных ПЗУ большего размера защиту от записи придётся делать программно. Чип 24c128 (16 КБ) не сможет покрыть всё доступное 9-тритное адресное пространство, однако он вполне сможет покрыть облать полного троичного ОЗУ - 8748 триад. Скажем если мы отнесём под троичное ПЗУ указанные ранее 2187 триад, то у нас останется 5449 триад, которые можно использовать под эмуляцию виртуальной периферии. Покрыть все 19683 триад при полной 9-тритной адресации сможет чип 24c256 (32 КБ), оставшуюся область которого можно использовать скажем для эмуляции троичного дискового накопителя объёмом 13085 триад. А чип 24c512 (64 КБ) будет иметь эмулируемый диск размером уже 45853 триады.

Кстати все эти последовательные ПЗУ допускают до миллиона циклов записи, т.е. их использование для эмуляции троичного ОЗУ в каком-то смысле оправдано. Хотя всегда можно отвести несколько регистров пика под часть эмулируемого троичного ОЗУ - только для наиболее часто меняющихся переменных троичных программ. Точно также несколько ячеек адресуемых в области троичного ПЗУ можно не хранить во внешнем ПЗУ, а подставлять в эмуляторе для индентификации конкретной реализации "3niti alpha", версии аппаратной части и версии программной части.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote:
Shaos wrote:На форуме www.Ternary.info рассказываю в картинках про правильную сборку платы Rev.A:

http://ternary.info/modules/newbb/viewt ... 59&forum=4

Если кому есть что сказать-прокомментировать - прошу не стесняться :roll:
Повествование закончено! :dj:
Повествование облечено в PDF форму:

http://ternary.info/ternary/3niti1-book.pdf (2.6 MB)

P.S. Вопросы использования и расширения (в троичном смысле) платы "3niti alpha simu1" предлагаю вести на нашем троичном форуме:
http://ternary.info/modules/newbb/viewt ... 64&forum=4

P.P.S. А тут лучше обсуждать всякие двоичные тонкости реализации троичного эмулятора и т.д...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote: Кстати все эти последовательные ПЗУ допускают до миллиона циклов записи, т.е. их использование для эмуляции троичного ОЗУ в каком-то смысле оправдано. Хотя всегда можно отвести несколько регистров пика под часть эмулируемого троичного ОЗУ - только для наиболее часто меняющихся переменных троичных программ. Точно также несколько ячеек адресуемых в области троичного ПЗУ можно не хранить во внешнем ПЗУ, а подставлять в эмуляторе для индентификации конкретной реализации "3niti alpha", версии аппаратной части и версии программной части.
Подумалось мне, что наверное жирно юзать ПЗУ как ОЗУ - у нас ведь I2C куда можно ещё и срам подцепить, например такой как PCF8570 (он правда всего на 256 байт):

http://search.digikey.com/scripts/DkSea ... -1071-5-ND

С другой стороны наверное такое расширение можно отложить на будущее, а пока юзать одну страницу ОЗУ (27 триад) как быструю память, находящуюся непосредственно в памяти пика, а всё остальное - как медленную память, находящуюся в последовательном пзу. Кроме того у этого пика есть 64 байта EEPROM, что также можно заюзать под конфигурацию либо под часть эмулируемого троичного пзу
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

А вообще ОЗУ в тринити для двух разных целей может быть предназначено:
1) хранение введённой юзером программы (или загруженной с компьютера)
2) переменные необходимые для работы программ из ПЗУ и ОЗУ
Вот как раз первый пункт вполне можно раположить в ПЗУ I2C, а второй - желательно иметь или внутри пика, или в сраме

P.S. Кстати PIC16F870 (и его старший брат PIC16F871) позволяют читать и писать память программ (т.е. флеш) программно, т.е. свободную область кода можно юзать как троичное ПЗУ (две триады на одно слово) ну и загрузку прошивки прямо в плату можно теоретически организовать (т.е. без программатора)
Я тут за главного - если что шлите мыло на me собака shaos точка net
Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

Post by Mac Buster »

Shaos wrote: P.S. Кстати PIC16F870 (и его старший брат PIC16F871) позволяют читать и писать память программ (т.е. флеш) программно, т.е. свободную область кода можно юзать как троичное ПЗУ (две триады на одно слово) ну и загрузку прошивки прямо в плату можно теоретически организовать (т.е. без программатора)
А каков ресурс, сколько раз можно записать?
Extreme Entertainment
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Mac Buster wrote:
Shaos wrote: P.S. Кстати PIC16F870 (и его старший брат PIC16F871) позволяют читать и писать память программ (т.е. флеш) программно, т.е. свободную область кода можно юзать как троичное ПЗУ (две триады на одно слово) ну и загрузку прошивки прямо в плату можно теоретически организовать (т.е. без программатора)
А каков ресурс, сколько раз можно записать?
Я уже писал чуть выше - до миллиона циклов перезаписи

P.S. Хотя я это про ПЗУ писал, но тем не менее - до миллиона и там, и тут...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote:Кстати PIC16F870 (и его старший брат PIC16F871) позволяют читать и писать память программ (т.е. флеш) программно, т.е. свободную область кода можно юзать как троичное ПЗУ (две триады на одно слово) ну и загрузку прошивки прямо в плату можно теоретически организовать (т.е. без программатора)
В связи с этим хочу сделать встроенный бутлоадер, который при старте платы, если крайний правый переключатель находится в верхнем положении (т.е. режим "Step"), будет ожидать ввода HEX-прошивки непосредственно через последовательный порт. При этом программа будет сама себя защищать - отказываться писать те части прошивки, которые будут залезать на бутлоадер.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote:
Mac Buster wrote:
Shaos wrote: P.S. Кстати PIC16F870 (и его старший брат PIC16F871) позволяют читать и писать память программ (т.е. флеш) программно, т.е. свободную область кода можно юзать как троичное ПЗУ (две триады на одно слово) ну и загрузку прошивки прямо в плату можно теоретически организовать (т.е. без программатора)
А каков ресурс, сколько раз можно записать?
Я уже писал чуть выше - до миллиона циклов перезаписи

P.S. Хотя я это про ПЗУ писал, но тем не менее - до миллиона и там, и тут...
Стал читать даташит внимательнее - не вижу информации о количестве циклов перезаписи
Посторонние источники говорят о 1000 циклах для флеша и 100000 циклах для EEPROM...
Я тут за главного - если что шлите мыло на me собака shaos точка net
Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

Post by Mac Buster »

Shaos wrote:Стал читать даташит внимательнее - не вижу информации о количестве циклов перезаписи
Посторонние источники говорят о 1000 циклах для флеша и 100000 циклах для EEPROM...
Тест?
Extreme Entertainment
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Mac Buster wrote:
Shaos wrote:Стал читать даташит внимательнее - не вижу информации о количестве циклов перезаписи
Посторонние источники говорят о 1000 циклах для флеша и 100000 циклах для EEPROM...
Тест?
Только вчера нашёл почти в самом конце даташита в таблице где наряду с разным электрическими и временными параметрами стоят эти цифры - 1000 циклов перезаписи для Flash и 100 000 циклов для EEPROM...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Прибыли платы Rev.B:

Image
Я тут за главного - если что шлите мыло на me собака shaos точка net