RUЭВМ
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.
Август 2020
ПнВтСрЧтПтСбВс
     12
3456789
10111213141516
17181920212223
24252627282930
31      

Календарь Календарь

Последние темы
» Подключение Радио-86РК к монитору.
автор barsik Сегодня в 21:57

» Новинки. Книги. Часть 1.
автор Viktor2312 04.08.20 10:47

» Улучшение видео возможностей РК86
автор barsik 04.08.20 8:54

» Разработка "Радио - РК2019М".
автор barsik 02.08.20 21:49

» Новости криптовалют: статьи, заметки, разное...
автор Viktor2312 31.07.20 22:39

» Биткоин, с технической точки зрения. Разное...
автор Viktor2312 28.07.20 10:27

» Серия видео про Биткоин. Вариант-2.
автор Viktor2312 21.07.20 22:12

» Будем бороться за традиционное написание процента
автор Viktor2312 20.07.20 1:12

» Анализатор спектра на лампах ИН-9
автор freddy 19.07.20 13:53

» Процессор 8008, идея его эмуляции и другой флейм
автор barsik 19.07.20 7:40

» Обсуждение желаемых новодельных плат расширения и мелких усовершенствований базовых плат
автор barsik 12.07.20 20:31

» Разработка магнитофона для zx-spectrum
автор san010101 10.07.20 15:38

» Арго ПК ФВ 6511. Информация, документы, фото.
автор Viktor2312 01.07.20 21:23

» Обзор крипто проектов.
автор Viktor2312 28.06.20 0:03

» МИКРО - 80. Статьи, заметки, очерки, разное...
автор barsik 27.06.20 22:56

» Серия видео про Биткоин. Вариант-1.
автор Viktor2312 27.06.20 16:09

» Электроника КР-04. Информация, документы, фото.
автор barsik 26.06.20 13:25

» Флейм только по теме "Радио-86РК".
автор barsik 25.06.20 20:06

» Netbox.Global (NBX) - браузер с инновационной технологией.
автор Viktor2312 23.06.20 14:45

» Электроника КР-03: Обсуждение
автор barsik 18.06.20 21:24

» Радио-86РК: Разное
автор barsik 18.06.20 2:06

» Радио-86РК: Расширение ОЗУ
автор barsik 11.06.20 10:21

» Разное
автор Viktor2312 09.06.20 1:40

» Турбирование Специалиста
автор barsik 22.05.20 13:33

» Программы от РК86 на Специалисте
автор barsik 20.05.20 21:08

Самые активные пользователи за месяц
barsik
Личная тех. тема. Vote_lcapЛичная тех. тема. Voting_barЛичная тех. тема. Vote_rcap 
Viktor2312
Личная тех. тема. Vote_lcapЛичная тех. тема. Voting_barЛичная тех. тема. Vote_rcap 
Microsha
Личная тех. тема. Vote_lcapЛичная тех. тема. Voting_barЛичная тех. тема. Vote_rcap 

Поиск
 
 

Результаты :
 


Rechercher Расширенный поиск


Личная тех. тема.

Перейти вниз

Личная тех. тема. Empty Личная тех. тема.

Сообщение  Viktor2312 в 06.07.19 13:06

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


.
Псевдокод.

____Алгоритм использует следующие битовые операции:

ǁ — конкатенация,

+ — сложение,

and — побитовое «И»,

xor — исключающее «ИЛИ»,

shr (shift right) — логический сдвиг вправо,

rotr (rotate right) — циклический сдвиг вправо.

Пояснения:
Все переменные беззнаковые, имеют размер 32 бита и при вычислениях суммируются по модулю 232
message — исходное двоичное сообщение
m — преобразованное сообщение


Инициализация переменных
(первые 32 бита дробных частей квадратных корней первых восьми простых чисел [от 2 до 19]):


h0 := 0x6A09E667
h1 := 0xBB67AE85
h2 := 0x3C6EF372
h3 := 0xA54FF53A
h4 := 0x510E527F
h5 := 0x9B05688C
h6 := 0x1F83D9AB
h7 := 0x5BE0CD19

Таблица констант
(первые 32 бита дробных частей кубических корней первых 64 простых чисел [от 2 до 311]):


k[0..63] :=
0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2

Предварительная обработка:

m := message ǁ [единичный бит]
m := m ǁ [k нулевых бит],

где k — наименьшее неотрицательное число, такое что
(L + 1 + K) mod 512 = 448, где L — число бит в сообщении (сравнима по модулю 512 c 448)


m := m ǁ Длина(message)

- длина исходного сообщения в битах в виде 64-битного числа с порядком байтов от старшего к младшему

Далее сообщение обрабатывается последовательными порциями по 512 бит:
разбить сообщение на куски по 512 бит
для каждого куска разбить кусок на 16 слов длиной 32 бита (с порядком байтов от старшего к младшему внутри слова): w[0..15]

Сгенерировать дополнительные 48 слов:

для i от 16 до 63
s0 := (w[i-15] rotr 7) xor (w[i-15] rotr 18) xor (w[i-15] shr 3)
s1 := (w[i-2] rotr 17) xor (w[i-2] rotr 19) xor (w[i-2] shr 10)
w[i] := w[i-16] + s0 + w[i-7] + s1

Инициализация вспомогательных переменных:

a := h0
b := h1
c := h2
d := h3
e := h4
f := h5
g := h6
h := h7

Основной цикл:

для i от 0 до 63
Σ0 := (a rotr 2) xor (a rotr 13) xor (a rotr 22)
Ma := (a and b) xor (a and c) xor (b and c)
t2 := Σ0 + Ma
Σ1 := (e rotr 6) xor (e rotr 11) xor (e rotr 25)
Ch := (e and f) xor ((not e) and g)
t1 := h + Σ1 + Ch + k[i] + w[i]

h := g
g := f
f := e
e := d + t1
d := c
c := b
b := a
a := t1 + t2

Добавить полученные значения к ранее вычисленному результату:

h0 := h0 + a
h1 := h1 + b
h2 := h2 + c
h3 := h3 + d
h4 := h4 + e
h5 := h5 + f
h6 := h6 + g
h7 := h7 + h

Получить итоговое значение хеша:

digest = hash = h0 ǁ h1 ǁ h2 ǁ h3 ǁ h4 ǁ h5 ǁ h6 ǁ h7

Личная тех. тема. _aaau_11


.


Последний раз редактировалось: Viktor2312 (28.05.20 9:20), всего редактировалось 1 раз(а)

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 12438
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Личная тех. тема. Empty .

Сообщение  Viktor2312 в 06.07.19 13:36

2
.
SHA-2 хеш алгоритм.

____В 1993 году NIST впервые опубликовал Стандарт Безопасного Хеша (SHA). В 1995 году этот алгоритм был пересмотрен с целью устранения некоторых начальных недостатков, а в 2001 году были предложены новые алгоритмы хеширования. Это новое семейство алгоритмов хеширования, известное как SHA-2, использует большие дайджест-сообщения, делая их более устойчивыми к возможным атакам и позволяя использовать их с большими блоками данных, вплоть до 2128 бит, например, в случае SHA512. Алгоритм хеширования SHA-2 одинаков для хэш-функций SHA256, SHA224, SHA384 и SHA512, различаясь только размером операндов, векторами инициализации и размером окончательного дайджест-сообщения.
____Далее описывается алгоритм SHA-2, применяемый к хеш-функции SHA256, после чего следует описание хеш-функции SHA512, которая отличается в основном размером операндов, используя 64-битные слова вместо 32-битных. Обратите внимание, что SHA224 и SHA384 вычисляются как SHA256 и SHA512, соответственно, с окончательным значением хеш-функции, усеченным до соответствующего размера, вектор инициализации также отличается.

Личная тех. тема. _aaau_11

____Функция хеширования SHA256: Функция хеширования SHA256 создает окончательное дайджест-сообщение из 256 битов, которое зависит от входного сообщения и состоит из нескольких блоков по 512 бит в каждом. Этот входной блок расширяется и подается на 64 цикла функции SHA256 в словах по 32 бита каждый (обозначается Wt). В каждом цикле или цикле алгоритма SHA-2 введенные данные смешиваются с текущим состоянием. Это скремблирование данных выполняется с помощью сложений и логических операций, таких как побитовые логические операции и побитовые вращения. Вычислительная структура каждого раунда этого алгоритма изображена на рисунке 1. Несколько функций, представленных на этом рисунке, описаны в Приложении I. Значение Wt является 32-разрядным словом данных для раунда t, а значение Kt представляет 32-битная константа, которая также зависит от раунда.
____32-битные значения переменных от A до H обновляются в каждом раунде, а новые значения используются в следующем раунде. Начальные значения этих переменных задаются 256-битным постоянным значением, указанным в [10], это значение устанавливается только для первого блока данных. В последовательных блоках данных используется промежуточное хеш-значение, вычисленное для предыдущего блока данных. Каждый блок 512 данных обрабатывается в течение 64 циклов, после чего значения переменных от A до H добавляются в предыдущее дайджест-сообщение для получения частичного Дайджест сообщения. Чтобы лучше проиллюстрировать этот алгоритм, представление псевдокода изображено на рисунке 2. Окончательное дайджест-сообщение (DM) для данного потока данных дается результатом последнего блока данных.

