Троичный RISC-V

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

Moderator: haqreu

User avatar
askfind
Devil
Posts: 840
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: 840
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: 840
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: 840
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: 840
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: 293
Joined: 01 Jan 2022 04:34
Location: USSR, Tashkent

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

Post by imsushka »

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

просто сделать ради сделать?
ну ладно
User avatar
askfind
Devil
Posts: 840
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: 840
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
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)