Троичный умножитель "Сетунь"

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

Moderator: haqreu

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

Троичный умножитель "Сетунь"

Post by askfind »

Троичный умножитель "Сетунь"

Sent: 31 Aug 2026 23:36
by askfind
Александр!

Вдруг подскажешь. Не могу решить "$" троичного умножителя в "Сетунь".

Не понятно как сумматоры работают.

Нужно на С эмуляцию написать. ИИ не справляется и не понимает.
Sent: 01 Sep 2026 05:06
From: Shaos
Recipient: askfind
давай внутри форума - чтобы всем видно было
я могу своих ИИ-шных помощников подключить ;)
You do not have the required permissions to view the files attached to this post.
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)
User avatar
Shaos
Admin
Posts: 25268
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Троичный умножитель "Сетунь"

Post by Shaos »

Я скормил Gemini повёрнутый и высветленный вариант:
SetunMul.jpg
Вот его ответ:
На схеме представлена классическая древовидная структура параллельного (матричного) умножителя для сбалансированной троичной системы счисления (с цифрами -1, 0, +1), которая использовалась в советской ЭВМ «Сетунь» (18-разрядная архитектура).

Принцип работы аппаратного умножителя

* Формирование частичных произведений (кружки с крестиком ⊗): Умножимое параллельно поступает на блоки умножения, где умножается на каждый отдельный трит множителя (хранящийся в регистрах R_1... R_18). В сбалансированной троичной логике это сводится к простейшей маршрутизации:
-- Если трит множителя равен +1, умножимое передается на сумматор без изменений.
-- Если трит множителя равен 0, на сумматор передается нулевое значение.
-- Если трит множителя равен -1, умножимое потритно инвертируется (знак каждого трита меняется на противоположный).

* Позиционный сдвиг (пустые квадратики): Линии задержки или жесткая аппаратная разводка обеспечивают сдвиг каждого следующего частичного произведения на один разряд влево (что эквивалентно умножению на 3).

* Дерево сумматоров (М-1...М-8, Оконечный сумматор): Вместо того чтобы суммировать значения последовательно (что долго), используется каскадное «дерево». Частичные произведения группируются и складываются на первом уровне (М-1...М-6), их суммы идут на второй уровень, и так вплоть до финального результата. Это троичный аналог дерева Уоллеса.

Пример логики на языке Си

Данный код эмулирует работу одиночного блока ⊗ и показывает, как формируются частичные произведения перед их отправкой в дерево сумматоров.

Code: Select all

#include <stdio.h>

#define WORD_LENGTH 4 // Длина слова в тритах для примера

// Блок ⊗: формирование частичного произведения
// multiplier_trit принимает значения: -1, 0, 1
void generate_partial_product(const int X[WORD_LENGTH], int multiplier_trit, int partial_out[WORD_LENGTH]) {
    for (int i = 0; i < WORD_LENGTH; i++) {
        if (multiplier_trit == 1) {
            partial_out[i] = X[i];        // Прямая передача
        } else if (multiplier_trit == -1) {
            partial_out[i] = -X[i];       // Потритная инверсия
        } else {
            partial_out[i] = 0;           // Обнуление
        }
    }
}

int main() {
    // Множимое (X) = [1, -1, 0, 1] 
    int X[WORD_LENGTH] = {1, -1, 0, 1};
    
    // Триты множителя (Y), поступающие из регистров R1, R2, R3...
    int Y[3] = {0, 1, -1};

    printf("Множимое X: [ 1, -1,  0,  1 ]\n\n");

    // Эмуляция конвейера блоков ⊗ из SetunMul.jpg
    for (int step = 0; step < 3; step++) {
        int partial[WORD_LENGTH];
        generate_partial_product(X, Y[step], partial);

        printf("Трит множителя R%d = %2d\n", step + 1, Y[step]);
        printf("Частичное произведение: [ ");
        for (int i = 0; i < WORD_LENGTH; i++) {
            printf("%2d ", partial[i]);
        }
        printf("]\n");
        printf("В дереве сумматоров это значение будет сдвинуто влево на %d позиций.\n\n", step);
    }
    
    return 0;
}
You do not have the required permissions to view the files attached to this post.
User avatar
askfind
Devil
Posts: 903
Joined: 04 Jan 2016 09:15
Location: Russia, S.- Peterburg

Re: Троичный умножитель "Сетунь"

Post by askfind »

USER
Вывести всё в один файл WiKi.md
ASSISTANT
# Wiki: Троичный умножитель "Сетунь"
## Содержание
1. [Введение](#1-введение)
2. [Историческая справка](#2-историческая-справка)
3. [Теория сбалансированной троичной системы](#3-теория-сбалансированной-троичной-системы)
4. [Аппаратная архитектура умножителя](#4-аппаратная-архитектура-умножителя)
5. [Алгоритм умножения](#5-алгоритм-умножения)
6. [Программная реализация](#6-программная-реализация)
7. [Справочник API](#7-справочник-api)
8. [Примеры использования](#8-примеры-использования)
9. [Тестирование и верификация](#9-тестирование-и-верификация)
10. [Анализ производительности](#10-анализ-производительности)
11. [Сравнение с двоичными системами](#11-сравнение-с-двоичными-системами)
12. [Расширение функциональности](#12-расширение-функциональности)
13. [Приложения](#13-приложения)

- - - - -
Документ создан с цифровым помощником ИИ [ai qwen chat]

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

Code: Select all

$ gcc -o setun_mul example_2.c -Wall
 ./setun_mul 
==============================================
   ТРОИЧНЫЙ УМНОЖИТЕЛЬ "СЕТУНЬ"
   18-разрядная сбалансированная троичная
==============================================

=== ФОРМИРОВАНИЕ ЧАСТИЧНЫХ ПРОИЗВЕДЕНИЙ ===
Множимое: [000 000 000 000 000 101] = 10
Множитель: [000 000 000 000 000 1-11] = 7

Трит R1 = 1:
  Частичное произведение: [000 000 000 000 000 101] = 10
  После сдвига на 0: [000 000 000 000 000 101] = 10

Трит R2 = -1:
  Частичное произведение: [000 000 000 000 000 -10-1] = -10
  После сдвига на 1: [000 000 000 000 00-1 0-10] = -30

Трит R3 = 1:
  Частичное произведение: [000 000 000 000 000 101] = 10
  После сдвига на 2: [000 000 000 000 010 100] = 90


==============================================
   ТЕСТЫ УМНОЖЕНИЯ
==============================================
Тест  1:   5 ×   3 =    15 ✓
Тест  2:  10 ×   7 =    70 ✓
Тест  3:  15 ×   4 =    60 ✓
Тест  4:  -8 ×   6 =   -48 ✓
Тест  5:  12 ×  -9 =  -108 ✓
Тест  6:  -7 ×  -5 =    35 ✓
Тест  7:   0 ×  15 =     0 ✓
Тест  8:  20 ×   1 =    20 ✓
Тест  9:   1 ×  25 =    25 ✓
Тест 10:  13 ×  11 =   143 ✓

==============================================
   ПРОЙДЕНО ТЕСТОВ: 10/10
==============================================

Интерактивный режим (0 0 для выхода):

> 
You do not have the required permissions to view the files attached to this post.
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)