Личная тех. тема. Fig_210

____В некоторых приложениях более высокого уровня, таких как эффективная реализация кода аутентификации хеш-сообщения с ключом (HMAC) [11] или когда сообщение фрагментировано, начальное значение хеш-функции (IV) может отличаться от константы, указанной в [10]. В этих случаях переменные от A до H инициализируются переменным вектором инициализации (IV).
____Хеш-функция SHA512: вычисление хеш-функции SHA512 идентично вычислению хеш-функции SHA256, отличающейся размером операндов, которые имеют 64 бита, а не 32 бита, как для SHA256, размера дайджест-сообщения, которое имеет удвоенный размер, составляющий 512 бит, и в функциях, описанных в Приложении I. В этом Приложении также описаны функции, используемые в расписании сообщений. Значения Wt и Kt имеют 64 бита, и каждый блок данных состоит из 16 64-битных слов, имеющих в общей сложности 1024 бита.
____Расписание сообщений: В алгоритме SHA-2 вычисления, описанные на рисунке 1, выполняются для 64 раундов для SHA256 (80 раундов для SHA512), в каждом раунде 32-битное слово (или 64 бита для SHA512), полученное из промежуточного слова. используется хэш-значение Однако каждый блок данных имеет только 16 32-битных слов для SHA256 или 16 64-битных слов для SHA512, что приводит к необходимости расширения исходного блока данных для получения оставшихся слов. Это расширение выполняется вычислением, описанным в (1), где M(i)t обозначает первые 16 слов i-го блока данных.

Личная тех. тема. Iaa_110

____Заполнение сообщения: чтобы гарантировать, что входное сообщение кратно 512 битам, как того требует хеш-функция SHA256, или 1024 для хеш-функции SHA512, необходимо дополнить исходное сообщение. Дополненное сообщение состоит из сообщения, с ничего не значащими данными, и присоединённым к нему оригинальным сообщением. Эта операция может быть эффективно реализована в программном обеспечении с минимальными затратами.

Proposed Design.

____В алгоритме SHA-2 операции, которые должны быть выполнены, просты, однако зависимость этого алгоритма от данных не допускает большого распараллеливания. Каждый раунд алгоритма может быть вычислен только после того, как были вычислены значения от A до H предыдущего раунда (см. Рисунок 2), что накладывает последовательность на вычисление. Следует отметить, что в каждом раунде вычисление требуется только для вычисления значений A и E, поскольку остальные значения получаются непосредственно из значений предыдущего раунда, как показано в псевдокоде на рис.2.
____Перепланирование операций: в нашем предложении мы определили часть вычисления данного раунда t, которая может быть вычислена заранее в предыдущем раунде t − 1. Только значения, которые не зависят от значений, вычисленных в предыдущем раунде, могут быть вычислены заранее. В отличие от метода перепланирования, предложенного в [12] для алгоритма SHA1, где взаимная зависимость данных является низкой, в алгоритме SHA-2 зависимость данных является более сложной, как показано на рисунке 1. Хотя переменные B, C, D , F, G и H получены непосредственно из значений раунда, не требующих каких-либо вычислений, значения A и E требуют вычислений и зависят от всех значений. Другими словами, значения A и E для раунда t не могут быть вычислены до тех пор, пока значения для тех же переменных не будут вычислены в предыдущем раунде, как показано в (2).

Личная тех. тема. Iaa_210

____Принимая во внимание, что значение Ht + 1 задается непосредственно через Gt, которое, в свою очередь, задается посредством Ft-1, предварительный расчет H, таким образом, может быть задан как Ht + 1 = Ft-1. Поскольку значения Kt и Wt можно предварительно рассчитать и просто использовать в каждом раунде, (2) можно переписать как:

Личная тех. тема. Iaa_310

где значение δt рассчитывается в предыдущем раунде. Значение δt + 1 может быть результатом полного сложения или векторов переноса и сохранения из сложения переноса. С этим вычислительным разделением вычисление алгоритма SHA-2 может быть разделено на две части, что позволяет переназначить вычисление δ на предыдущий тактовый цикл, изображенный серой областью на рисунке 3. Таким образом, критический путь результирующего оборудования реализация может быть уменьшена. Поскольку вычисление теперь разделено на этап конвейера, вычисление SHA-2 требует дополнительного тактового цикла для выполнения всех циклов. В случае хэш-функции SHA256 необходимо 65 тактов для расчета 64 раундов. Как указано в алгоритме SHA-2 и изображено на рисунке 2, после вычисления всех циклов внутренние переменные (от A до H) должны быть добавлены к предыдущему дайджест-сообщению.


Пометки:

1. # Майнер отправляет пулу nonce и хеш заданной сложности, пул подставляет этот nonce в заголовки блока и хеширует их, получил в результате тот же хеш - валидный, получил другой хеш - невалидный.
(если я как майнер состоящий в пуле, отсылаю пулу к примеру 100 nonce и соответствующих хешей, то пулл, будет пересчитывать все 100 хешей, что бы провалидировать? Тогда какой от меня смысл, если пул сам может считать эти хеши?)
# Майнер перебирает nonce, чтобы получить "красивый" хеш. Для этого нужно проделать МНОГО операций хеширования.
Пул проверяет, что присланные майнером nonce и хеш соответствуют друг другу. Это ОДНА операция хеширования.
(Как тогда майнинг пул проверит, что я реально работал и сколько работы я проделал, если я не нашел "красивый" хеш, хотя реально искал?)
# Например, сложность выставленная пулом равна 10 000, следовательно майнер будет находить соответствующий хеш в среднем за 10 000 итераций перебора nonce. Ключевое слово - в среднем. Сколько реально было итераций в конкретном случае - сугубо половые пробемы майнера и пулу на это положить, потому что в среднем будет 10 000, не смотря на то, что иной раз его можно найти с первой же итерации, а иногда не найти и за 20 000+ итераций. Как только майнер нашёл соответствующий хеш, он отправляет его и nonce пулу, а пул хеширует у себя и засчитывает майнеру 10 000 итераций. Проще говоря, пулу не нужно проверять сколько майнер сделал работы в каждом конкретном случае, потому что в среднем майнеру придётся перебирать столько, сколько требует заданная сложность, иначе он не найдёт требуемые хеши и отправлять будет нечего.

*задание содержит номер блока, ID задания, хэш предыдущего блока,  минимальный и максимальный nonce для тебя

***

Начальные значения:
h0 := 0x6A09E667 (0110 1010 0000 1001 1110 0110 0110 0111)
h1 := 0xBB67AE85 (1011 1011 0110 0111 1010 1110 1000 0101)
h2 := 0x3C6EF372 (0011 0011 0110 1110 1111 0011 0111 0010)
h3 := 0xA54FF53A (1010 0101 0100 1111 1111 0101 0011 1010)
h4 := 0x510E527F (0101 0001 0000 1110 0101 0010 0111 1111)
h5 := 0x9B05688C (1001 1011 0000 0101 0110 1000 1000 1100)
h6 := 0x1F83D9AB (0001 1111 1000 0011 1101 1001 1010 1011)
h7 := 0x5BE0CD19 (0101 1011 1110 0000 1100 1101 0001 1001)


k0 := 0x428A2F98 (0100 0010 1000 1010 0010 1111 1001 1000)
k1 := 0x71374491 (0111 0001 0011 0111 0100 0100 1001 0001)
k2 := 0xB5C0FBCF (1011 0101 1100 0000 1111 1011 1100 1111)
k3 := 0xE9B5DBA5 (1110 1001 1011 0101 1101 1011 1010 0101)
k4 := 0x3956C25B (0011 1001 0101 0110 1100 0010 0101 1011)
k5 := 0x59F111F1 (0101 1001 1111 0001 0001 0001 1111 0001)
k6 := 0x923F82A4 (1001 0010 0011 1111 1000 0010 1010 0100)
k7 := 0xAB1C5ED5 (1010 1011 0001 1100 0101 1110 1101 0101)
k8 := 0xD807AA98 (1101 1000 0000 0111 1010 1010 1001 1000)
k9 := 0x12835B01 (0001 0010 1000 0011 0101 1011 0000 0001)
k10 := 0x243185BE (0010 0100 0011 0001 1000 0101 1011 1110)
k11 := 0x550C7DC3 (0101 0101 0000 1100 0111 1101 1100 0011)
k12 := 0x72BE5D74 (0111 0010 1011 1110 0101 1101 0111 0111)
k13 := 0x80DEB1FE (1000 0000 1101 1110 1011 0001 1111 1110)
k14 := 0x9BDC06A7 (1001 1011 1101 1100 0000 0110 1010 0111)
k15 := 0xC19BF174 (1100 0001 1001 1011 1111 0001 0111 0100)

