2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1 ... 3, 4, 5, 6, 7
 
 Re: Чип NXH5104
Сообщение05.07.2020, 12:27 


21/05/16
4292
Аделаида
kotenok gav в сообщении #1472216 писал(а):
$xab \times ycd = ab \times cd + (y \wedge a)(y \wedge b) + (x \wedge c)(x \wedge d)$.

Ой, нет :facepalm: $xab \times ycd = ab \times cd + (y \wedge a)(y \wedge b)00 + (x \wedge c)(x \wedge d)00$.

-- 05 июл 2020, 18:58 --

Может быть, действительно будет проще через EEPROMы, да...

-- 05 июл 2020, 19:28 --

Вот, кажется, нашел подходящий: https://www.onsemi.com/pub/Collateral/CAT28C512-D.PDF

 Профиль  
                  
 
 Re: Чип NXH5104
Сообщение05.07.2020, 13:31 
Заслуженный участник


20/08/14
11776
Россия, Москва
kotenok gav в сообщении #1472317 писал(а):
kotenok gav в сообщении #1472216 писал(а):
$xab \times ycd = ab \times cd + (y \wedge a)(y \wedge b) + (x \wedge c)(x \wedge d)$.
Ой, нет :facepalm: $xab \times ycd = ab \times cd + (y \wedge a)(y \wedge b)00 + (x \wedge c)(x \wedge d)00$.
Если Вы пишете не только для себя, то обе записи неправильные! В них ведь скобки не просто умножаются (да ещё и на ноль в второй раз!), а и смещены в позицию своего бита. Т.е. для каждой скобки должен присутствовать свой двоичный множитель. А ни $11$ ни $00$ не являются двоичными числами без явного на то указания, например как в C 0b00 или более математически $00_2$.
kotenok gav в сообщении #1472317 писал(а):
Может быть, действительно будет проще через EEPROMы, да...
Вот, кажется, нашел подходящий: https://www.onsemi.com/pub/Collateral/CAT28C512-D.PDF
Фигасе подходящая ... Для полноты ощущений нужна 128Кx16, чтобы уж сразу получить весь результат 8x8=16, да ещё и с выбором кода (без знака или в дополнительном коде). Тут же ещё и часть адреса подавать отдельно ... Уж проще две W27C01 (128Кх8) поставить, они дешевые и распространённые. Ну или одну W27C02 (256Кх8), она тоже распространённая, и читать старший и младший байт подряд из неё.

Если же хочется самому логику спроектировать, то надо идти иерархически: сначала сделать умножитель 1x1=1 (который обычный 2И), потом из них и сумматоров (которые тоже разложить на ИСКЛЮЧАЮЩЕЕ-ИЛИ плюс И плюс ИЛИ плюс НЕ) собрать умножитель 2x2=4, потом из них и сумматоров (которые уже известно как делать) сделать умножитель 4x4=8, потом из них и сумматоров уже 8x8=16. Получится объёмно и не быстро, зато прозрачно (понятно как работает). Потом почитать как народ раньше проектировал умножители и какие там интересные вещи/идеи применял (ускоренный перенос, частичное суммирование, регулярная матричная структура), но это лишь ради просвещения, реально делать удобнее по другому (на ПЗУ или вообще ПЛМ).

 Профиль  
                  
 
 Re: Чип NXH5104
Сообщение05.07.2020, 13:40 


21/05/16
4292
Аделаида
Dmitriy40 в сообщении #1472340 писал(а):
В них ведь скобки не просто умножаются (да ещё и на ноль в второй раз!), а и смещены в позицию своего бита.

Это там не умножение, это просто биты.
Dmitriy40 в сообщении #1472340 писал(а):
Для полноты ощущений нужна 128Кx16, чтобы уж сразу получить весь результат 8x8=16, да ещё и с выбором кода (без знака или в дополнительном коде).

А, точно, я забыл про дополнительный/обычный... Ок, поставлю две W27C01.

 Профиль  
                  
 
 Re: Чип NXH5104
Сообщение05.07.2020, 14:06 
Заслуженный участник


20/08/14
11776
Россия, Москва
Иногда предусматривают и смешанное умножение (один множитель без знака, второй в дополнительном коде), ради этого можно поставить две W27C02 и завести на них по биту выбора кода для каждого множителя. Ещё совсем уж иногда предусматривают и дробное умножение (т.е. числа в операндах трактуются как дробные с точкой или слева от операнда, или справа от знакового бита если он есть, или выделяют ещё 1 бит на целую часть), правда тут возникают интересные коллизии когда результат умножения не влезает в удвоенную разрядность и приходиться его сдвигать (собственно чтобы не потерять 1 бит при программной реализации на беззнаковом умножителе и делают операцию аппаратно), ну и для байтов это малоосмысленно.
А можно забить и заставить программиста учитывать знаки (не так уж это и сложно, хотя конечно не одна и даже не пяток команд, где-то десяток общих или одна-две специализированных) и реализовать лишь беззнаковое умножение на двух W27C512.

С другой стороны, поставив ПЗУ больше объёмом и заведя лишние адреса в устройство управления можно реализовать произвольную (и сложную) функцию от двух байтов, например деление, или ещё что-нибудь очень сложное (да хоть НОД).

 Профиль  
                  
 
 Re: Чип NXH5104
Сообщение08.09.2020, 14:42 


