Троичный RISC-V

Уравновешенная троичная система счисления - форум переехал с http://ternary.info

Moderator: haqreu

User avatar
askfind
Devil
Posts: 845
Joined: 04 Jan 2016 09:15
Location: Russia, S.- Peterburg

Троичный RISC-V

Post by askfind »

Участникам здоровый привет из санатория "Старая Русса"!

Новости
По теме "Троичный RISC-V"


Продолжаю активное обучение языку программирования цифровых схем Verilog. Прочитал несколько книг. Скачивал примеры для FPGA. Исходные проекты реализации двоичных цифровых элементов для построения цифровых вычислителей.

Нашёл репозиторий К.Владимирова по цифровому синтезу схем на Verilog с документацией, примерами. Это будет шаблон для написания материалов по синтезу троичных элементов. "DDLM: Digital Design Lab Manual RISC-V" Исходные коды к главам книги".

Выбрал простой исходный проект двоичного процессора RISC-V 'Toy implementation of a RISC-V RV32E instruction set in Verilog ' - https://github.com/nettok/RV32E.git

Создал проект в системе проектирования GoWin IDE для отладочной платы Tang nano 9к.

Именно в RV32E проект буду добавлять новые специализированные инструкции работы с троичными типами данных на аппаратном уровне.

Создал проект 'fpga_digital_ternary' для FPGA, в котором реализую базовые троичные цифровые элементы для переноса в проект RV32E. Внутри файл Makefile для симуляции и тестирования базовых троичных элементов.
You do not have the required permissions to view the files attached to this post.
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
User avatar
askfind
Devil
Posts: 845
Joined: 04 Jan 2016 09:15
Location: Russia, S.- Peterburg

Re: Троичный RISC-V

Post by askfind »

В железе продолжу делать риск -5 в FPGA.

За основу взял проект https://github.com/nettok/RV32E.git
Биты заменю на триты.

Кстати, RISC-V TRIT будет полностью совместим с двоичным в части системы разработки, тестов и т.д.
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
User avatar
askfind
Devil
Posts: 845
Joined: 04 Jan 2016 09:15
Location: Russia, S.- Peterburg

Re: Троичный RISC-V

Post by askfind »

Проект TRIT-RISC-V. Эмулятор троичного процессора на языке С.

Ссылка на тему в группе TG:
https://t.me/setun_1958/18793

Задача:

Создать эмулятор троичного TRIT-RISC-V из проекта https://github.com/virtualsecureplatform/rv16k-sim.git двоичного RISC-V RV16K-SIM.

В троичном процессоре сохранить бинарную совместимость с RV16K. При копировании в ROM- или RAM- память бинарной прошивки выполнить корректно команды процессора.

Процессор должен иметь два режима:
Mode = 0 "Двоичный RV16K"
Mode = 1 "Троичный RV16K-TRIT"

Шаг 1. Заменить на троичный тип данных.

Заменить PC
Заменить Reg[0] ... Reg[15]
Заменить флаги CPU:

Code: Select all

typedef int trit;
struct trit8 {
       trit t[TRIT8_SIZE];
};
struct trit16 {
       trit t[TRIT16_SIZE];
};


struct cpu_trit {
    struct trit16 reg[REGISTER_SIZE];
    struct trit16 pc;
    uint8_t inst_rom[INST_ROM_SIZE];
    uint8_t data_ram[DATA_RAM_SIZE];
    trit flag_sign;
    trit flag_overflow;
    trit flag_zero;
    trit flag_carry;
};

Каталог проекта:

Code: Select all

/trit-rv16k-sim$ tree -L 1
.
├── bitpat.c
├── bitpat.h
├── cpu_trit.h
├── docs
├── edu
├── elf.h
├── elf_parser.c
├── elf_parser.h
├── inst.c
├── inst.h
├── log.c
├── log.h
├── main
├── main.c
├── Makefile
├── README.md
├── ternary.c
├── ternary.h
├── test.sh
└── TODO.md
Запуск теста скрипта test.sh для проверки выполнения команд из ROM работы TRIТ-RV16K в двоичном режиме.