***

Закон дистрибутивности. Дистрибутивность конъюнкции и суммы по модулю два.
(a and b) xor (a and c) = a and (b xor c)  !!!

***

Функция большинства (Ma блок) побитово работает со словами A, B и C. Для каждой битовой позиции она возвращает 0, если большинство входных битов в этой позиции — нули, иначе вернёт 1.

Блок Σ0 циклически сдвигает A на 2 бита, затем исходное слово A циклически сдвигается на 13 бит, и, аналогично, на 22 бита. Получившиеся три сдвинутые версии A побитово складываются по модулю 2 (обычный xor, (A rotr 2) xor (A rotr 13) xor (A rotr 22)).

Ch реализует функцию выбора. На каждой битовой позиции проверяется бит из E, если он равен единице, то на выход идёт бит из F с этой позиции, иначе бит из G. Таким образом, биты из F и G перемешиваются, исходя из значения E.

Σ1 по структуре аналогичен Σ0, но работает со словом E, а соответствующие сдвиговые константы — 6, 11 и 25.

***


.


Последний раз редактировалось: Viktor2312 (27.06.20 23:46), всего редактировалось 10 раз(а)

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 12438
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Личная тех. тема. Empty .

Сообщение  Viktor2312 в 07.07.19 11:17

3
.
...


.


Последний раз редактировалось: Viktor2312 (28.05.20 20:01), всего редактировалось 5 раз(а)

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 12438
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Личная тех. тема. Empty .

Сообщение  Viktor2312 в 07.07.19 18:40

4
.
для i от 16 до 63
s0 := (w[i-15] rotr 7) xor (w[i-15] rotr 18) xor (w[i-15] shr 3)
s1 := (w[i-2] rotr 17) xor (w[i-2] rotr 19) xor (w[i-2] shr 10)
w[i] := w[i-16] + s0 + w[i-7] + s1



i = 16

s0 = (w[16-15] rotr 7) xor (w[16-15] rotr 18) xor (w[16-15] shr 3)
s0 = (w[1] rotr 7) xor (w[1] rotr 18) xor (w[1] shr 3)

s1 = (w[16-2] rotr 17) xor (w[16-2] rotr 19) xor (w[16-2] shr 10)
s1 = (w[14] rotr 17) xor (w[14] rotr 19) xor (w[14] shr 10)

w[16] = w[16-16] + s0 + w[16-7] + s1
w[16] = w[0] + s0 + w[9] +s1

Входные слова: w[0], w[1], w[9], w[14]
Выходное слово: w[16]

Личная тех. тема. Rotr_710

Личная тех. тема. Rotr_110

Личная тех. тема. S0-w1-10


.


Последний раз редактировалось: Viktor2312 (28.05.20 9:50), всего редактировалось 4 раз(а)

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 12438
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Личная тех. тема. Empty .

Сообщение  Viktor2312 в 15.07.19 17:07

5
Подводим некую черту, этим сообщением. Пора начинать сначала и ближе к практике, хоть всё до конца и не понятно, но многое понятно, те же 64 итерации, их можно уже реализовывать, а всё остальное будет на отдельных, стандартных, платах. Продумав всё, в плане расположения плат, их соединения между собой, частичного параллелизма и асинхронного принципа, опять получается какой-то монстр, так как решено реализовывать на серии 74AC у которой как вроде максимальная тактовая частота в районе 170 МГц, точно нигде не прочитал, но судя по datasheet время задержки распространения находится в районе 1...10 нс, а как оно получится на практике, время покажет. Для того, чтобы передавать на нужную плату 16 слов, это w[0]...w[15] необходимо 16 шлейфов, они будут располагаться сзади и спереди. А так как каждый шлейф занимает 55 мм, то на плате умещается 4 разъёма, с каждой стороны, итого выходит потребуется 4 платы с размерами не менее этих четырёх разъёмов плюс место для разъёма питания и крепления 10 мм, в каждом углу платы. Входные и выходные слова будут находиться слева и справа, чередуясь от платы к плате. Что же выходит, с запада на восток, 4 разъёма (55 * 4 = 220 мм) + крепления (10 *2 = 20 мм), на разъём питания оставим 20 мм и между разъёмами 5 мм промежутки (5 *4 = 20 мм). Итого: 220 + 20 + 20 +20 = 280 мм (28 см). А с юга на север 4 разъёма (55 * 4 = 220 мм) + крепления (10 *2 = 20 мм) и между разъёмами 5 мм промежутки (5 *4 = 20 мм). Итого: 220 + 20 + 20 = 260 мм (26 см). Плат всего 4 шт. на одну итерацию, соответственно 28 + 28 = 56 см и по 10 см расстояние на шлейфы и вентиляцию, 76 см будет ширина, и 26 + 26 = 52 см и по 10 см расстояние на шлейфы и вентиляцию, 72 см это глубина, и минимум 65 слоёв плат, по 2 см на каждую и по 10 см расстояние на вентиляцию и крепления. 65 * 2 = 130 см и + 20 см, итого 150 см.
Вот такие примерные размеры шкафчика 76 х 72 х 150 см. Жуть... Но будет интересно...

Плата A0-0. Условно показаны все разъёмы, но останутся только те, которые действительно нужны будут.
Личная тех. тема. Sch_ha10

Изменённая ссылка, так как пока по предыдущей у меня ничего не отображается из-за действий преступной организации РКН (роскомпозор).
Личная тех. тема. Sch_ha10

Ага, преступная организация не спит, и ссылки с http уже тоже не работают, придётся со временем всё дублировать троекратно, как минимум, задали работки на 5 лет вперёд, ну ничего, вечная борьба народа и дорвавшихся, продолжается, та же фотка, но выложенная на Яндексе:
Посмотреть

Твари всё пофигачили, как же они достали, ну ничего, мы с этим идиотизмом ещё поборемся...

Личная тех. тема. Sch_Hard-miner_v0.1575276041

Ура ! получилось, спасибо barsik за ссылку, но вот опять же вопрос, вот потрачу  год или два и восстановлю, все изображения на форуме, в ручном режиме, добавив под каждым изображением копию на этом ресурсе, и где гарантия, что эта преступная организация не доберётся и до этого ресурса, никакой...


.


Последний раз редактировалось: Viktor2312 (28.05.20 9:44), всего редактировалось 2 раз(а)

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 12438
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Личная тех. тема. Empty НАЧАЛО.

Сообщение  Viktor2312 в 10.08.19 22:20

6
.
Начало разработки.

____Итак, всё что выше, это либо описание теории самой, по крайней мере самого основного, либо просто предварительное обдумывание. Предварительные наброски, для оценки габаритов, различных затрат и т. д. В результате их стало понятно, что делать майнер по классической схеме, когда делается "в железе" одна итерация, и потом данные гоняются через неё, нет смысла. Для этого нужно брать крутейшую микросхему ПЛИС с техпроцессом 7 нм и на ней всё делать и не факт, что будет круче микросхемы выполненной по технологии ASIC. Да и не готов я это реализовать в полной мере на данный момент, задача немного другая.
____А задача состоит в том, чтобы понять всё, что необходимо для реализации майнера в железе, и на данный момент не всё понятно. А так же обойти различные подводные камни и сделать его супер быстрым. А для этого необходимо реализовать, как минимум все 64 итерации в виде схемы с единым потоком данных, не готов пока на пальцах описать, что имею в виду, но по ходу реализации это станет понятно.
____И на данный момент задачу нашу можно разбить на некоторое количество частей. Первая часть и мы ею будем заниматься потом, это получение данных от пула и отправка ему результатов, пока это всё просто в тумане. Вторая задача, это разбиение полученного message и дополнение. Третья задача, это получение дополнительных слов. И четвёртая создание непосредственно 64-x итераций с подсчётом результатов в первых, начальных, итерациях. И реализовывать это всё будем с конца, так сказать от простого к сложному, по крайней мере по тому, что я уже понял. Хотя уверенности что я всё понял правильно нет вообще никакой, так как информации катастрофически мало, проконсультироваться так же практически не с кем, а те разработчики майнеров, с которыми я общался, например майнера z-enemy, в основном занимаются soft майнерами для GPU, и мало предоставляют полезной информации, по крайней мере понятной для меня на данном итапе развития...