21/05/16
4292
Аделаида
Пара вопросов возникла...
1) Стоит ли делать дополнительный регистр (или копировать в один из старых? или вообще ничего не делать?) для старшего байта умножения?
2) Стоит ли копировать в этот регистр при делении частное или остаток? Наверное, лучше остаток...

 Профиль  
                  
 
 Re: Чип NXH5104
Сообщение08.09.2020, 16:34 
Заслуженный участник


20/08/14
11776
Россия, Москва
kotenok gav
1) Получение старшего слова произведения полезно в основном для двух случаев: а) программное увеличение разрядности умножения; б) умножение дробных чисел (в формате с фиксированной запятой). Под пункт б подпадает и программное умножение типов данных с плавающей точкой. Во многих алгоритмах умножения байт на байт слишком мало и надо считать 16х16 или 32х32, а без получения старшего байта произведения это настолько сложно, что бывает проще всё умножение сделать "руками" (без использования команды умножения). Так что если делать не игрушку, а хоть сколько-нибудь серьёзную вещь, то получение произведения удвоенного размера необходимо (и просто реализуется). Вопрос как именно его получать — на ваше усмотрение, можно сразу сохранять в дополнительный регистр, можно произведением заменять оба аргумента, можно две команды получения младшего или старшего слова (особенно если аргументы не перезаписываются), можно и ещё что-то придумать. Я бы реализовал первый вариант, сразу в дополнительный регистр.

2) Копировать частное? А что тогда выдаёт операция деления?! Мне всегда казалось она частное и выдаёт ...
Вопрос копировать ли остаток нетривиальный, зависит от конкретной реализации и деления, и умножения, ведь остаток при желании несложно получается обратным умножением и вычитанием, если ни деление ни умножение не портят своих аргументов. Впрочем, при наличии регистра (для умножений) сохранить туда остаток вопросов не вызывает.
Другое дело, что вместо получения остатка намного полезнее деление удвоенного слова на слово (лучше конечно с получением и остатка) — для программного увеличения разрядности делимого (полезно например для перевода из двоичной в десятичную систему длинного числа). Когда реально полезно деление байт на байт (даже с получением остатка) мне трудно представить, это такой "полуфабрикат", что ни к селу ни к городу, точности в 2 цифры (байт) слишком мало почти всегда, а программное увеличение разрядности деления ещё сложнее такового для умножения.

Плюс ко всему выше, если я правильно помню, АЛУ выдаёт и признаки результата, как минимум флаг нуля, их полезно сразу выставить например для умножения если получили ненулевое старшее слово (т.е. результат не вмещается в разрядную сетку), экономится (правда редкая) проверка регистра на ноль. Для деления часто нужна проверка остатка на ноль, т.е. факта делимости нацело. Но с делением могут быть и другие проблемы: деление на ноль, получение нулевого частного, получение частного больше разрядной сетки, их как бы тоже неплохо проверять и как-то информировать (но не обязательно, можно и обычными командами их проверить, до или после деления).

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

(Как понять какие команды нужны)

Вообще, если относиться серьёзно, то надо или почитать как это всё уже где-то реализовали (например в x86 или ARM, уже ведь советовал выше), или взять реальную задачу и попробовать её реализовать имеющимися и запланированными командами. Например перевод числа из десятичной системы в двоичную и обратно, вычисление какой-нибудь константы (пи, золотого сечения, е, логарифма 10 по основанию 2, да любой нетривиальной) через ряд или цепные дроби или любым другим несложным методом, CRC16/32 посчитать без таблиц (это на логические операции и сдвиги), нормирования массива на максимум, вычисление кубического корня методом Ньютона из хотя бы 16-ти битного целого числа, решение квадратного или кубического уравнения (хотя бы в целых числах, лучше тоже минимум 16-ти битных), расчёт простых чисел до миллиона методом делений, двух-трёхзвенный цифровой фильтр с КИХ и показом результата усреднения человеку, решение произвольного уравнения методом Ньютона или секущих, да полно реальных несложных задач ведь. И будет понятно каких возможностей не хватает "для полного счастья". Уже для преобразования чисел более 255 вылезет необходимость длинных множителей с произведением и делимого с частным (попробуйте написать без них, только с умножением 8х8=8 и делением 8/8=8+0 (т.е. без остатка), ну-ну!), а без этого ведь ни ввести исходные данные "по человечески", ни показать результат.

 Профиль  
                  
 
 Re: Чип NXH5104
Сообщение08.09.2020, 21:42 


21/05/16
4292
Аделаида
Dmitriy40 в сообщении #1482499 писал(а):
Копировать частное? А что тогда выдаёт операция деления?! Мне всегда казалось она частное и выдаёт ...

Ну, я имел в виду, что деление выдает частное и остаток.
Dmitriy40 в сообщении #1482499 писал(а):
Другое дело, что вместо получения остатка намного полезнее деление удвоенного слова на слово (лучше конечно с получением и остатка)

Хм, хорошо. Тогда стоит завести два дополнительных регистра, наверное?

 Профиль  
                  
 
 Re: Чип NXH5104
Сообщение09.09.2020, 10:46 
Заслуженный участник


20/08/14
11776
Россия, Москва
kotenok gav в сообщении #1482549 писал(а):
Dmitriy40 в сообщении #1482499 писал(а):
Другое дело, что вместо получения остатка намного полезнее деление удвоенного слова на слово (лучше конечно с получением и остатка)
Хм, хорошо. Тогда стоит завести два дополнительных регистра, наверное?
Можно и два.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 98 ]  На страницу Пред.  1 ... 3, 4, 5, 6, 7

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group