ТЕСТ Ок
>$ make test

Inst:J PC => 0x0012 PC => 0x0010 FLAGS(SZCV) => 0000
Inst:J PC => 0x0012 PC => 0x0010 FLAGS(SZCV) => 0000
Inst:LI PC => 0x0002 Reg x8 => 0x00FF PC => 0x0004 FLAGS(SZCV) => 0000
Inst:LI PC => 0x0006 Reg x9 => 0x00FF PC => 0x0008 FLAGS(SZCV) => 0000
Inst:XOR Reg x8 => 0x0000 PC => 0x000A FLAGS(SZCV) => 0+00
Inst:NOP PC => 0x000C FLAGS(SZCV) => 0000
Inst:NOP PC => 0x000E FLAGS(SZCV) => 0000
Inst:NOP PC => 0x0010 FLAGS(SZCV) => 0000
Inst:NOP PC => 0x0012 FLAGS(SZCV) => 0000
Inst:NOP PC => 0x0014 FLAGS(SZCV) => 0000
Inst:NOP PC => 0x0016 FLAGS(SZCV) => 0000
Inst:NOP PC => 0x0018 FLAGS(SZCV) => 0000
ok
Шаг 2. Заменить на троичный тип данных.

Заменить на хранение тритов inst_rom[]
Заменить на хранение тритов data_ram[]

struct trit8 inst_rom[INST_ROM_SIZE];
struct trit8 data_ram[DATA_RAM_SIZE];

Запуск теста скрипта test.sh для проверки выполнения команд из ROM работы TRIT-RV16K в двоичном режиме.
ТЕСТ Ок

>$ make test

Inst: LI PC => 0x0002 Reg x8 => 0x00FF PC => 0x0004 FLAGS(SZCV) => 0000
Inst: LI PC => 0x0006 Reg x9 => 0x00FF PC => 0x0008 FLAGS(SZCV) => 0000
Inst: XOR Reg x8 => 0x0000 PC => 0x000A FLAGS(SZCV) => 0+00
Inst: NOP PC => 0x000C FLAGS(SZCV) => 0000
Inst: NOP PC => 0x000E FLAGS(SZCV) => 0000
Inst: NOP PC => 0x0010 FLAGS(SZCV) => 0000
Inst: NOP PC => 0x0012 FLAGS(SZCV) => 0000
Inst: NOP PC => 0x0014 FLAGS(SZCV) => 0000
Inst: NOP PC => 0x0016 FLAGS(SZCV) => 0000
Inst: NOP PC => 0x0018 FLAGS(SZCV) => 0000
ok
Шаг 4. Функции для реализации инструкций троичного TRIT-RISC-V

Есть , конечно же, особенности реализация инструкций троичных логических операция.

Будут идеи - пиши.

/
/*
* Реализация инструкций для троичного режима TRIT-RISC-V
*/

// TODO 27.10.2025 Добавить реализацию функций режима работы троичного TRIT-RISC-V