____Дальше, ниже, постепенно будет отображаться процесс разработки, от теории, просчёта, и проектирования, вплоть до железа, в качестве которого пока рассматиривается серия микросхем 74ACxxx. Ну и из предварительных раздумий, стало понятно, что только применение SMD компонентов, абсолютно всех, возможно позволит создать относительно компактное устройство.
____Естественно, если кто-то захочет что-то написать, или проконсультироваться или наоборот помочь, что-то подсказать или поправить увидев явные какие-то ошибки, это очень приветствуется...

____Итак, ниже представлена структурная схема одной итерации, немного видоизменённая мной, из учёта правила, что от перемены мест слогаемых сумма не меняется, поэтому мы сначала сможем сложить h+Ki, так же сможем сложить Ch+Cy1, здесь Cy1 это вместо значка суммы от слова carry (почему мне вчера пришло на ум именно carry, а не aderr, это всё потому, что не давала покоя проблема переноса. Так как уже было понятно, что 0-я итерация сведётся к двум квантам времени. В первом будет находиться T1, а во втором A и E. И тут возникает проблема, что даже при применении микросхемы CD74ACT283M у которой время выдачи бита переноса занимает 2,7 нс при самых идеальных условиях. А именно, качественный монтаж, питание +5,5 В и исполнение выдерживающее +125 градусов, а так же выдача результата 3,3 нс. И так как этих микросхем для 32-разрядов требуется 8 шт., то имеем, что задержка в первых семи микросхемах будет 2,7 нс, что в сумме составит 18,9 нс и в последней, восьмой, 3,3 нс. А общая минимальная задержка будет 18,9 + 3,3 = 22,2 нс. Что очень медленно, если учесть, что у нас два кванта времени и общая задержка выполнения 0-й итерации будет 44,4 нс. А поэтому нужен полностью параллельный суматор с параллельным переносом на все 32-разряда, либо применение другой, ещё более быстродействующей логики, что не жалательно, либо скорее всего переход от позиционной арифметики к модулярной системе счисления). И сложить полученные значения между собой. В результате потребуется только один сумматор для сложения полученного результата с словом Wi, чтобы получить Т1.

Личная тех. тема. 0001_Hardminer_sha256.1590674891

____Хотя, нужно будет проверить идентичность результата, взять любое случайное число Wi и подсчитать результат по старой схеме и по новой, будет ли он совпадать...

Итак, в виду того, что:

Инициализация переменных
(первые 32 бита дробных частей квадратных корней первых восьми простых чисел [от 2 до 19]):

h0 := 0x6A09E667
h1 := 0xBB67AE85
h2 := 0x3C6EF372
h3 := 0xA54FF53A
h4 := 0x510E527F
h5 := 0x9B05688C
h6 := 0x1F83D9AB
h7 := 0x5BE0CD19

Мы имеем начальные фиксированные значения для слов в первой итерации, пардон, в нулевой итерации...

a := h0
b := h1
c := h2
d := h3
e := h4
f := h5
g := h6
h := h7

Мы не будем это всё реализовывать в железе и тратить на это "железо", деньги и время, время на вычисления, каждый раз...

Cy0 = (a rotr 2) xor (a rotr 13) xor (a rotr 22)

a = 0x6A09E667
(a rotr 2) = 0xDA827999
(a rotr 13) = 0x333B504F
(a rotr 22) = 0x27999DA8
0xDA827999 xor 0x333B504F = 0xE9B929D6
Cy0 = 0xE9B929D6 xor 0x27999DA8 = 0xCE20B47E

Для 0-й итерации:

Личная тех. тема. 66672510


Maj = (a and b) xor (a and c) xor (b and c)

(a and b) = 0x6A09E667 and 0xBB67AE85 = 0x2A01A605
(a and c) = 0x6A09E667 and 0x3C6EF372 = 0x2808E262
(b and c) = 0xBB67AE85 and 0x3C6EF372 = 0x3866A200
0x2A01A605 xor 0x2808E262 = 0x02094467
Maj = 0x02094467 xor 0x3866A200 = 0x3A6FE667

T2 = Maj + Cy0
T2 = 0x08909AE5

____Прежде чем продолжить дальше, нужно проверить закон:

Закон дистрибутивности. Дистрибутивность конъюнкции и суммы по модулю два.
(a and b) xor (a and c) = a and (b xor c)  !!!

____Он позволит нам в каждом блоке Maj избавитя от одной операции and, что сэкономит 8 микросхем. Итак преобразуем формулу:

Maj = (a and b) xor (a and c) xor (b and c), в

Maj = (a and (b xor c)) xor (b and c), и посчитаем, получится ли у нас тот же результат:

Maj = (0x6A09E667 and (0xBB67AE85 xor 0x3C6EF372)) xor (0xBB67AE85 and 0x3C6EF372) =
= (0x6A09E667 and 0x87095DF7) xor 0x3866A200 =
= 0x02094467 xor 0x3866A200 = 0x3A6FE667

Результаты совпали, ура, мы сэкономим огромное количество микросхем, а точнее в 126 итерациях по 8 микросхем, то есть 1008 шт. Ну или кучу логических ячеек, при реализации в ПЛИС. То есть не нужно тратить 4032 логических элемента 2И.

Далее вычисляем:

Cy1 = (e rotr 6) xor (e rotr 11) xor (e rotr 25)

h4 := 0x510E527F
e := h4

(0x510E527F rotr 6) = 0xFD443949
(0x510E527F rotr 11) = 0x4FEA21CA
(0x510E527F rotr 25) = 0x87293FA8
0xFD443949 xor 0x4FEA21CA = 0xB2AE1883
0xB2AE1883 xor 0x87293FA8 = 0x3587272B
Cy1 = 0x3587272B

____Далее вычисляем значение на выходе блока Ch:

Ch = (e and f) xor ((not e) and g)

e = 0x510E527F
f = 0x9B05688C
g = 0x1F83D9AB

(not e) = 0xAEF1AD80

Ch = (0x510E527F and 0x9B05688C) xor (0xAEF1AD80 and 0x1F83D9AB) =
= 0x1104400C xor 0x0E818980 = 0x1F85C98C

Ch = 0x1F85C98C

____Находим сумму Adder4:

Adder4 = Ch + Cy1
Adder4 = 0x1F85C98C + 0x3587272B
Adder4 = 0x550CF0B7

____Находим сумму Adder1:

K0 = 0x428A2F98

Adder1 = h + k0
Adder1 = 0x5BE0CD19 + 0x428A2F98
Adder1 = 0x9E6AFCB1

____Находим сумму Adder2:

Adder2 = Adder1 + Adder4
Adder2 = 0x9E6AFCB1 + 0x550CF0B7
Adder2 = 0xF377ED68

____И в итоге, мы имеем полностью просчитанную нулевую итерацию. Остаётся в ней реализовать три "железных" сумматора, для того, чтобы находить T1, A и E. Естественно все вычисления нужно будет ещё раз проверить, и проверить с произвольным Wi внесённые изменения.

Личная тех. тема. 0002_Hardminer_sha256.1590830058

____А вот проблема сумматоров теперь максимально остро стоит, нам нужно очень высокое быстродействие, конечно как крайний вариант, это CD74AC283M в количестве 8 шт. для каждого сумматора с максимально достижимым быстродействием в 22,2 нс. в виду того, что между тетрадами у нас последовательный перенос будет. Но, по хорошему нужно рассмотреть реализацию и применение 32-разрядного сумматора не только с параллельным вводом, но и паралельным переносом, хотя бы по 16 бит, в идеале все 32 бита. Но опять же это сильно увеличивает объём "железа", в общим палка о двух концах. Ладно, будем пока потихоньку двигаться дальше и решать проблемы по мере их поступления...
____Проверил, какой результат выдаёт оригинальная схема, например при Wi = 0x3B217FE2 и преобразованная, результаты совпали T1 = 0x2E996D4A, то есть правило "от перемены мест слагаемых сумма не меняется" действует, блин ещё бы ему не действовать, это же 1 класс школы, но просто хотелось убедиться на практике. В общим замечательно, структурная схема со всеми расчётами приведённая выше верная и можно приступать к "железу", хотя бы в теоретическом плане. Модификаций сумматоров будет несколько, скорее всего. Так как наш Adder3, например, имеет константу на одном из входов, а соответственно можно избавиться от 32 контактов, если делать сумматоры в виде отдельной платки, устанавливаемой на основную. Я думаю вы уже поняли, что я хочу сделать не одну итерацию в виде платки и потом с помощью регистров защёлкивать результат и гнать его на вход, подставляя нужные Ki и Wi, а в виде единого потока данных, с одновременной подачей сразу всех Wi для всех 64 итераций, ну да ладно, это не так важно сейчас, посмотрим, что из этого получится, просто по объёму "железа" выходит очень много, ну и пофиг, будем изголяться...
____Сейчас посидел, немного подумал и выходит, что скорость сумматора на CD74AC283M получается переменной, в зависимости от того, есть переносы или нет. В итоге, при определённых числах на входе, когда все переносы равны нулю, то есть их нет, то результат будет валидным уже через 3,3 нс, и самый идеальный вариант, что и в других двух сумматорах, которые работают параллельно, будет такая же ситуация. Тогда время вычисления 0-й итерации будет 6,6 нс, но это, самое максимальное быстродействие при определённых значениях входных переменных, ну а максимальный-идеальный остаётся прежним 44,4 нс. В общим пока ковыряю параллельный сумматор, с параллельным переносом на отдельных логических элементах, просто возможно получися уменьшить количество "железа" в силу того, что у нас одна из переменных имеет определённое значение, а соответственно внутри сумматора, в случае бита слагаемого равного нулю, элемент XOR превращается в повторитель и таким образом его можно вообще убрать из схемы, задержка становится равной 0 нс, да и потребление 0.
____Ну вот, день прошёл не зря, удалось заменить в первой тетраде микросхему CD74AC283M то есть полный 4-разрядный сумматор, у которого время выдачи результата 3,3 нс, а время выдачи бита переноса 2,7 нс, на схему на логических элементах, ну точнее элементе. Потребовался всего один логический элемент НЕ (not) от микросхемы SN74AC04. А это соответственно снижение потребляемой мощности, конкретно этим участком схемы, а также увеличение быстродействия, теперь бит переноса выдаётся за 0 нс, а результат за 1 нс.

