Участникам здоровый привет из санатория "Старая Русса"!
Новости
По теме "Троичный 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 для симуляции и тестирования базовых троичных элементов.
Троичный RISC-V
Moderator: haqreu
-
askfind
- Devil
- Posts: 840
- Joined: 04 Jan 2016 09:15
- Location: Russia, S.- Peterburg
Троичный RISC-V
You do not have the required permissions to view the files attached to this post.
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
-
askfind
- Devil
- Posts: 840
- Joined: 04 Jan 2016 09:15
- Location: Russia, S.- Peterburg
Re: Троичный RISC-V
В железе продолжу делать риск -5 в FPGA.
За основу взял проект https://github.com/nettok/RV32E.git
Биты заменю на триты.
Кстати, RISC-V TRIT будет полностью совместим с двоичным в части системы разработки, тестов и т.д.
За основу взял проект https://github.com/nettok/RV32E.git
Биты заменю на триты.
Кстати, RISC-V TRIT будет полностью совместим с двоичным в части системы разработки, тестов и т.д.
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
-
askfind
- Devil
- Posts: 840
- Joined: 04 Jan 2016 09:15
- Location: Russia, S.- Peterburg
Re: Троичный RISC-V
Проект 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:
Каталог проекта:
Запуск теста скрипта test.sh для проверки выполнения команд из ROM работы TRIТ-RV16K в двоичном режиме.
ТЕСТ Ок
Заменить на хранение тритов inst_rom[]
Заменить на хранение тритов data_ram[]
struct trit8 inst_rom[INST_ROM_SIZE];
struct trit8 data_ram[DATA_RAM_SIZE];
Запуск теста скрипта test.sh для проверки выполнения команд из ROM работы TRIT-RV16K в двоичном режиме.
Есть , конечно же, особенности реализация инструкций троичных логических операция.
Будут идеи - пиши.
/
Ссылка на тему в группе 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
Каталог проекта:
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
ТЕСТ Ок
Шаг 2. Заменить на троичный тип данных.>$ 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
Заменить на хранение тритов inst_rom[]
Заменить на хранение тритов data_ram[]
struct trit8 inst_rom[INST_ROM_SIZE];
struct trit8 data_ram[DATA_RAM_SIZE];
Запуск теста скрипта test.sh для проверки выполнения команд из ROM работы TRIT-RV16K в двоичном режиме.
Шаг 4. Функции для реализации инструкций троичного TRIT-RISC-VТЕСТ Ок
>$ 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
Есть , конечно же, особенности реализация инструкций троичных логических операция.
Будут идеи - пиши.
/
/*
* Реализация инструкций для троичного режима 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.
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
-
askfind
- Devil
- Posts: 840
- Joined: 04 Jan 2016 09:15
- Location: Russia, S.- Peterburg
Re: Троичный RISC-V
Максимальное адресное пространство троичного TRIT-RISC-V:
Троичный счётчик инструкций trs_PC
Верхняя граница
В десятичный код: Dec = +21523360
В троичный код: Tri = ++++++++++++++++
В девятиричный код: Non = 44444444
Нижняя граница
В десятичный код: Dec = -21523360
В троичный код: Tri = ----------------
В девятиричный код: Non = wwwwwwww
Ссылка: https://www.trinary.su/kb/18153031-8224 ... 632cf.html
Троичный счётчик инструкций trs_PC
Верхняя граница
В десятичный код: Dec = +21523360
В троичный код: Tri = ++++++++++++++++
В девятиричный код: Non = 44444444
Нижняя граница
В десятичный код: Dec = -21523360
В троичный код: Tri = ----------------
В девятиричный код: Non = wwwwwwww
Ссылка: https://www.trinary.su/kb/18153031-8224 ... 632cf.html
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
-
askfind
- Devil
- Posts: 840
- Joined: 04 Jan 2016 09:15
- Location: Russia, S.- Peterburg
Re: Троичный RISC-V
-= Троичный асинхронный процессор RISC-V =-
Ссылка:
https://vk.com/wall-165373461_3191
Ссылка:
https://vk.com/wall-165373461_3191
Разработка троичного асинхронного процессора с архитектурой RISC-V — это проект на стыке нескольких передовых областей компьютерной инженерии. Использование ИИ в процессе разработки позволяет оптимизировать архитектуру и повысить эффективность системы.
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
-
imsushka
- Maniac
- Posts: 293
- Joined: 01 Jan 2022 04:34
- Location: USSR, Tashkent
Re: Троичный RISC-V
если делать железныю троичность , то есть смысл
а попытка натянуть сову на глобус, троичную на двоичную ?!?!?!?!?! смысл ????
вся прелесть троичной системы теряеться, даже теряется смысл двоичной
просто сделать ради сделать?
ну ладно
а попытка натянуть сову на глобус, троичную на двоичную ?!?!?!?!?! смысл ????
вся прелесть троичной системы теряеться, даже теряется смысл двоичной
просто сделать ради сделать?
ну ладно
-
askfind
- Devil
- Posts: 840
- Joined: 04 Jan 2016 09:15
- Location: Russia, S.- Peterburg
Re: Троичный RISC-V
Использовать экосистему вокруг RISC-V и сэкономить десятки тысяч человеко-часов.imsushka wrote: 27 Oct 2025 04:39 если делать железныю троичность , то есть смысл
а попытка натянуть сову на глобус, троичную на двоичную ?!?!?!?!?! смысл ????
вся прелесть троичной системы теряеться, даже теряется смысл двоичной
просто сделать ради сделать?
ну ладно
Первая идея сработала. Бинарная совместимость будет работать.
Нужен набор инструментов для троичного TRIT-RISC-V:
* Эмулятор
* Ассемблер
* Язык Си с поддержкой троичных типов данных и генерацию в целовой код для TRIT-RISC-V.
Главная проблема - жуткуй консерватизм специалистов в области IT. Человеческий фактор. Я уже дане не отвечаю на возражение: "Кому нужна эта ретро-троичность!?"
Стратегически направление выбрано правильно, на мой взгляд. Есть шанс выпустить в ближайшем времени опытную партию российского TRIT-RISC-V в кремнии (на классической заводской двоичной технологии).
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
-
askfind
- Devil
- Posts: 840
- Joined: 04 Jan 2016 09:15
- Location: Russia, S.- Peterburg
Re: Троичный RISC-V
TRIT RV16K Functional Simulator
https://github.com/askfind/rv16k-sim.git
school TRIT RV16K-SIM
How to use
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"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