void trs_pc_update(struct cpu_trit *c, uint16_t offset) {}
void trs_write(struct cpu_trit *c, uint16_t addr) {}
uint16_t trs_pc_read(struct cpu_trit *c) {return 0;}
void trs_reg_write(struct cpu_trit *c, uint8_t reg_idx, uint16_t data) {}
uint16_t trs_reg_read(struct cpu_trit *c, uint8_t reg_idx) {return 0;}
void trs_mem_write_b(struct cpu_trit *c, uint16_t addr, uint8_t data) {}
void trs_mem_write_w(struct cpu_trit *c, uint16_t addr, uint16_t data) {}
uint8_t trs_mem_read_b(struct cpu_trit *c, uint16_t addr) {return 0;}
uint16_t trs_mem_read_w(struct cpu_trit *c, uint16_t addr) {return 0;}
uint16_t trs_rom_read_w(struct cpu_trit *c) {return 0;}
uint16_t trs_get_bits(uint16_t t, int s, int e) {return 0;}
uint16_t trs_sign_ext(uint16_t t, uint8_t sign_bit) {return 0;}
uint8_t trs_flag_zero(uint16_t res) {return 0;}
uint8_t trs_flag_sign(uint16_t res) {return 0;}
uint8_t trs_flag_overflow(uint16_t s1, uint16_t s2, uint16_t res) {return 0;}
void inst_trs_lw(struct cpu_trit *c, uint16_t inst) {}
void inst_trs_lwsp(struct cpu_trit *c, uint16_t inst) {}
void inst_trs_lbu(struct cpu_trit *c, uint16_t inst) {}
void inst_trs_lb(struct cpu_trit *c, uint16_t inst) {}
void inst_trs_sw(struct cpu_trit *c, uint16_t inst) {}
void inst_trs_swsp(struct cpu_trit *c, uint16_t inst) {}
void inst_trs_sb(struct cpu_trit *c, uint16_t inst) {}
void inst_trs_mov(struct cpu_trit *c, uint16_t inst) {}
void inst_trs_add(struct cpu_trit *c, uint16_t inst) {}
void inst_trs_sub(struct cpu_trit *c, uint16_t inst) {}
void inst_trs_and(struct cpu_trit *c, uint16_t inst) {}
void inst_trs_or(struct cpu_trit *c, uint16_t inst) {}
void inst_trs_xor(struct cpu_trit *c, uint16_t inst) {}
void inst_trs_lsl(struct cpu_trit *c, uint16_t inst) {}
void inst_trs_lsr(struct cpu_trit *c, uint16_t inst) {}
void inst_trs_asr(struct cpu_trit *c, uint16_t inst) {}
void inst_trs_cmp(struct cpu_trit *c, uint16_t inst) {}
void inst_trs_li(struct cpu_trit *c, uint16_t inst) {}
void inst_trs_addi(struct cpu_trit *c, uint16_t inst) {}
void inst_trs_cmpi(struct cpu_trit *c, uint16_t inst) {}
void inst_trs_j(struct cpu_trit *c, uint16_t inst) {}
void inst_trs_jal(struct cpu_trit *c, uint16_t inst) {}
void inst_trs_jalr(struct cpu_trit *c, uint16_t inst) {}
void inst_trs_jr(struct cpu_trit *c, uint16_t inst) {}
void inst_trs_jl(struct cpu_trit *c, uint16_t inst) {}
void inst_trs_jle(struct cpu_trit *c, uint16_t inst) {}
void inst_trs_je(struct cpu_trit *c, uint16_t inst) {}
void inst_trs_jne(struct cpu_trit *c, uint16_t inst) {}
void inst_trs_jb(struct cpu_trit *c, uint16_t inst) {}
void inst_trs_jbe(struct cpu_trit *c, uint16_t inst) {}
void inst_trs_nop(struct cpu_trit *c, uint16_t inst) {}
Last edited by askfind on 26 Oct 2025 23:48, edited 1 time in total.
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
User avatar
askfind
Devil
Posts: 845
Joined: 04 Jan 2016 09:15
Location: Russia, S.- Peterburg

Re: Троичный RISC-V

Post by askfind »

Максимальное адресное пространство троичного TRIT-RISC-V:

Троичный счётчик инструкций trs_PC

Верхняя граница
В десятичный код: Dec = +21523360
В троичный код: Tri = ++++++++++++++++
В девятиричный код: Non = 44444444

Нижняя граница
В десятичный код: Dec = -21523360
В троичный код: Tri = ----------------
В девятиричный код: Non = wwwwwwww

Ссылка: https://www.trinary.su/kb/18153031-8224 ... 632cf.html
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
User avatar
askfind
Devil
Posts: 845
Joined: 04 Jan 2016 09:15
Location: Russia, S.- Peterburg