Личная тех. тема. 0002_Hardminer.1590953524

____Удалось это сделать конечно только благодаря тому, что одно из слагаемых является константой у нас это число 0x8 (1000), Ну а второе естественно может иметь 16 значений от 0000 до 1111.
____В результате разработки сумматора для следующей тетрады, для битов от I0WI4...I0WI7 задержка распространения, минимально достижимая, вышла 3 нс, а вот количество элементов больше 1...2 корпусов микросхем. Поэтому решил, что проще поставить обычный сумматор, в идеале CD74ACT283 но его нужно будет искать в исполнении на 125 градусов и питать напряжением +5,5 В. Так как в datasheet именно при этих двух параметрах можно получить максимальное быстродействие, то есть минимальные задержки, а именно выдача результата через 3,3 нс и бита переноса через 2,7 нс. В нашем же случае, мы для получения результата будем использовать сумматор, а бит переноса получать не за 2,7 нс взяв его с самой микросхемы, а получать его отдельно при помощи двух логических элементов ИЛИ (or) и И (and), что даёт нам время задержки 2 нс. Таким образом по 8 битам мы имеем, время выдачи результата, через 3,3 нс, а не 6 нс и бит переноса С2 через 2 нс, а не через 5,4 нс.

Личная тех. тема. 0003_Hardminer.1591168230

____Хе хе, а вот и не правильно, я забыл просчитать, если бит переноса из первой тетрады равен 1, то схема уже не пашет на этих двух лог. элементах. Так что во второй тетраде полностью будет задействована микросхема сумматора, и время задержек - результат через 3,3 нс, бит переноса С2 через 2,7 нс.

Личная тех. тема. 0004_Hardminer.1591179405

____Да, медленно. Выход только один, параллельный сумматор, с параллельным переносом на все 32 бита. Тут проще взять формулу в базисе логического элемента И-НЕ (nand) и преобразовать в соответствии с быстродействием конкретных микросхем, например та же ЛА3 от TI имеет минимально достижимую задержку 1,5 нс, в то время как ЛА4 - 1 нс, если судить по datasheet, да меньше на один логический элемент, но тут уже и 1 нс кажется огромной задержкой... В общим, нужно начинать просчитывать полностью с параллельным переносом сумматор. Вся проблема, что больше 8 входов как вроде нет ЛА2 а нужно и с 32 входами И-НЕ элемент, а это только при помощи наращивания и дополнительные ступени, опять же дополнительные 1...2 нс. Но, всё равно выигрыш, пусть даже 3 ступени, и каждая по 1 нс, то это 3 нс, 1 нс в сумматоре, всего 4 нс, против 22,2 нс, в общим... Нужно мучить формулу, чертить схему, с учётом что оба операнда не константы, и будет точно уже потом ясно, где константы, там понятно, всё проще и компактнее...
Где бы ещё время взять, работа, ремонт, пустой холодильник, да и спать иногда желательно...
Ладно, фигня это всё, есть над чем поработать, поразмыслить, что поковырять, больше беспокоит, не приведёт ли ёмкость и индуктивность монтажа, паразитные наводки и весь остальной гемор, к тому, что будет всё с параметрами не min, и даже не typ, а max и тогда это печально, так как это даже не уровень К531 серии будет, у которой в среднем 5...7 нс. Но думаю, коли уж К531 серия в середине 70-х позволяла 5...7 нс, то уж 74ACxxx с SMD монтажом и корпусами, да и платы покачественнее на пару порядков, должны справиться... Слишком много неизвестных...
Ладно, это так, мысли в слух, поживём посмотрим, как оно пойдёт дальше, впереди слишком много ещё работы...

Итак, делаем параллельный сумматор с параллельным переносом для Adder3 первые 4 бита у нас готовы, следующий бит I0ADD3OUT4 требует одного элемента "исключающее ИЛИ" (XOR), на один вход подаётся четвёртый бит слова, а на второй третий бит слова, так как формула переноса полностью коллапсирует до повторителя для P3 (Пэ три):

P3 = /  /ai . bi  .  /ai-1 . bi-1 . hi-1  .  /ai-2 . bi-2 . hi-1 . hi  .  /ai-3 . bi-3 . hi-2 . hi-1 . hi  .  /p . h0 . h1 . h2 . h3

Как видим /ai . bi
это для P3
/a3 . b3
а b3 = 1 соответственно наш логический элемент 2И-НЕ имеет на одном из входов константу равную всегда лог.1 и соответственно элемент становится просто инвертором. Во всех остальных частях формулы у нас присутствуют p, b0, b1, b2 которые так же константы и равны лог. 0 из-за чего каждый из этих элементов всегда на выходе имеет константу равную лог. 1, соответственно общая инверсия, то есть по сути это логический элемент 5И-НЕ, становится инвертором для /a3 . b3 и поэтому нет смысла пропускать сигнал a3 через два последовательно включённых инвертора, поэтому он у нас приходит на прямую на сумматор, который так же упрощается до одного логического элемента XOR...

Процесс потихоньку идёт, просчитал 8 бит, получилось компактненько, 4 корпуса микросхем и то есть ещё 5 свободных логических элемента и задержка пока что составляет 3 нс, естественно минимально достижимая при различных условиях, оговоренных выше, т. е. питание 5,5 В, и т. д. Продолжу просчитывать дальше на днях по мере появления свободного времени.

Личная тех. тема. 052_erst.1591632132


Итак, сегодня (18.06.2020г.) выдался свободный денёк, и можно плотно заняться сумматором Adder3. И пожалуй придётся начать всё сначала, так как во-первых, у меня образовалась приличная пачка черновиков, в которых уже сам чёрт ногу сломи, и когда я недавно накосяпорил в схеме, то восстановить её по черновикам с налёту не смог. А во-вторых в процессе восстановления пришла мысль, что можно ещё прилично сократить объём используемых логических элементов. И это всё потому, что второе слагаемое у нас константа с точно известным значением каждого бита. Да и заодно можно будет всё детально и тщательно проверить. К томуже, нужно всё же, с черновиков переносить данные в электронный вид, и удобочитаемый, чтобы можно было в любой момент вернуться назад и посмотреть, да и при проверке так будет гораздо удобнее, а точнее по сути, просто возможно. Поэтому переберусь я в пост ниже и там потихоньку начну...


.


Последний раз редактировалось: Viktor2312 (18.06.20 9:12), всего редактировалось 40 раз(а)

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 12438
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Личная тех. тема. Empty .

Сообщение  Viktor2312 в 25.08.19 9:54

7
.
Поехали...

Итак, мы имеем сумматор, который имеет два 32-разрядных входа и один 32-разрядный выход. Первое слагаемое a, это переменная, а точнее слово w[0]. Второе слагаемое b, это константа с точно известным значением, а именно 0хF377ED68. А соответственно по сути у нас получается преобразователь данных, есть вход, на который подаётся переменная a и есть вход, на котором получается значение T1. Для начала запишем наше число в двоичной форме, пожалуй это будет лучше сделать в графическом виде, я для этого использую программу Splan в которой я черчу схемы и вообще всё, что угодно, так как более простой в освоении программы, мне потребовался 1 час, чтобы разобраться в ней, и удобной в использовании, я ещё не встречал. Ну а потом просто конвертирую в .bmp формат, для этого в ней имеется кнопочка, пойду почерчу...
Готово, загрузим, а нет не загрузим, у нас как всегда ipic.su не доступен Error 521 Web server is down, как же это за..бало, но мы пойдём другим путём...