Re: Троичный RISC-V

Post by askfind »

-= Троичный асинхронный процессор RISC-V =-
Ссылка:
https://vk.com/wall-165373461_3191
Разработка троичного асинхронного процессора с архитектурой RISC-V — это проект на стыке нескольких передовых областей компьютерной инженерии. Использование ИИ в процессе разработки позволяет оптимизировать архитектуру и повысить эффективность системы.
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
imsushka
Maniac
Posts: 314
Joined: 01 Jan 2022 04:34
Location: USSR, Tashkent

Re: Троичный RISC-V

Post by imsushka »

если делать железныю троичность , то есть смысл
а попытка натянуть сову на глобус, троичную на двоичную ?!?!?!?!?! смысл ????
вся прелесть троичной системы теряеться, даже теряется смысл двоичной

просто сделать ради сделать?
ну ладно
User avatar
askfind
Devil
Posts: 845
Joined: 04 Jan 2016 09:15
Location: Russia, S.- Peterburg

Re: Троичный RISC-V

Post by askfind »

imsushka wrote: 27 Oct 2025 04:39 если делать железныю троичность , то есть смысл
а попытка натянуть сову на глобус, троичную на двоичную ?!?!?!?!?! смысл ????
вся прелесть троичной системы теряеться, даже теряется смысл двоичной

просто сделать ради сделать?
ну ладно
Использовать экосистему вокруг RISC-V и сэкономить десятки тысяч человеко-часов.

Первая идея сработала. Бинарная совместимость будет работать.

Нужен набор инструментов для троичного TRIT-RISC-V:

* Эмулятор
* Ассемблер
* Язык Си с поддержкой троичных типов данных и генерацию в целовой код для TRIT-RISC-V.


Главная проблема - жуткуй консерватизм специалистов в области IT. Человеческий фактор. Я уже дане не отвечаю на возражение: "Кому нужна эта ретро-троичность!?"


Стратегически направление выбрано правильно, на мой взгляд. Есть шанс выпустить в ближайшем времени опытную партию российского TRIT-RISC-V в кремнии (на классической заводской двоичной технологии).
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
User avatar
askfind
Devil
Posts: 845
Joined: 04 Jan 2016 09:15
Location: Russia, S.- Peterburg

Re: Троичный RISC-V

Post by askfind »

TRIT RV16K Functional Simulator

https://github.com/askfind/rv16k-sim.git

school TRIT RV16K-SIM

How to use

Code: Select all

Build

make

Test Instruction RV16K

make test

Use

Usage: ./main NCYCLES [-a] [-q] [-m] [-t ROM] [-d RAM] [FILENAME]
Options:
  -q       : No log print
  -m       : Dump memory
  -t ROM   : Initial ROM data
  -d RAM   : Initial RAM data
  -a       : TRIT-RV16K
  FILENAME : ELF Binary
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
User avatar
askfind
Devil
Posts: 845
Joined: 04 Jan 2016 09:15
Location: Russia, S.- Peterburg

Re: Троичный RISC-V

Post by askfind »

Троичный процессор - это настоящее 3D произведение "Троянского коня".
Двоичный процессор - это бледная 2D тень лошади.


Цитаты:
-----------
"...
Троичная машина «Сетунь» была безжалостно подавлена.

Архитектура двоичных компьютеров избыточна, так как 75–80% аппаратуры двоичной цифровой техники идет на стабилизацию вычислительных процессов – это неустойчивость по Ляпунову. Архитектура троичного компьютера Брусенцова – Соболева устойчива по Ляпунову [3]. Понятие троичной устойчивости по Ляпунову введено Хартмутом Мюллером. Двоичная неустойчивость по Ляпунову введена О.М. Калининым.

Современная RISC архитектура двоичного компьютера по Дональду Кнуту RISC=256=8*32. RISC архитектура троичного компьютера по Брусенцову – Соболеву RISC=82=27(M)+27(B)+27(S)+1(R), где M – это макрооперации, B – базисные команды, S – служебные команды, R –команда слог-ссылки. Разрыв более чем в 3 раза. Современные персональные компьютеры имеют порядка 512 команд.

Дальнейшее развитие двоичной архитектуры компьютеров бессмысленно без перехода к троичной архитектуре. Потенциал двоичной архитектуры исчерпан, она развивается экстенсивно и путем ассимиляции чужеродных ей компонентов, таких как математика с плавающей запятой – FPU. Разработка и проектирование современных компьютеров требует модернизированной архитектуры в рамках теории МАБ (Математическая аналитическая биология, Санкт-Петербург, Калинин О.М., Сурина К.С. и др.) и GS (Глобальный скейлинг, Мюнхен, Х. Мюллер)
,,,"

Храпов С. В., Санкт-Петербургский государственный университет, факультет ПМ-ПУ.

Источник:
1. Храпов С. В., Троичный компьютер Брусенцова – Соболева и архитектура современных двоичных компьютеров //[Текст] .- Журнал "Современные проблемы науки и образования" .- №6 .- 2010". стр. 3
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
User avatar
askfind
Devil
Posts: 845
Joined: 04 Jan 2016 09:15
Location: Russia, S.- Peterburg

Re: Троичный RISC-V

Post by askfind »

Добавление и отладка троичных операций учебного эмулятора троичного процессора TRIT RV16K

Code: Select all

[ Отладка троичных операций TRIT RISC-V ]
t000: tlog(...)

[ ++ ->  : t00000000000000++ ]

[ -- ->  : t00000000000000-- ]
t001: symb_nine_form(...)
++ -> 4
00 -> 0
-- -> W
t002: tr16_to_nine_string(...)
tr16 -> X21X21X3
t003: trs_pc_update(...)
PC => 00000000
PC => 00000001
PC => 00000002
PC => 00000003
PC => 00000004
PC => 0000001W
PC => 0000001X

Работа с отрицательными индексами массив тритов

Необходимо для операций чтения/записи с троичной памяти процессора.

Code: Select all

//
// Lab 2.
//
// Троичные операции для обработки тритов на языке С.
//
// Пример Объявления массива тритов. Отрицательный индекс.
//

// Компиляция: gcc main.c

#include <stdint.h>
#include <stdio.h>
#include <string.h>


int main(void) {

    int test_array[5] = {1,2,3,4,5,};
    int *p = test_array + 2;
    int i;
    int j;

    // This is equivalent to:
    i = p[-2];   // i now has the value 1
    j = *(p-2);  // j now has the value 1
    printf(" i=%d, j=%d\n\r", i,j );

    // This is equivalent to:
    i = p[+2];   // i now has the value 5
    j = *(p+2);  // j now has the value 5
    printf(" i=%d, j=%d\n\r", i,j );

    return 0;
}
Публикация:
https://t.me/setun_1958/18793/19195
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
User avatar
askfind
Devil
Posts: 845
Joined: 04 Jan 2016 09:15
Location: Russia, S.- Peterburg

Re: Троичный RISC-V

Post by askfind »

Идея создать описание команд "TRIT RISC-V Instruction Set Summary".
Публикация: https://t.me/setun_1958/18793/19229

Так хитро, чтобы аппаратную реализации TRIT RISC-V можно запускать бинарные файлы от RV32I в режиме "бинарная совместимость". Биты заменить на триты. Память программ ROM - троичная. Память RAM-троичная. Регистры - троичные.

Мнение участника на форуме:
"...
Re: Троичный RISC-V

Post by imsushka » 27 Oct 2025 11:39
если делать железную троичность , то есть смысл. А попытка натянуть "сову на глобус", троичную на двоичную ?!?!?!?!?! смысл ????
Вся прелесть троичной системы теряется, даже теряется смысл двоичной.
Просто сделать ради сделать? Ну, ладно.
..."