Личная тех. тема. 30838992

Все нервы измотали, но как вроде нашёл, куда грузится и работает vfl.ru
Итак, хух, на рисунке выше наше входное слово b, теперь оно представлено наглядно и всегда можно посмотреть какой бит чему равен. Для нас максимально выгодно, чтобы в нём, да и в любом другом было как можно больше нулей, это кардинально сокращает количество "железа", но что имеем, то имеем, с этим и будем работать. Так же нам здесь очень везёт, что входной бит переноса из младшего разряда p не используется и по сути всегда равен нулю, это вообще отрезает огромный кусок схемы и не только тут, но и в дальнейшем, где оба слагаемых будут переменными. Далее представим нашу формулу, опять чертить...

Личная тех. тема. 30839291

Как видим в последней части формулы у нас присутствует бит переноса из младшего разряда p, а он у нас всегда равен нулю, соответственно присутствуя на входе логического элемента И-НЕ он создаёт условие, что у нас на выходе этого логического элемента всегда будет лог. 1 и таким образом, нет смысла реализовывать данный логический элемент в "железе", достаточно просто подать лог. 1 на вход следующего элемента И-НЕ, но и это не нужно делать, так как лог. 1 на многовходовом логическом элементе И-НЕ, если она константа и всегда равна лог. 1, просто убирает данный вход. Например, если у нас логический элемент 4И-НЕ и на один из входов постоянно подаётся лог. 1, то он просто превращается в логический элемент 3И-НЕ. Таким образом последняя часть формулы отпадает во всех случаях, вне зависимости от того, обе переменные у нас на входе сумматора или одна из них равна константе, так как входной бит переноса из младшего разряда у нас всегда равен лог.0. Далее перейдём к реализации, а точнее проверки 0-го бита нашего сумматора. Итак, мы имеем вход a значение которого мы не знаем и вход b значение которого мы знаем. Так как мы расчитываем 0-й бит, то и входные слагаемые у нас a0 и b0, входной бит переноса равен нулю. Для этого нам нужно вычертить схему одного разряда сумматора, и она будет идентичная для всех разрядов, и самое главное, что в ней нам не требуется реализовывать выходной бит переноса, так как у нас параллельный сумматор с параллельным переносом, пойду почерчу, не я конечно пойду кофе пить и курить, а потом...

Личная тех. тема. 30839683

Вот и наш сумматор, схема в данном случае универсальная, для всех разрядов, то есть, если бы у нас на обоих входах были переменные, а так и будет в последующих итерациях, то для 32 разрядов требуется 16 микросхем SN74AC86D которая содержит 4 логических элемента "исключающее ИЛИ" (xor), по два логических элемента на один разряд. Но в данном конкретном нулевом разряде у нас p=0, также b0=0. И тут у нас получается хорошая возможность сократить количество "железа", так как известно, что если на одном из входов логического элемента "исключающее ИЛИ" присутствует константа лог. 1, то элемент становится инвертором, а если лог. 0, то повторителем. Это легко проверить по таблице истиности или по самому свойству данного логического элемента, так как это сумматор, но без бита переноса в старший разряд:

0 + 0 = 0; 0 + 1 = 1; 1 + 0 = 1; 1 + 1 =0 В последнем случае еденица переходит в старший разряд, но так как у элемента xor она отбрасывается, то и получается 1 + 1 = 0.

Теперь как видим если у нас b0=0, то есть будет два возможных варианта a0 = 0 и a0 = 1, соответственно 0 + 0 = 0 и 1 + 0 = 1, как видим если первое слагаемое равно 0, то и на выходе 0, если первое слагаемое равно 1, то и на выходе 1, то есть сигнал повторяется, а соответственно нам становится не нужен логический элемент xor который в данном случае будет просто вносить задержку не выполняя никакой полезной функции, так же и со вторым логическим элементом в виду того, что p0 = 0. В результате оба логических элемента убираются, так как они просто повторители и сигнал a0 с входа сумматора просто подаётся на выход S0, то есть задержка появления результата в этом конкретном разряде составляет 0 нс, мгновенно получаем результат, жаль, что в остальных разрядах так не получится. В итоге мы проверили, что до этого, мы всё верно просчитали для 0-го бита нашего сумматора и его схема, до жути проста:

Личная тех. тема. 30839872

Далее, следует упомянуть о нахождении сигналов h0...h30, да именно до h30 так как после сложения в 32 разряде, бит переноса в старший разряд нам не нужен в виду того, что у нас сложение по модулю 32, а это ещё огромный кусок схемы отсекает, и не только в данном случае, но и во всех остальных. Эти сигналы, это сигналы распространения переноса и находятся они до жути просто, а в случае константы на одном из входов, то и ещё проще. Находятся они по формуле hi = ai or bi. Далее переходим к расчёту первого разряда, нулевой мы уже просчитали и вычислили. И да следует пояснить по поводу сигналов, их названий на схеме, как видим входной сигнал называется I0WI0 тут всегда в начале идёт обозначение номера итерации к которой относится сигнал I0 значит нулевая итерация, далее WI0 это входное слово Wi и цифра, это номер бита от 0 до 31. На выходе, опятьже I0 нулевая итерация, ADD3 это обозначение нашего сумматора Adder3 и OUT0, что это выходной сигнал и бит номер 0, думаю понятно...
Итак далее, наш сумматор для первого бита имеет ту же схему:

Личная тех. тема. 30840257

И мы уже видим, что из-за того, что b1=0, первый логический элемент опять превращается в повторитель, прямо магия какая-то превращается, превращается, а вот p0 мы сейчас рассмотрим ниже, для него мы имеем следующую формулу:

Личная тех. тема. 30840292

И как видим по сути это два логических элемента 2И-НЕ выходы которых подключены к ещё одному логическому элементу 2И-НЕ, это та общая черта обозначающая инверсию, которая над всей формулой, ладно, для большего понимания, начерчу схему данной формулы:

Личная тех. тема. 30840386

Тут у нас всё так же как и с элементом xor, только логика отличается, но суть такова, если на одном из входов логического элемента 2И-НЕ константа, то при константе равной лог. 0 на выходе будет всегда лог. 1, а если лог. 1 на одном из входов всегда, то это просто инвертор для второго сигнала. Итак, h0 у нас, это a0 xor b0 и нам известно, что b0=0, а при лог. 0 на одном из входов логического элемента ИЛИ даёт нам, что он становится повторителем для второго сигнала, выкидываем наш логический элемент ИЛИ из схемы и получаем

h0 = a0

В итоге движемся по схеме далее, верхний логический элемент 2 И-НЕ, на одном из входов b0=0, значит на его выходе будет постоянно лог. 1, которая поступает на один из выводов элемента 2 И-НЕ, среднем по схеме, на втором логическом элементе, нижнем по схеме у нас сигнал p присутствует, который всегда равен лог. 0, а соответственно на выходе будет всегда лог. 1. В итоге мы получаем, что на обоих входах, среднего по схеме, выходного логического элемента 2И-НЕ, присутствуют две константы всегда равные лог. 1, а значит на выходе всей этой схемы всегда будет присутствовать лог. 0  и соответственно p0 всегда равен лог. 0. Таким образом и второй логический элемент в нашем сумматоре, стал повторителем, а значит входной сигнал a1 опять проходит на выход, без какой либо задержки и схема, остаётся простой до жути:

Личная тех. тема. 30840495

Эхх, что-то хочется кушоц, пойду ка я приготовлю борщичёк... Но потом продолжу, обязательно продолжу...
Итак, пока там кипит... Находим h1. h1 = a1 or b1, b1= 0, а соответственно, элемент ИЛИ становится повторителем для сигнала a1, соответственно:

h1 = a1

Формула для вычисления, p1 с отброшенной последней частью будет:

Личная тех. тема. 30841372

И что же мы тут видим, в первом выражении у нас b1 равен 0, а соответственно на выходе этого логического элемента всегда будет лог. 1, ну и на одном из входов последующего, во втором выражении b0 равен 0, а соответственно на выходе будет всегда лог. 1 и соответственно на выходе последнего логического элемента будет всегда лог. 0, то есть p1 будет всегда равен лог. 0 и это делает в схеме сумматора один из логических элементов повторителем, но и b2 у нас равен лог.0, что и второй логический элемент xor превращает в повторитель и таким образом наша схема продолжат быть до жути "сложной":

Личная тех. тема. 30841466

Ну вот, можно и приступать к просчёту 4-го разряда и схемы бита переноса для него, но позже, сейчас я заправлюсь борщичком по полной программе, скорее всего 2 раза, а пока буду это мероприятие производить, я ещё и сериал буду смотреть 3 сезон 12 серию "Помнить всё", а потом, продолжу, но, если не засну, но даже если и засну, до полуночи времени всё равно ещё много останется, так что обязательно сегодня продолжу, нужно сегодня обязательно расчитать, и вычертить, хотябы 8 разрядов сумматора...

Итак, пожрали, поспали, движемся дальше... Расчитываем и вычерчиваем сумматор третьего разряда и схему переноса для него. Изначальная схема у нас такая:

Личная тех. тема. 30843179

Так как b3 у нас равна лог. 1, то первый логический элемент становится инвертором для сигнала a3. Далее смотрим формулу для p2 и как видим во всех частях у нас присутствует константы b0, b1 и b2 которые равны 0, что приводит к тому, что на всех входах выходного элемента 3И-НЕ будут присутствовать лог. 1, а на выходе постоянно лог. 0, а соответственно и p2 будет всегда равен лог. 0

Личная тех. тема. 30843210

Таким образом, второй логический элемент xor в сумматоре становится повторителем и схема сумматора для этого разряда будет состоять только из одного инвертора и иметь минимально достижимую задержку 1 нс, а схема приобретает следующий вид:

Личная тех. тема. 30843226

Далее переходим к расчёту четвёртого разряда сумматора и бита переноса p3 для него...
И как мы уже убедились, мы можем отбрасывать те части формулы, где есть хоть одна константа равная 0, таким образом формула для нахождения p3 будет иметь следующий вид:

Личная тех. тема. 30843490

Как видим, из-за того, что b3 равна лог. 1 наш элемент становится инвертором и второй элемент, сначала становится элементом 2И-НЕ но и всё равно на втором выводе имеет констану единицу, поэтому так же становится инвертором, а включать два инвертора подрят нет смысла, только электроэнергию жечь, поэтому имеем p3 = a3. В самом же сумматоре b4 у нас равна лог. 0 и в результате имеем, схему сумматора состоящую из одного логического элемента xor на один вход которого подаётся 4-й разряд, а на второй перенос p3 который равен a3 и имеем следующую схему:

Личная тех. тема. 30843590

Переходим к пятому разряду... Для начала запишем:

h0 = a0
h1 = a1
h2 = a2
h3 = K (1)
h4 = a4
h5 = K (1)
h6 = K (1)
h7 = a7
h8 = K (1)
h9 = a9
h10 = K (1)
h11 = K (1)

Сумматор для 5-го разряда:

Личная тех. тема. 30844863

Формула:

Личная тех. тема. 30844992

Тут можно было бы упростить просто до одного логического элемента 2И, но мы пока этого делать не будем, так как нам возможно в дальнейшем потребуется сигнал после /a3 and a4, а изменить схему позже, всегда можно. Так же применён логический элемент 3И-НЕ, а не 2И-НЕ, в силу того, что микросхема SN74AC00D имеет минимально достижимую задержку 1,5 нс, то есть больше на 0,5 нс, по сравнению с SN74AC10D, кажется немного, но учитывая большое количество итераций, набегает прилично, а нам нужно максимальное быстродействие. В результате имеем такую схему на данный момент:

Личная тех. тема. 30845148

Нууу, на сегодня хватит, устал...

Новый день, продолжим, хоть и времени в обрез, нужно будет сходить денег на выходные заработать, чтобы спокойно позаниматься этим всем...
Итак 6-й разряд и бит переноса для него p5. Сигнал /3AND4 нам пригодился, как и выведеный на шину сигнал /I0WI5, на фото выше он ещё не выведен, но будет взят с элемента D1.2, так как нагрузочная способность уж точно не менее 10 у нас имеется в запасе, более точно нужно посмотреть в datasheet, но если честно не хочется перегружать микросхемы и в целях надёжности, да и для не снижения их быстродействия, поэтому будем условно считать, что у нас нагрузочная способность N=10. Итак формула и схема для p5:

Личная тех. тема. 30848184

Так как b6 у нас равен лог.1, то a6 в сумматоре проходит на второй логический элемент через инвертор. И в результате имеем следующую схему на данный момент:

Личная тех. тема. 30848323

Далее седьмой разряд и бит переноса для него p6.

Личная тех. тема. 30848835

Так как b7 равен лог. 0, то первый логический элемент xor в сумматоре становится повторителем и опять попросту исключается, в итоге остаётся только второй логический элемент xor. И общая схема приобретает следующий вид:

Личная тех. тема. 30849121

Нууу, вот и готовы первые 8 бит. Получилось вполне компактненько и экономично, всего 3 микросхемы и даже ещё свободна два инвертора, на плате это будет занимать, примерно 30 х 10 мм. Ладно пора собираться и бежать зарабатывать деревянные в оффлайне, в онлайне очередная, ежесуточная выплата капнула 4.83 NBX и хорошо, хотя тут нужно довести, чтобы 500 NBX капало в сутки и тогда можно будет спокойно заниматься электроникой и ни о чём не переживать. Дальнейшую разработку продолжу в следующем посте, впереди ещё 24 бита, но зато первые 8 уже проверил и перепроверил вдоль и поперёк, ладно, до новых встречь... хе-хе-хе, нужна мотивирующая картинка, чтобы дальше хорошо процесс шёл, для меня будет эта, мой лисёнок:

Личная тех. тема. 30849164


...
.


Последний раз редактировалось: Viktor2312 (25.06.20 9:37), всего редактировалось 40 раз(а)

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 12438
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Личная тех. тема. Empty .

Сообщение  Viktor2312 в 20.09.19 22:13

8
.
В общим попробовал сложить с числом 0х21 ради эксперимента, числа могут быть в нашем случае от 0х00 до 0xFF, взял вот из начала число 68 + 21 = 89, проверил в виндовом и обычном калькуляторе, надо же и правда 89  Laughing подставил в схему нолики и единички и получилось всё верно, это радует. Потом ещё на досуге поэкспериментирую, подставив что-то из середины, типа 0х88 и из конца, типа 0хEF или им подобные числа, но думаю что всё верно и в схеме ошибок нет, но попроверять всё равно нужно будет, как нибудь на досуге:

Личная тех. тема. 30870501

Проверил с числом 0х8A, результат получился верным:

Личная тех. тема. 30879840

В общим, решил я всё же, что тут можно применить логические элементы 2И-НЕ микросхема SN74AC00D, хоть они и имеют минимально достижимую задержку 1,5 нс, так как это младшие разряды и задержки тут всё равно минимальны. А по мере продвижения к более старшим разрядам они неминуемо вырастут из-за того, что потребуются логические элементы с большим числом входов и их придётся создавать из элементов с меньшим количеством входов, а соответственно будет как минимум 2 кванта времени по 1 нс, и как следствие общая задержка составного элемента будет 2 нс, а общая как минимум 4 нс. Так как, всё равно минимальное время получения верного результата на всех битах, будет равно времени, которое имеет та схема бита переноса, которая имеет максимальную задержку и плюс задержка в сумматоре в 1 нс.
Ниже формула для бита переноса p7 и схема, а также схема сумматора для a8

Личная тех. тема. 30880765

Естественно схему пришлось изменить, заменив логические элементы 3И-НЕ на 2И-НЕ. И на данный момент имеем задействованными 5 микросхем, но есть ещё один свободный элемент НЕ и три элемента "исключающее ИЛИ".

Личная тех. тема. 30880875

Проверил схему с числом 0хA9, такое число, чтобы бит p7 по логике был равен лог. 1 в итоге 68 + A9 = 111. Результат совпал, можно двигаться дальше:

Личная тех. тема. 30884371


...
.


Последний раз редактировалось: Viktor2312 (23.06.20 7:44), всего редактировалось 7 раз(а)

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 12438
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Личная тех. тема. Empty .

Сообщение  Viktor2312 в 27.11.19 10:18

9
.
Далее, расчитываем p8 и S9 ниже формула и схема:

Личная тех. тема. 30884722

И основная схема с внесёнными изменениями:

Личная тех. тема. 30884747

Далее, расчитываем p9 и S10 ниже формула и схема:

Личная тех. тема. 30901893