Мой ответ:
" Использовать экосистему инструментов по созданию бинарных процессоров RISC-V: проектирование для FPGA, 'эмуляторов, ассемблеров, тестирования, компиляторов. Это позволит сэкономить десятки тысяч человеко-часов".

Продолжаю добавлять и отлаживать троичные операции учебного эмулятора троичного процессора TRIT RV16K. Добрался до реализации первых команд троичного процессора, совместимого с risc-v.

Несколько удобных страниц описание команд процессора RISC-V.
Файл RISC-V Instruction Set Summary.pdf

//TODO реализовать команду tLW:
void inst_trs_lw(struct cpu_trit *c, uint16_t inst) {
log_printf("Inst: tLW\t");
}

Тестирование:

Code: Select all

$> ./main
[ Отладка троичных операций TRIT RISC-V ]

t000: tlog(...)
[ ++ -> : t00000000000000++ ]
[ — -> : t00000000000000— ]

t001: symb_nine_form(...)
++ -> 4
00 -> 0
— -> W

t002: tr16_to_nine_string(...)
tr16 -> X21X21X3

t003: trs_pc_update(...)
PC => t00000000
PC => t00000001
PC => t00000002
PC => t00000003
PC => t00000004
PC => t0000001W
PC => t0000001X

t004: trs_pc_write(...), trs_pc_read(...)
[ tr = : t-0+-0+-0+-0+-0+0 ]
[ tr1= : t-0+-0+-0+-0+-0+0 ]

t005: trs_reg_write(...)
[ tr1 = : t0000000000000+0- ]
Reg t7 => t0000001Z
Error: Reg t21 : Error reg_idx

t006: trs_reg_read(...)
[ 1. tr1 = : t0000000000000000 ]
Reg t7 => t0000001Z
[ 2. tr1 = : t0000000000000+0- ]

t007: trs_rom_read_w(...)
PC => t00000001
[ 1. t pc = : t000000000000000+ ]
[ 2. t tr1 = : t0000000000000+0- ]
[ 3. t pc = : t000000000000000+ ]
[ 4. t tr1= : t0000000000000000 ]

t008: trs_mem_write_b(...), trs_mem_read_b(...)
[ t8_1 = : t-00000+0 ]
[ t8_1 = : t-00000+0 ]

t009: trs_rom_read_w(...)
[ t16_1 = : t-0000000000000+0 ]
[ t16_1 = : t-0000000000000+0 ]

[ END Tests. ]
You do not have the required permissions to view the files attached to this post.
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
User avatar
askfind
Devil
Posts: 845
Joined: 04 Jan 2016 09:15
Location: Russia, S.- Peterburg

Re: Троичный RISC-V

Post by askfind »

Краткое описание набора команд троичного TRIT-RISC-V
https://t.me/setun_1958/18793/19233

Таблица 3 : TRIT-RV32I RISC-V Integer
You do not have the required permissions to view the files attached to this post.
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
User avatar
askfind
Devil
Posts: 845
Joined: 04 Jan 2016 09:15
Location: Russia, S.- Peterburg

Re: Троичный RISC-V

Post by askfind »

Переключаться на ветку троичного TRIT-RISC-V.:

https://github.com/askfind/rv16k-sim.git

Code: Select all

>$  git chechout  trit_risc_v
Functional Simulator RISC-V, TRIT-RISC-V
RISC-V RV32E/RV32I
TRIT-RISC-V TRV32E/TRV32I
HOW TO USE
Build
make
Clean
make clean
Test RISC-V Instruction RV32E/RV32I
make test
Test TRIT-RISC-V Instruction TRV32E/TRV32I
make test_trit
Use
Usage: ./main NCYCLES [-a] [-q] [-m] [-t ROM] [-d RAM] [FILENAME]
Options:
-q : No log print
-m : Dump memory
-t ROM : Initial ROM data
-d RAM : Initial RAM data
-a : Set cpu trits
FILENAME : ELF Binary
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)