Как видим задержка уже стала очень большой 7,2 нс, её можно уменьшить применив вместо 4И-НЕ элементов составные элементы, что даст задержку в 2 нс на каждом и общая задержка будет 5 нс, вместо 7,2 нс, но и это много, к тому же у нас сильная нагрузка по входам получается.
Тут напрашивается вывод, что нужно делать комбинированную схему, применяя готовые сумматоры на 4 разряда начиная с 4 бита. Первые 4 бита у нас можно реализовать без микросхемы сумматора, только на одном инверторе, и получением бита переноса p3 мгновенно. То есть биты a0...a3 и бит переноса реализуются на одной микросхеме и остаётся свободно 5 инверторов, которые можно применить далее. Следующие 4 бита. сложение реализовать на готовом 4-х разрядном сумматоре, а бит переноса p7 получать отдельно, на логике, так как на логике выходит задержка 2 нс, а с микросхемы он выходит через 2,7 нс. Далее нужно просчитать за какое время мы сможем получить бит переноса p11 и если время его получения будет меньше 2,7 нс, то так же реализовать схему его получения на логике, если дольше, то остальная вся часть сумматора будет строиться на готовых микросхемах. Если бы мы всю схему реализовали на 8 микросхемах сумматоров, то наша задержка составила бы 2,7 *7 +3,3 = 22,2 нс, но так как первой микросхемы не будет, а вместо неё только один инвертор и мгновенное получение бита переноса, то имеем 2,7 *6 + 3,3 = 19,5 нс, при получении бита переноса p7 отдельно на логике имеем задержку 2 нс, и времы ещё уменьшается на 0,7 нс, в итоге имеем: 2+ 2,7 *5 + 3,3 = 18,8 нс. Теперь нужно просчитать p11, чтобы точно уже знать, как дальше реализовывать схему и получится ли у нас иметь минимально достижимое время нашего сумматора Adder3 меньше 18,8 нс.

Личная тех. тема. 30902889

Как видно из формулы и схемы выше, бит переноса p11 у нас получается дольше чем за 2,7 нс, за 4 нс. Значит брать мы его уже будем непосредственно с микросхемы сумматора. И таким образом у нас получается, что будет применено 7 микросхем сумматора и логика для получения бита p7 за 2 нс. И максимально достижимое быстродействие нашего сумматора будет 18,8 нс.
Осталось выделить время и начертить окончательную схему...


.


Последний раз редактировалось: Viktor2312 (25.06.20 11:34), всего редактировалось 13 раз(а)

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 12438
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Личная тех. тема. Empty .

Сообщение  Viktor2312 в 27.11.19 10:45

10
.
Вот собственно и готов сумматор Adder3. Вышло 10 микросхем в общей сложности, но остались свободными 5 логических элементов НЕ и 2 логических элемента 3И-НЕ, которые можно будет задействовать впоследствии. Так же 1 резистор и на схеме пока не показаны, но будет ещё 10 блокировочных конденсатором по 0,1 мкФ. На плате, это займёт примерно 100 х 15 мм, возможно меньше, это так, прикидки на глаз.
Схема:
Личная тех. тема. 30906274_m

Теперь можно приступать к разработке следующего сумматора Adder5.


.


Последний раз редактировалось: Viktor2312 (25.06.20 17:27), всего редактировалось 5 раз(а)

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 12438
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Личная тех. тема. Empty .

Сообщение  Viktor2312 в 27.11.19 10:46

11
.
Движемся дальше, в Adder5 будем применять 8 микросхем сумматоров, но для второй микросхемы уже точно будем использовать бит переноса p3 построенный отдельно, а не с самой микросхемы, это нам даст выигрыш в 0,7 нс и для схемы получения его, у нас как раз есть свободные, оставшиеся логические элементы:

Личная тех. тема. 30911361

Теперь нужно разработать схему для бита переноса p7 и посмотреть какая выйдет задержка и сколько потребуется логических элементов...

А логических элементов потребуется много, как выяснилось, либо 3 микросхемы с элементами 3И-НЕ и задержка выходит 4 нс, если брать с микросхемы, то корректный бит переноса будет у нас через 2 + 2,7 нс, то есть через 4,7 нс. Это нас утраивает и соответственно отпадает необходимость формировать отдельно бит переноса p3, так как не важно через 2 или 2,7 нс он будет корректным, важным будет время формирования бита переноса p7, он задаёт нам задержку в 4 нс появления бита переноса после первых двух микросхем. Затем будет 5 задержек по 2,7 нс и на последней 3,3 нс, итого выходит, максимально достижимое быстродействие сумматора Adder5 равным: 4 + 2,7 * 5 + 3,3 нс = 20,8 нс. И таким образо выходит, что переменная E для второй итерации будет сформирована через 39,6 нс после подачи слова w[0]. Естественно напомню, что это максимально короткое время, которое можно достичь, учитывая параметры из datasheet и при соблюдении многих условий, таких как питание +5,5 В, кристалл микросхемы должен быть с диапазоном до +125 оС, проводники на плате иметь минимальную длину, не должно быть прямых углов у дорожек, дорожки на разных сторонах платы должны проходить не горизонтально, а под углом 90о и т. д. и т. п. Там ещё очень много условий, которые кстати все придётся соблюсти:

Личная тех. тема. 30911478

Теперь можно приступать к черчению схемы, она получается довольно простой и однообразной. Задействовано будет 3 отдельные микросхемы SN74AC10D, а оставшиеся от сумматора Adder3 пока будут не задействованы, и таким образом выходит, что сумматор Adder5 будет построен на 11 микросхемах...

А хотя нет, немножечько накосяпорил, при составном элементе, нам же нужен элемент 2ИЛИ, а не И-НЕ, вот отвлёкся чуток, и чуть ошибку не сделал, но мы это сейчас поправим, и количество микросхем всё равно не меняется 11 шт. на сумматор, а вот свободных элементов немного прибавится...

И схема, на данный момент, на ней Adder3 и Adder5 реализованы:

Личная тех. тема. 30911889_m


Итак, у нас вышло, что I0Adder3 имеет быстродействие 18,8 нс. Именно через такое время будут получены старшие 4 разряда, всё бы замечательно, но, нам нужно быстродействие. Поэтому нужно ещё ускорить его. Для этого придётся увеличить объём "железа". Какая у нас основная проблема, это бит переноса, мы его ждём из предыдущего разряда и не можем двигаться дальше, а параллельный перенос полноценный, мы не можем реализовать из-за отсутствия многовходовых логических элементов. А построение составных логических элементов с большим количеством входов из элементов с меньшим количеством входов, опять же дают нам задержки больше, чем выдаёт готовый 4-х разрядный сумматор SN74ACT283M, выполненный в виде одной микросхемы, напомню мы имеет выход результата через 3,3 нс, а бита переноса через 2,7 нс. Но, есть маленькая хитрость, если, например мы имеем включённые два сумматора с последовательным битом переноса между тетрадами и соответственно получением бита переноса через 2,7 + 2,7 = 5,4 нс, то мы можем принять время подачи данных за t0, именно с этого момента у нас начнутся все вычисления и соответственно через 5,4 нс изменится значение бита переноса в старшие разряды, но как быть, ведь у нас ещё не готов и неизвестно правильное значение входного бита переноса из младших разрядов. И вот тут, мы можем применить две идентичные схемы, но на первой входной бит переноса подсоединён к лог. 0, а на второй к лог. 1 и тем самым мы имеем два значения, как данных, так и выходного бита переноса в старшие разряды. И нам остаётся только при помощи двух мультиплексоров 4хMX2-1 выбрать правильные данные и при помощи ещё одной микросхемы, в которой 3 мультиплексора будут незадействованы, выбрать правильный бит переноса в старшие разряды. Тут тоже всё не так просто, так как сама микросхема мультиплексора имеет задержку на выбор входа, который будет соединён с выходом, а именно 1,5 нс. И потом сами данные с входа на выход проходят с задержкой 2,1 нс. Это приходится учитывать и выигрыш в времени получается начиная с 9 бита числа и далее. В общим осталось просчитать задержки, добиться максимального быстродействия, хотя пока выигрыш точно можно получить в 1,9 нс, дальше не просчитывал, но думаю больше, и вычертить схему, и тогда можно будет приступать к разработке печатной платы, в виде небольшого модуля у которого будет 32 контакта вход, на который подаётся число W[0] и выход 32 контакта T2, и естественно по несколько контактов для подачи напряжения питания. Небольшие модули позволят во первых под ними на основной плате располагать другие микросхемы, ну и в случае применения другой элементной базы, заменять модули, правда при помощи выкусывания этих контактов, так как разъёмы получаются слишком громоздкими. А так можно использовать либо тонкий лужёный провод, либо обрезки от выводов резисторов и расположить их с очень мелким шагом, а по углам, крепить плату при помощи более толстых 4-х контактов, соединённых с общим прободом, но это всё не точно, просто прикидки на будущее...


.


Последний раз редактировалось: Viktor2312 (27.07.20 22:53), всего редактировалось 10 раз(а)

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 12438
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Личная тех. тема. Empty .

Сообщение  Viktor2312 в 27.11.19 10:46

12
*резерв

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 12438
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Личная тех. тема. Empty Re: Личная тех. тема.

Сообщение  Спонсируемый контент

13

Спонсируемый контент


Вернуться к началу Перейти вниз

Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения