Для простоты, чтобы не надо было учитывать нормализацию, рассмотрим длительность выполнения команды 013 (циклическое сложение).
Её длительность в АУ такова: минимальная - 3 такта, средняя - 6 тактов, максимальная - 27 тактов. Из этого следует, что приведение переносов выполнялось 2 раза за такт (27 = 48/2 + 3)
благодаря парафазности. На какой смеси тестовых данных у разработчиков получилось, что в среднем для команды 013 нужно 6 приведений переносов (6 = (6-3)*2), а не 9, неясно.
Массовая цепь сравнения регистра переноса с нулём была асинхронная.
Цепи приведения переносов были активны, и могли последние несколько полутактов работать вхолостую, пока не вырабатывался признак окончания переноса, а это могло занимать разное время в зависимости от того, какие разряды в регистре переноса перешли из 1 в 0 последними.
Кстати говоря, в зависимости от того, что мы хотим получить, сначала дизайн может быть полезно иметь на уровне RTL (регистровых передач). На этом уровне всё пишется за один такт, и в явном представлении парафазности пока нет необходимости. На этом уровне написан mesm6.
Грубо говоря, на Верилоге
always_comb beginacc_next = (новое значение сумматора в зависимости от текущей выполняемой команды, изменяющей сумматор, например, acc_reg + input_reg)acc_hold = (условие неизменности сумматора на следующем такте, например, если текущая команда не изменяет сумматор, или если БАК пуст, и т. п.)endalways @(posedge clk) beginif (!acc_hold)acc_reg <= acc_next;end
Но mesm6 он весь микрокодовый, и реализован на sliced ALU от AMD, тоесть времянки совсем не те.
Меня терзают смутные сомнения что на более чем "almost cycle-accurate" замахиваться при современной стандартной синхронной логике, лучше не надо, иначе где-то что-то порвется.
Красные и синие каскады мне не кажутся такой уж проблемой, можно просто считать что тактовая частота в 2 раза выше. Как я и предполагал в элементной базе БЭСМ при монтажном ИЛИ и парафазный логике реализация XOR может быть по скорости сравнима с AND. Но на FPGA мы и так будем иметь иные времянки... Так что только "almost cycle-accurate". Но все-равно хотелось бы понимать как это работало.
Вы писали, про регистры АУМ, РС1, РС2, РП1 , РП2, ВР, ПР, ВРУ, ПРУ, РОМ, РСМ. Можно как-то схематично их соединить, чтоб понять как это связано и еще с БАК? /* а как это описать на HDL уж можно придумать*/ Как реализацию задокументировать это другой вопрос, хотя интересный и трудный. В свое время было закодировано "формулами", которые мало кто может декодировать, теперь есть system verilog, но как я понял описание на нем должно быть разным для разной элементной базы, но как я говорил это уже другой вопрос.
воскресенье, 7 сентября 2025 г. в 18:45:37 UTC+2, Leo B.:Для простоты, чтобы не надо было учитывать нормализацию, рассмотрим длительность выполнения команды 013 (циклическое сложение).Согласен, вот с нее и начнем.
Её длительность в АУ такова: минимальная - 3 такта, средняя - 6 тактов, максимальная - 27 тактов. Из этого следует, что приведение переносов выполнялось 2 раза за такт (27 = 48/2 + 3)2 раза за такт? Это значит было две стадии конвейера с промежуточной защелкой?Вот тогда я не понимаю, у меня минимум 3 такта, при одной стадии конвейера, тоесть вообще без конвейеризации.
благодаря парафазности. На какой смеси тестовых данных у разработчиков получилось, что в среднем для команды 013 нужно 6 приведений переносов (6 = (6-3)*2), а не 9, неясно.Массовая цепь сравнения регистра переноса с нулём была асинхронная.Вот тут у меня прокол, 48ИЛИНЕ в один каскад не удастся реализовать не на одной элементной базе, фронты поплывут... /* а хочется раскачегарить до предела */
Цепи приведения переносов были активны, и могли последние несколько полутактов работать вхолостую, пока не вырабатывался признак окончания переноса, а это могло занимать разное время в зависимости от того, какие разряды в регистре переноса перешли из 1 в 0 последними.Вот тут не понял от слова совсем, можно сравнить с моей схемой или фрагмент верилога или на пальцах как-то?
Её длительность в АУ такова: минимальная - 3 такта, средняя - 6 тактов, максимальная - 27 тактов. Из этого следует, что приведение переносов выполнялось 2 раза за такт (27 = 48/2 + 3)2 раза за такт? Это значит было две стадии конвейера с промежуточной защелкой?Вот тогда я не понимаю, у меня минимум 3 такта, при одной стадии конвейера, тоесть вообще без конвейеризации.Так это нормально. В mesm6, где сумма вырабатывается комбинационно, ее длительность уже 2 такта. Если делать двухрядный код, по-видимому, как раз 3 и получится.
Строго говоря, сравнение с нулём делается с помощью монтажного ИЛИ, но я не знаю, были ли в этом ИЛИ на 48 разрядов какие-то дополнительные усилители, и насколько сбалансировано было это дерево. Но да, по сравнению с любой современной элементной базой эта операция, скорее всего, была относительно более быстрой. О времянках пока заботиться не надо, всему своё время.
Leo
On Monday, September 8, 2025 at 11:33:01 AM UTC-7 oxy...@gmail.com wrote:
Меня терзают смутные сомнения что на более чем "almost cycle-accurate" замахиваться при современной стандартной синхронной логике, лучше не надо, иначе где-то что-то порвется.Пожалуй. Или всё надо реализовать в стандартных флип-флопах сначала однофазно, потом на posedge/negedge, а когда заработает, тогда можно подумать и о преобразовании в схему "L1L2" на защёлках.
Красные и синие каскады мне не кажутся такой уж проблемой, можно просто считать что тактовая частота в 2 раза выше. Как я и предполагал в элементной базе БЭСМ при монтажном ИЛИ и парафазный логике реализация XOR может быть по скорости сравнима с AND. Но на FPGA мы и так будем иметь иные времянки... Так что только "almost cycle-accurate". Но все-равно хотелось бы понимать как это работало.Забудьте пока про времянки, про картинки со схематикой, про разные реализации между FPGA и ASIC... Рассуждайте исключительно в терминах RTL, пока дизайн на уровне RTL не заработает.
Вы писали, про регистры АУМ, РС1, РС2, РП1 , РП2, ВР, ПР, ВРУ, ПРУ, РОМ, РСМ. Можно как-то схематично их соединить, чтоб понять как это связано и еще с БАК? /* а как это описать на HDL уж можно придумать*/ Как реализацию задокументировать это другой вопрос, хотя интересный и трудный. В свое время было закодировано "формулами", которые мало кто может декодировать, теперь есть system verilog, но как я понял описание на нем должно быть разным для разной элементной базы, но как я говорил это уже другой вопрос.Обилие регистров связано, в частности, с парафазностью. На уровне RTL, например, двойное приведение переносов вполне можно написать без дополнительного регистра - пусть синтезатор строит логику, как сумеет.
Просто берите https://github.com/besm6/mesm6/blob/master/rtl/mesm6_alu.sv, который работает (и потому любые изменения поддаются regression testing), и начинайте делать инкрементные изменения, приводя реализацию к похожей по количеству тактов на АУ БЭСМ-6.В первую очередь, например, нужно ликвидировать явную операцию умножения.
Потом все явные сложения-вычитания сумматора нужно превратить в приведение переносов (а также логическое ИЛИ в однократное приведение переносов без сдвига carry - см. разницу в длительности выполнения НТЖ и ИЛИ), и т.п.
Как там делать многотактные операции путем введения дополнительных состояний автомата, надеюсь, понятно.Самым интересным будет аутентичная реализация деления (существующая, хотя и проходит тест АУ, на самом деле иногда даёт результат, отличающийся от БЭСМовского в младшем разряде - как, впрочем, и на софтверном эмуляторе).Leo
Да смешалось МЭСМ и МикроБЭСМ, но написано что МЭСМ микрокодовый:"Для реализации устройства управления выбран микропрограммный подход. ПЗУ микрокоманд содержит 512 слов по 36 бит. Регистр UPC задаёт адрес текущей микрокоманды. Биты микрокоманды содержат управляющие сигналы для всех остальных блоков процессора (УУ, АУ), а также адрес следующей микрокоманды для ветвлений."
Так это нормально. В mesm6, где сумма вырабатывается комбинационно, ее длительность уже 2 такта. Если делать двухрядный код, по-видимому, как раз 3 и получится.Леонид, можете обьяснить каким образом "приведение переносов выполнялось 2 раза за такт"?
И что такое "двухрядный код" ?
Строго говоря, сравнение с нулём делается с помощью монтажного ИЛИ, но я не знаю, были ли в этом ИЛИ на 48 разрядов какие-то дополнительные усилители, и насколько сбалансировано было это дерево. Но да, по сравнению с любой современной элементной базой эта операция, скорее всего, была относительно более быстрой. О времянках пока заботиться не надо, всему своё время.За времянками я смотрю, чтоб заново воссоздать "almost cycle accurate" архитектуру, потому как в 60х за ними следили и именно из этого родилась архитектура АЛУ и БЭСМ6.
На схеме из digit "я его слепила из того что _было_" нет там элементов логики с одним входом шириной в шину :( Попробую на выходных нарисовать в Xilinx ISE /*не знаю года получиться*/
В БЭСМ монтажное ИЛИ не везде можно было использовать, его на шину непосредственно не повесишь - всю закоротишь. Должны были быть буферы и то сомневаюсь чтоб 48 выходов буферов можно было обеднеть - там должна была быть пирамида. Поэтому один элемент 48ИЛИ у меня надо упростить и кажется я понимаю почему в БЕСМ6 было минимум 3 такта, даже если прибавляешь 0 - 48ИЛИ был только один, только он может быть скомпенсирован/сбалансирован.
Пожалуй. Или всё надо реализовать в стандартных флип-флопах сначала однофазно, потом на posedge/negedge, а когда заработает, тогда можно подумать и о преобразовании в схему "L1L2" на защёлках.Вот я в verily ни разу не профи, но что-то мне подсказывает, что нельзя просто так взять и запихнуть любую схему в FPGA. Незрячих там все триггеры двухкаскадные с защёлкиванием по фронту, конечно от LUT-ов есть выводы, в обход триггеров, но все будет только комбинационная логика с гонками фронтов как лавина. На verilog написать можно многое но синтезировать нет, а эффективно и его меньше...
Тут надо как-то стараться портировать/реализовать архитектуру БЭСМ6 "almost cycle-accurate" на современную синхронную элементу базу.
Забудьте пока про времянки, про картинки со схематикой, про разные реализации между FPGA и ASIC... Рассуждайте исключительно в терминах RTL, пока дизайн на уровне RTL не заработает.Вот в этой ветке я этого бы не хотел, реализации БЭСМ уже есть и микробам и мэсм6 и работают.Тут хотелось бы собрать информацию о реальной реализации архитектуры БЭСМ6 "almost cycle-accurate" на современной синхронной элементной базе. Даже если что-то удасться, то информация здесь останется и будет полезна будущим поколениям.
Вы писали, про регистры АУМ, РС1, РС2, РП1 , РП2, ВР, ПР, ВРУ, ПРУ, РОМ, РСМ. Можно как-то схематично их соединить, чтоб понять как это связано и еще с БАК? /* а как это описать на HDL уж можно придумать*/ Как реализацию задокументировать это другой вопрос, хотя интересный и трудный. В свое время было закодировано "формулами", которые мало кто может декодировать, теперь есть system verilog, но как я понял описание на нем должно быть разным для разной элементной базы, но как я говорил это уже другой вопрос.Обилие регистров связано, в частности, с парафазностью. На уровне RTL, например, двойное приведение переносов вполне можно написать без дополнительного регистра - пусть синтезатор строит логику, как сумеет.РС1 РС2 это просто регистры для прямого и инверсного кодов?
Просто берите https://github.com/besm6/mesm6/blob/master/rtl/mesm6_alu.sv, который работает (и потому любые изменения поддаются regression testing), и начинайте делать инкрементные изменения, приводя реализацию к похожей по количеству тактов на АУ БЭСМ-6.В первую очередь, например, нужно ликвидировать явную операцию умножения.Сложение, мне кажется процентов на 90 я смогу похоже реализовать.Есть наметки на умножение.
Потом все явные сложения-вычитания сумматора нужно превратить в приведение переносов (а также логическое ИЛИ в однократное приведение переносов без сдвига carry - см. разницу в длительности выполнения НТЖ и ИЛИ), и т.п.
Как там делать многотактные операции путем введения дополнительных состояний автомата, надеюсь, понятно.Самым интересным будет аутентичная реализация деления (существующая, хотя и проходит тест АУ, на самом деле иногда даёт результат, отличающийся от БЭСМовского в младшем разряде - как, впрочем, и на софтверном эмуляторе).
Да интересно, а кто-то знает алгоритм деления БЭСМ6? Хотелось бы уже над этим подумать.
Еще возникает вопрос, хорошо сумматор на 48 бит мы практически знаем как реализовать, а как быть с плавающей запятой? Держать два разных АЛУ /* и аккумулятора???*/ конечно можно сумматор параметризовать через маски и мультиплексоры, но это же уронит быстродействие чутье не в разы?/*универсальная/реконфигурируемая схема больше и сигналы через нее проходят дольше*/ Как это было в БЭСМ6, наверно экономили и делали универсальный, но были какие-то секреты чтоб где-то срезать углы? Или несколько специализированных блоков вычислителей "работали" на те-же регистры по монтажному ИЛИ?
Мэсм6 микрокодовый, но sliced ALU там нету. Времянки по любому не те. Восстановить точную микроархитектуру БЭСМ-6 по имеющимся материалам вряд ли возможно.--Сергей
On Tuesday, September 9, 2025 at 9:39:19 AM UTC-7 oxy...@gmail.com wrote:Пожалуй. Или всё надо реализовать в стандартных флип-флопах сначала однофазно, потом на posedge/negedge, а когда заработает, тогда можно подумать и о преобразовании в схему "L1L2" на защёлках.Вот я в verily ни разу не профи, но что-то мне подсказывает, что нельзя просто так взять и запихнуть любую схему в FPGA. Незрячих там все триггеры двухкаскадные с защёлкиванием по фронту, конечно от LUT-ов есть выводы, в обход триггеров, но все будет только комбинационная логика с гонками фронтов как лавина. На verilog написать можно многое но синтезировать нет, а эффективно и его меньше...Как говорится, "вы не поверите". Умеючи, на FPGA эмулируются даже двунаправленные switch networks, а уж несчастные защёлки просто предусмотрены в конфигурации логического блока -
понятное дело, никто не строит защёлки из комбинационной логики. Одним битиком триггер превращается в защёлку. В конце концов можно будет реализовать именно парафазную
логику - хотя бы, чтобы посмотреть, на сколько процентов от этого изменится количество логических элементов и задержки.Тут надо как-то стараться портировать/реализовать архитектуру БЭСМ6 "almost cycle-accurate" на современную синхронную элементу базу.
На современной синхронной элементной базе с триггерами можно добиться практически полной аккуратности, за исключением каких-то мелких деталей, связанных с парафазностью, типа нестабильного количества тактов на выполнение команды НТЖ. Просто надо медленно и постепенно избавляться от арифметики в mesm6_alu.Забудьте пока про времянки, про картинки со схематикой, про разные реализации между FPGA и ASIC... Рассуждайте исключительно в терминах RTL, пока дизайн на уровне RTL не заработает.Вот в этой ветке я этого бы не хотел, реализации БЭСМ уже есть и микробам и мэсм6 и работают.Тут хотелось бы собрать информацию о реальной реализации архитектуры БЭСМ6 "almost cycle-accurate" на современной синхронной элементной базе. Даже если что-то удасться, то информация здесь останется и будет полезна будущим поколениям.Чтобы быть полезной, эта информация должна быть написана на HDL, и когда добрые две трети работы (считая инфраструктуру, конечно) уже сделаны, проще не начинать с нуля, а доделывать имеющееся работающее.Вы писали, про регистры АУМ, РС1, РС2, РП1 , РП2, ВР, ПР, ВРУ, ПРУ, РОМ, РСМ. Можно как-то схематично их соединить, чтоб понять как это связано и еще с БАК? /* а как это описать на HDL уж можно придумать*/ Как реализацию задокументировать это другой вопрос, хотя интересный и трудный. В свое время было закодировано "формулами", которые мало кто может декодировать, теперь есть system verilog, но как я понял описание на нем должно быть разным для разной элементной базы, но как я говорил это уже другой вопрос.Обилие регистров связано, в частности, с парафазностью. На уровне RTL, например, двойное приведение переносов вполне можно написать без дополнительного регистра - пусть синтезатор строит логику, как сумеет.РС1 РС2 это просто регистры для прямого и инверсного кодов?
Нет, это регистр сумматора для каждого из двух полутактов. Соответственно, РП1, РП2 - регистр переносов для каждого из двух полутактов.
Просто берите https://github.com/besm6/mesm6/blob/master/rtl/mesm6_alu.sv, который работает (и потому любые изменения поддаются regression testing), и начинайте делать инкрементные изменения, приводя реализацию к похожей по количеству тактов на АУ БЭСМ-6.В первую очередь, например, нужно ликвидировать явную операцию умножения.Сложение, мне кажется процентов на 90 я смогу похоже реализовать.Есть наметки на умножение.Делать умножение по одному биту за такт просто. Хитрости начинаются тогда, когда хочется сделать как в АУ БЭСМ-6 - по 4 бита за такт, т. е. по два за полутакт. В главном мультиплексоре сумматора был даже предусмотрен сдвиг мантиссы вправо на 4 разряда.
Потом все явные сложения-вычитания сумматора нужно превратить в приведение переносов (а также логическое ИЛИ в однократное приведение переносов без сдвига carry - см. разницу в длительности выполнения НТЖ и ИЛИ), и т.п.
Как там делать многотактные операции путем введения дополнительных состояний автомата, надеюсь, понятно.Самым интересным будет аутентичная реализация деления (существующая, хотя и проходит тест АУ, на самом деле иногда даёт результат, отличающийся от БЭСМовского в младшем разряде - как, впрочем, и на софтверном эмуляторе).Да интересно, а кто-то знает алгоритм деления БЭСМ6? Хотелось бы уже над этим подумать.
Алгоритм деления описан в ТО4, но там опущено детальное описание последнего шага - коррекции при завершении деления, чтобы деление нацело было гарантированно точным. Сейчас деление и в софтверном эмуляторе, и в mesm6 делается сдвигом-вычитанием так, чтобы проходили стандартные тесты, но некоторые деления чисел с плавающей точкой всё равно отличаются от реальных в младшем разряде (потому что при честном полноразрядном вычитании при делении нацело нечего корректировать, а в БЭСМ-6 эта коррекция применялась в любом случае, приводя при делении с плавающей точкой к расхождению младшего разряда результата от математически ближайшего значения).
Это стало известно, когда компиляция массива степеней 10, записанных в экспоненциальном виде, не совпала в точности с этим массивом в двоичном виде на образе диска.
Еще возникает вопрос, хорошо сумматор на 48 бит мы практически знаем как реализовать, а как быть с плавающей запятой? Держать два разных АЛУ /* и аккумулятора???*/ конечно можно сумматор параметризовать через маски и мультиплексоры, но это же уронит быстродействие чутье не в разы?/*универсальная/реконфигурируемая схема больше и сигналы через нее проходят дольше*/ Как это было в БЭСМ6, наверно экономили и делали универсальный, но были какие-то секреты чтоб где-то срезать углы? Или несколько специализированных блоков вычислителей "работали" на те-же регистры по монтажному ИЛИ?
На БЭСМ-6 выбор между "целым" и "плавающим" режимом сумматора делался переключением разряда блокировки нормализации в регистре режимов. Вся арифметическая логика была в единственном экземпляре. Даже странно, что на этом уровне дискуссии это приходится объяснять. :)
Leo
Как говорится, "вы не поверите". Умеючи, на FPGA эмулируются даже двунаправленные switch networks, а уж несчастные защёлки просто предусмотрены в конфигурации логического блока -понятное дело, никто не строит защёлки из комбинационной логики. Одним битиком триггер превращается в защёлку. В конце концов можно будет реализовать именно парафазнуюМожно по-подробней? в каждой ячейке DFF после LUT может быть сконфигурирован как защелка или двухкаскадный по фронту? Это какая FPGA? Я видимо дал маху купил плату со Spartan6.
Нет, это регистр сумматора для каждого из двух полутактов. Соответственно, РП1, РП2 - регистр переносов для каждого из двух полутактов.Полутакты - это значит они последовательно соединены? Но тогда не сходиться если делать по два переноса за такт, то в среднем надо будет 3 старт + (6 переносов / 2 за такт) = 6 тактов.Вы же сами посчитали, что переносов в среднем 6? А в документации говориться 9 тактов, а не полутактов?
Алгоритм деления описан в ТО4, но там опущено детальное описание последнего шага - коррекции при завершении деления, чтобы деление нацело было гарантированно точным. Сейчас деление и в софтверном эмуляторе, и в mesm6 делается сдвигом-вычитанием так, чтобы проходили стандартные тесты, но некоторые деления чисел с плавающей точкой всё равно отличаются от реальных в младшем разряде (потому что при честном полноразрядном вычитании при делении нацело нечего корректировать, а в БЭСМ-6 эта коррекция применялась в любом случае, приводя при делении с плавающей точкой к расхождению младшего разряда результата от математически ближайшего значения).
Это стало известно, когда компиляция массива степеней 10, записанных в экспоненциальном виде, не совпала в точности с этим массивом в двоичном виде на образе диска.Это интересно, современное деление нацело сдвигом и вычитанием не точное???Или это все-же артефакт неидеальной коррекции деления в БЭСМ6?
То что я прикидывал действительно имеет точность +/-ULP, я думал, что для БЭСМ6 это нормально.
Еще возникает вопрос, хорошо сумматор на 48 бит мы практически знаем как реализовать, а как быть с плавающей запятой? Держать два разных АЛУ /* и аккумулятора???*/ конечно можно сумматор параметризовать через маски и мультиплексоры, но это же уронит быстродействие чутье не в разы?/*универсальная/реконфигурируемая схема больше и сигналы через нее проходят дольше*/ Как это было в БЭСМ6, наверно экономили и делали универсальный, но были какие-то секреты чтоб где-то срезать углы? Или несколько специализированных блоков вычислителей "работали" на те-же регистры по монтажному ИЛИ?
На БЭСМ-6 выбор между "целым" и "плавающим" режимом сумматора делался переключением разряда блокировки нормализации в регистре режимов. Вся арифметическая логика была в единственном экземпляре. Даже странно, что на этом уровне дискуссии это приходится объяснять. :)Я примерно нарисовал сумматор в котором все пути прохождения сигналов более менее скомпенсированы, если туда еще вcтавлять какие-то дополнительные мультиплексоры (управляемые битами конфигурации), то это увеличит прохождение сигнала на 3 каскада/ключа, что почти 40% В тактах-то мы не проиграем все будет сходиться, только реальная скорость упадет :(Должно быть 4 режима1 сумма всех 48 разрядов с переносом в 12 сумма 41 разрядов /* без нормализации */3 сумма 42? разрядов с нормализацией4 сумма 7 разрядов порядка
Пока писал, понял, что сумматор неисчерпаем как атом, тут непонятки как нормализацию впихнуть. /* подозреваю, что в БЭСМ наложение маски было через монтажное или, а у нас это будет вентиль, хорошо хоть не мультиплексор*/Может и режим АЛУ можно как-то без мультиплексора реализовать на одном вентильном каскаде? Надо подумать...
On Wednesday, September 10, 2025 at 12:02:14 PM UTC-7 oxy...@gmail.com wrote:Как говорится, "вы не поверите". Умеючи, на FPGA эмулируются даже двунаправленные switch networks, а уж несчастные защёлки просто предусмотрены в конфигурации логического блока -понятное дело, никто не строит защёлки из комбинационной логики. Одним битиком триггер превращается в защёлку. В конце концов можно будет реализовать именно парафазнуюМожно по-подробней? в каждой ячейке DFF после LUT может быть сконфигурирован как защелка или двухкаскадный по фронту? Это какая FPGA? Я видимо дал маху купил плату со Spartan6.https://gab.wallawalla.edu/~curt.nelson/engr433/xilinx/spartan6%20clbs.pdf Страница 9, на элементах, вырабатывающих выходы AQ, BQ, CQ, DQ, чётко видно, что они конфигурируются как FF, LATCH, и ещё варианты по мелочи.
Нет, это регистр сумматора для каждого из двух полутактов. Соответственно, РП1, РП2 - регистр переносов для каждого из двух полутактов.Полутакты - это значит они последовательно соединены? Но тогда не сходиться если делать по два переноса за такт, то в среднем надо будет 3 старт + (6 переносов / 2 за такт) = 6 тактов.Вы же сами посчитали, что переносов в среднем 6? А в документации говориться 9 тактов, а не полутактов?См. ещё раз внимательно длительности выполнения команды 013 (СЛЦ) в 9-й части ТО. Длительности выполнения команды в АУ - 3/6/27.
Еще возникает вопрос, хорошо сумматор на 48 бит мы практически знаем как реализовать, а как быть с плавающей запятой? Держать два разных АЛУ /* и аккумулятора???*/ конечно можно сумматор параметризовать через маски и мультиплексоры, но это же уронит быстродействие чутье не в разы?/*универсальная/реконфигурируемая схема больше и сигналы через нее проходят дольше*/ Как это было в БЭСМ6, наверно экономили и делали универсальный, но были какие-то секреты чтоб где-то срезать углы? Или несколько специализированных блоков вычислителей "работали" на те-же регистры по монтажному ИЛИ?
На БЭСМ-6 выбор между "целым" и "плавающим" режимом сумматора делался переключением разряда блокировки нормализации в регистре режимов. Вся арифметическая логика была в единственном экземпляре. Даже странно, что на этом уровне дискуссии это приходится объяснять. :)Я примерно нарисовал сумматор в котором все пути прохождения сигналов более менее скомпенсированы, если туда еще вcтавлять какие-то дополнительные мультиплексоры (управляемые битами конфигурации), то это увеличит прохождение сигнала на 3 каскада/ключа, что почти 40% В тактах-то мы не проиграем все будет сходиться, только реальная скорость упадет :(Должно быть 4 режима1 сумма всех 48 разрядов с переносом в 12 сумма 41 разрядов /* без нормализации */3 сумма 42? разрядов с нормализацией4 сумма 7 разрядов порядкаРежим (1) - это (2) и (4) с последовательно включенными цепями переноса. Сложение всегда вырабатывает бит переноса из 41 р. При арифметическом сложении нормализация вправо на 1 разряд., если бит переноса не равен 41р, делается безусловно, и это занимает отдельный такт, так что (3) эквивалентно (2).
Пока писал, понял, что сумматор неисчерпаем как атом, тут непонятки как нормализацию впихнуть. /* подозреваю, что в БЭСМ наложение маски было через монтажное или, а у нас это будет вентиль, хорошо хоть не мультиплексор*/Может и режим АЛУ можно как-то без мультиплексора реализовать на одном вентильном каскаде? Надо подумать...
Режим АУ (если последовательно пользоваться БЭСМовскими терминами) влияет не на мультиплексирование, а на конечный автомат. Запускать нормализацию или нет, накладывать потом бит округления или нет.
Leo
См. ещё раз внимательно длительности выполнения команды 013 (СЛЦ) в 9-й части ТО. Длительности выполнения команды в АУ - 3/6/27.Как вот где собака порылась: 3, 3 + (6/2), 3 + (48/2)Леонид, если есть понимание почему 2 стадии, поделитесь пожалуйста.С одной стороны все может просто, чтоб фазы входа и выхода совпадали.
А с другой стороны, что-то припоминаю регистр просто обратной связью реализовывался на одном "каскаде", если простую обратную связь дополнить комбинаторной логикой, может бы заработало?Возникает вопрос, как тогда это реализовывать на обычной синхронной логике DFF по фронтам?
Мне сумматор удалось реализовать без отдельных DFF состояния: 3,9,51.Ели делать двустадийный конвейер, боюсь без автомата с отдельными DFF состояния не обойтись.Но, если считать 2 наших такта за 1 БЕСМ, то можно просто добавить 3 каскада DFF задержки на входе и дело в шляпе? (3 + 3)/2=3, (3 + 3 +6)/2=6, (3 + 3+48)/2=27?
Должно быть 4 режима1 сумма всех 48 разрядов с переносом в 12 сумма 41 разрядов /* без нормализации */3 сумма 42? разрядов с нормализацией4 сумма 7 разрядов порядкаРежим (1) - это (2) и (4) с последовательно включенными цепями переноса. Сложение всегда вырабатывает бит переноса из 41 р. При арифметическом сложении нормализация вправо на 1 разряд., если бит переноса не равен 41р, делается безусловно, и это занимает отдельный такт, так что (3) эквивалентно (2).Сейчас нет времени хорошенько подумать, что-то в голове не укладывается - для нормализации похоже нужно 42 бита чтоб на знак не переходил и младший бит не терять. И при нормализации сдвигать их либо в право либо в лево в зависимости от старшего бита.
Режим АУ (если последовательно пользоваться БЭСМовскими терминами) влияет не на мультиплексирование, а на конечный автомат. Запускать нормализацию или нет, накладывать потом бит округления или нет.Да чую, без автомата и регистра состояния не обойтись даже для простого сумматора.
On Thursday, September 11, 2025 at 10:29:51 AM UTC-7 oxy...@gmail.com wrote:См. ещё раз внимательно длительности выполнения команды 013 (СЛЦ) в 9-й части ТО. Длительности выполнения команды в АУ - 3/6/27.Как вот где собака порылась: 3, 3 + (6/2), 3 + (48/2)Леонид, если есть понимание почему 2 стадии, поделитесь пожалуйста.С одной стороны все может просто, чтоб фазы входа и выхода совпадали.Разумеется.
А с другой стороны, что-то припоминаю регистр просто обратной связью реализовывался на одном "каскаде", если простую обратную связь дополнить комбинаторной логикой, может бы заработало?Возникает вопрос, как тогда это реализовывать на обычной синхронной логике DFF по фронтам?Один вариант - сделать вместо защёлок DFF-ы. При этом, по-видимому, получатся и "короткие" участки логики между противофазными DFF, и "длинные" участки логики от главной фазы до главной фазы. Если timing engine достаточно умён, он и поймёт этот дизайн, и подберёт нужное соотношение длительностей фаз для достижения максимальной тактовой частоты.Другой вариант - написать всё на одной фазе (т. е. не будет никаких РС2/РП2, а всё, что делалось за два полутакта, будет делаться комбинационно за один такт). При этом площадь логики, конечно, увеличится, но всё равно должно поместиться, потому что при поразрядной реализации арифметики количество логических элементов там, по современным меркам, смешное.
Мне сумматор удалось реализовать без отдельных DFF состояния: 3,9,51.Ели делать двустадийный конвейер, боюсь без автомата с отдельными DFF состояния не обойтись.Но, если считать 2 наших такта за 1 БЕСМ, то можно просто добавить 3 каскада DFF задержки на входе и дело в шляпе? (3 + 3)/2=3, (3 + 3 +6)/2=6, (3 + 3+48)/2=27?Конечно, если будет получаться "слишком быстро", то замедлить труда не составит. Признаков состояния в АУ хватало; к сожалению, они в описании нигде не перечислены все вместе в качестве вектора состояния конечного автомата, а упоминаются для каждой отдельной операции по ходу дела.
Должно быть 4 режима1 сумма всех 48 разрядов с переносом в 12 сумма 41 разрядов /* без нормализации */3 сумма 42? разрядов с нормализацией4 сумма 7 разрядов порядкаРежим (1) - это (2) и (4) с последовательно включенными цепями переноса. Сложение всегда вырабатывает бит переноса из 41 р. При арифметическом сложении нормализация вправо на 1 разряд., если бит переноса не равен 41р, делается безусловно, и это занимает отдельный такт, так что (3) эквивалентно (2).Сейчас нет времени хорошенько подумать, что-то в голове не укладывается - для нормализации похоже нужно 42 бита чтоб на знак не переходил и младший бит не терять. И при нормализации сдвигать их либо в право либо в лево в зависимости от старшего бита.Вы уже прочитали 4-ю часть ТО, хотя бы для общего ознакомления? Там механизм нормализации после сложения описан очень хорошо. И манера изложения в целом очень веселит.
Первое, что я столкнулся когда только попробовал - это сумматор в АЛУ БЭСМ6.
4020000000000000 -1
4050000000000000 1
4110000000000000 2
2.5 Представление отрицательных мантиссописана замудренная логика переноса из 41-го в 40-ой разрядзапустил примерчик в dispak-е и выпал в осадок представление отрицательных чисел вроде должно быть в дополнительном коде? А это что?4060000000000000 -24020000000000000 -1
4050000000000000 1
4110000000000000 2
2.6 Нормализациянаписано что мантисса результата может быть в диапазоне -2 <= (m + m)< 2. Это означает что 40-й бит это не 1 а 2-ка? Условия кода 11.0ХХ и 00.1ХХ из 2.6 это про биты [2][1].[1/2][1/4][1/8][...]? и мы должны 40 бит "резервировать" на случай переполнения? тогда точность получается не 40 бит а 39, разве не так? Н и как-то опять с dispak-oм не сходиться выше.
2.7 Двухрядный кодкак Вы и говорили.интересный момент в конце - говориться что элементы XOR и AND трехвходовые и можно начинать сложение не дожидаясь окончания переносов предыдущего, вот это реально ускоряет умножение! Это очень интересно реализовать.
2.10 Переполнение и "нулевой результат"описывается "нулевая яма" - все денормализованные результаты насильно заменяются "машинным 0" - все биты 0-вые
УВУ - устройсво ввода вывода - пичалька вот это не хотелось бы эмулировать, ввод вывод реализовать как-то поэффективней и без магнитных барабанов
4.16 Арифметическое делениебез восстановления остаткаделитель может быть только нормализованным числом т.е. только плавающая запятая
УВУ - устройсво ввода вывода - пичалька вот это не хотелось бы эмулировать, ввод вывод реализовать как-то поэффективней и без магнитных барабанов
--
...
БРУС == БРЗ/БАЗ - Кеш данных БРЗ - значение БАЗ - адрес
On Fri, Sep 12, 2025 at 2:46 PM Alex Loktionoff <oxy...@gmail.com> wrote:...БРУС == БРЗ/БАЗ - Кеш данных БРЗ - значение БАЗ - адресБРУС += БРЧ
On Friday, September 12, 2025 at 4:47:34 PM UTC-7 BOPOHOK wrote:On Fri, Sep 12, 2025 at 2:46 PM Alex Loktionoff <oxy...@gmail.com> wrote:...БРУС == БРЗ/БАЗ - Кеш данных БРЗ - значение БАЗ - адресБРУС += БРЧАналогично, БРУС -= БАЗ. БАЗ и БАС были в УУ, они там нужнее.Не припомнишь, что было в нижнем ряду ТЭЗов БРУС?
Там ничего достаточно крупным шрифтом не подписано.
https://upload.wikimedia.org/wikipedia/commons/c/cd/BESM-6_Politech_Museum_Moscow.jpg
--
Данное сообщение отправлено Вам, как участнику группы "БЭСМ-6":
http://groups.google.com/group/besm6/topics
---
Вы получили это сообщение, поскольку подписаны на группу "БЭСМ-6".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес besm6+un...@googlegroups.com.
Чтобы посмотреть обсуждение, перейдите по ссылке https://groups.google.com/d/msgid/besm6/c75b04c3-f911-4686-b6b5-a07b7162f224n%40googlegroups.com.
On Friday, September 12, 2025 at 2:46:37 PM UTC-7 oxy...@gmail.com wrote:2.5 Представление отрицательных мантиссописана замудренная логика переноса из 41-го в 40-ой разрядзапустил примерчик в dispak-е и выпал в осадок представление отрицательных чисел вроде должно быть в дополнительном коде? А это что?4060000000000000 -24020000000000000 -1
4050000000000000 1
4110000000000000 2
Что не так-то? Например, минус единица - это 100_000_0/10_000 ... (между восьмеричными цифрами подчерки, между порядком и мантиссой слеш) - т. е поле порядка равно 64 (следовательно, порядок равен 64-64 == 0), мантисса читается как 41-разрядное целое в дополнительном коде, деленное на 2^40, т. е. является -2^40 / 2^40 == -1. Итого -1.
2.6 Нормализациянаписано что мантисса результата может быть в диапазоне -2 <= (m + m)< 2. Это означает что 40-й бит это не 1 а 2-ка? Условия кода 11.0ХХ и 00.1ХХ из 2.6 это про биты [2][1].[1/2][1/4][1/8][...]? и мы должны 40 бит "резервировать" на случай переполнения? тогда точность получается не 40 бит а 39, разве не так? Н и как-то опять с dispak-oм не сходиться выше.Там написано с учётом невидимого временного дополнительного (42-го) знакового бита. Условие отсутствия переполнения - когда знаковые биты (дополнительный и настоящий) равны.
2.7 Двухрядный кодкак Вы и говорили.интересный момент в конце - говориться что элементы XOR и AND трехвходовые и можно начинать сложение не дожидаясь окончания переносов предыдущего, вот это реально ускоряет умножение! Это очень интересно реализовать.
ЕМНИП, у какой-то операции есть случай, когда для младшего бита имеется аж 4 слагаемых. Тогда одно из них на такт придерживается, и подается на вход после первого шага приведения.
2.10 Переполнение и "нулевой результат"описывается "нулевая яма" - все денормализованные результаты насильно заменяются "машинным 0" - все биты 0-выеНадо ещё детально разобраться, что хорошего остается на сумматоре, когда происходит переполнение или деление на ненормализованное число, но в регистре режимов стоит блокировка авоста. И есть ли какая-нибудь польза от блокировки авоста перед делением.
УВУ - устройсво ввода вывода - пичалька вот это не хотелось бы эмулировать, ввод вывод реализовать как-то поэффективней и без магнитных барабановКак раз диски и барабаны - самое простое и эффективное. Терминалы (пока мы не восстановим код для работы с аппаратурой сопряжения) и АЦПУ будут проблематичнее.
2.6 Нормализациянаписано что мантисса результата может быть в диапазоне -2 <= (m + m)< 2. Это означает что 40-й бит это не 1 а 2-ка? Условия кода 11.0ХХ и 00.1ХХ из 2.6 это про биты [2][1].[1/2][1/4][1/8][...]? и мы должны 40 бит "резервировать" на случай переполнения? тогда точность получается не 40 бит а 39, разве не так? Н и как-то опять с dispak-oм не сходиться выше.Там написано с учётом невидимого временного дополнительного (42-го) знакового бита. Условие отсутствия переполнения - когда знаковые биты (дополнительный и настоящий) равны.Вот чуяло мое сердце, что нужен 42 бит, только в документе его незаметно, там только есть какая-то странная логика переноса из 41-го в 40-ой.Еще в АЛУ порядка есть дополнительный бит знака порядка, это Вы не перепутали?
С трехвходовыми элементами по прикидкам с однобитовым умножением работает очень шустро. Максимум где -то 41+41, а на малых числах где-то тактов 16 т.е. по ощущениям всего в два раза медленней чем сумма! А если брать по два бита за раз, трудно представить, и это на однобитовых по сути АЛУ!
Я уже думаю над двухбитным умножением, при умножении на 11 там на сумматор видимо посылается операция вычитания /* 11 = 100 - 1*/, но вычитание это сложение с инверсией и еще +1, что как минимум два полутакта - что-то сомневаюсь что таким образом удавалось что-то экономить в тактах.
УВУ - устройсво ввода вывода - пичалька вот это не хотелось бы эмулировать, ввод вывод реализовать как-то поэффективней и без магнитных барабановКак раз диски и барабаны - самое простое и эффективное. Терминалы (пока мы не восстановим код для работы с аппаратурой сопряжения) и АЦПУ будут проблематичнее.Я все про такты, это уму не растяжимо, и сколько тактов должна быть такая команда на верилоге, я пока в непонятках?
On Saturday, September 13, 2025 at 9:06:39 AM UTC-7 oxy...@gmail.com wrote:2.6 Нормализациянаписано что мантисса результата может быть в диапазоне -2 <= (m + m)< 2. Это означает что 40-й бит это не 1 а 2-ка? Условия кода 11.0ХХ и 00.1ХХ из 2.6 это про биты [2][1].[1/2][1/4][1/8][...]? и мы должны 40 бит "резервировать" на случай переполнения? тогда точность получается не 40 бит а 39, разве не так? Н и как-то опять с dispak-oм не сходиться выше.Там написано с учётом невидимого временного дополнительного (42-го) знакового бита. Условие отсутствия переполнения - когда знаковые биты (дополнительный и настоящий) равны.Вот чуяло мое сердце, что нужен 42 бит, только в документе его незаметно, там только есть какая-то странная логика переноса из 41-го в 40-ой.Еще в АЛУ порядка есть дополнительный бит знака порядка, это Вы не перепутали?Написано же внизу страницы, озаглавленной "2.6 Нормализация", Для того, чтобы результат с мантиссой |m| > 1 (до нормализации) не приводил к потере знака, некоторые регистры арифметического устройства имеют два разряда слева от запятой.
С трехвходовыми элементами по прикидкам с однобитовым умножением работает очень шустро. Максимум где -то 41+41, а на малых числах где-то тактов 16 т.е. по ощущениям всего в два раза медленней чем сумма! А если брать по два бита за раз, трудно представить, и это на однобитовых по сути АЛУ!Минимальное время выполнения умножения в АУ (при выключенной нормализации и грубо говоря, при умножении на 0 или степень двойки, когда гарантированно нет никаких переносов, требующих приведения), согласно документации - 15 тактов. Это 3 стандартных такта на обработку операции в АУ + ceil(41/4) = 11 тактов на сдвиг-сложение множителя , и, видимо, ещё 1 на первоначальную установку регистров, специфичную для умножения.
В среднем умножение требует 18 тактов, т. е. 15 + (в среднем 6 приведений переносов)/2. При умножении нормализованных чисел с плавающей точкой завершающая нормализация влево обычно не требуется, при умножении целых она блокирована, а умножение числа с плавающей точкой на целое, видимо, сочтено достаточно редким, и не влияет на среднее.
Я уже думаю над двухбитным умножением, при умножении на 11 там на сумматор видимо посылается операция вычитания /* 11 = 100 - 1*/, но вычитание это сложение с инверсией и еще +1, что как минимум два полутакта - что-то сомневаюсь что таким образом удавалось что-то экономить в тактах.Удавалось. Случай четырех слагаемых в младшем разряде описан, начиная с конца страницы 43 PDF. Там несколько сложнее, чем мне помнилось.
On Tuesday, September 9, 2025 at 9:39:19 AM UTC-7 oxy...@gmail.com wrote:На БЭСМ-6 выбор между "целым" и "плавающим" режимом сумматора делался переключением разряда блокировки нормализации в регистре режимов. Вся арифметическая логика была в единственном экземпляре. Даже странно, что на этом уровне дискуссии это приходится объяснять. :)
Leo
Тесты-то проходит хоть? А то что-то там насинтезить, чтобы синтез написал какую-то там частоту - дело нехитрое.
понедельник, 15 сентября 2025 г. в 18:25:08 UTC+2, Leo B.:Тесты-то проходит хоть? А то что-то там насинтезить, чтобы синтез написал какую-то там частоту - дело нехитрое.Ну, косячек со сдвигом я поправил, и простецкий тест сумма чисел серии 1..10 == 55 проходит.Заменил всю мудреную 3-х рядную логику на простое a <= a + d_ext; и тоже вышло 350МГц / 375МГц Макс.
А при переводе на двухфазный волновой конвейер на защелках, в ISim симуляции все Ок, а timing constraints падает до 86/223МГц причем не все а только каких-то три.
Может как-то надо вешать constraints на wire внутри модуля сумматора? Подскажите, как это победить? Пока теоретически рассуждая для синхронного дизайна по фронту 3 слагаемых для минимального интервала, а для уровня всего два - Tprop + Thold, возможно ли "запустить" Spartan6 на 500МГц?
Ни новый Artix7 ни GoWin yt не поддерживают защелки по уровням. А старый Spartan6 может :-)
On Tuesday, September 16, 2025 at 1:28:27 PM UTC-7 oxy...@gmail.com wrote:понедельник, 15 сентября 2025 г. в 18:25:08 UTC+2, Leo B.:Тесты-то проходит хоть? А то что-то там насинтезить, чтобы синтез написал какую-то там частоту - дело нехитрое.Ну, косячек со сдвигом я поправил, и простецкий тест сумма чисел серии 1..10 == 55 проходит.Заменил всю мудреную 3-х рядную логику на простое a <= a + d_ext; и тоже вышло 350МГц / 375МГц Макс.
В современных FPGA при синтезе операции сложения используются цепи быстрого переноса, так что неудивительно.
А при переводе на двухфазный волновой конвейер на защелках, в ISim симуляции все Ок, а timing constraints падает до 86/223МГц причем не все а только каких-то три.
Возможно, у защёлки довольно заметная задержка, так что лишний уровень хранящих элементов уменьшает максимальную теоретическую частоту.
Ни новый Artix7 ни GoWin yt не поддерживают защелки по уровням. А старый Spartan6 может :-)Ну GoWin совсем игрушка, так что неудивительно. Да и дизайны на защёлках обычные пользователи не пишут, так что чипы, рассчитанные на широкого потребителя, их и не поддерживают для простоты.
Вместо парафазных защёлок можно с тем же успехом использовать парафазные триггеры.
Leo
Возможно, у защёлки довольно заметная задержка, так что лишний уровень хранящих элементов уменьшает максимальную теоретическую частоту.Пичалька, это ломает почти весь смысл использования, защелок, если на них реально медленней.
Ни новый Artix7 ни GoWin yt не поддерживают защелки по уровням. А старый Spartan6 может :-)Ну GoWin совсем игрушка, так что неудивительно. Да и дизайны на защёлках обычные пользователи не пишут, так что чипы, рассчитанные на широкого потребителя, их и не поддерживают для простоты.А какие чипы поддерживают?
Вместо парафазных защёлок можно с тем же успехом использовать парафазные триггеры.Это always @(posedge clk) begin + always @(negedge clk) begin?Похоже это самый современный способ сделать cycle acurate реализацию БЭСМ-6 красно/синей логики?Только такой подход никак не ускоряет FPGA /* а уже слюни потекли раскочегарить Спартан до 500МГц */ ведь все равно синхронный подход - T > Tprop + Thold + Tsetup
Частота дизайна на FPGA падает в двое, можно подумать, что в сумме то на то и выходит, что за такт делаем в два раза больше.Но в реальности пропускная способность конвейера у БЭСМ-1 1 элемент за такт, так что реальная производительность дизайна на FPGA упадет.Теоретически если мы сделаем промежуточный не регистр а wire и будем все обрабатывать за один длинный такт, то скорость выйдет еще чуть больше чем обработка на обоих фронтах, так как логика может быть не идеально сбалансирована в обоих фазах, а так оптимизатор сольет все в один большой такт и усреднит. /* Tr+Tb < max(Ta, Tb)*2 */
Просто мне хотелось и рыбку съесть и вводу не лезть, чтоб иметь almost cycle acurate дизайн и чтоб он был максимально быстрым на FPGA.
Вместо парафазных защёлок можно с тем же успехом использовать парафазные триггеры.Это always @(posedge clk) begin + always @(negedge clk) begin?Похоже это самый современный способ сделать cycle acurate реализацию БЭСМ-6 красно/синей логики?Только такой подход никак не ускоряет FPGA /* а уже слюни потекли раскочегарить Спартан до 500МГц */ ведь все равно синхронный подход - T > Tprop + Thold + TsetupС двумя фазами получается бесплатный clock gating, что может слегка уменьшить количество уровней логики.Частота дизайна на FPGA падает в двое, можно подумать, что в сумме то на то и выходит, что за такт делаем в два раза больше.Но в реальности пропускная способность конвейера у БЭСМ-1 1 элемент за такт, так что реальная производительность дизайна на FPGA упадет.Теоретически если мы сделаем промежуточный не регистр а wire и будем все обрабатывать за один длинный такт, то скорость выйдет еще чуть больше чем обработка на обоих фронтах, так как логика может быть не идеально сбалансирована в обоих фазах, а так оптимизатор сольет все в один большой такт и усреднит. /* Tr+Tb < max(Ta, Tb)*2 */Тоже правда.Просто мне хотелось и рыбку съесть и вводу не лезть, чтоб иметь almost cycle acurate дизайн и чтоб он был максимально быстрым на FPGA.Может, всё-таки в конце концов выбрать, за каким из двух зайцев гнаться в первую очередь?
Leo
С умножением я так понял, что нужен сумматор 4 рядного кода - 4ый всего один бит.Но что-то я не нашел пока как умножение справляется с переполнением, у меня пока числи маленькие и 100 х 100 в 40 битов влазит, полагаю так и работает в БЭСМ-6 с блокировкой нормализации, а как с плавающей запятой? Полагаю что там просто инкрементируется порядок? Но тогда умножение с нормализацией и без нормализации это почти разные автоматы состоянии в устройстве управления? Где можно про это почитать?
On Thursday, September 18, 2025 at 9:15:51 AM UTC-7 oxy...@gmail.com wrote:С умножением я так понял, что нужен сумматор 4 рядного кода - 4ый всего один бит.Но что-то я не нашел пока как умножение справляется с переполнением, у меня пока числи маленькие и 100 х 100 в 40 битов влазит, полагаю так и работает в БЭСМ-6 с блокировкой нормализации, а как с плавающей запятой? Полагаю что там просто инкрементируется порядок? Но тогда умножение с нормализацией и без нормализации это почти разные автоматы состоянии в устройстве управления? Где можно про это почитать?
А что, из 4-й части ТО непонятно?Умножение вычисляет 81-разрядное (включая знак) произведение, которое помещается в сумматор + РМР; порядок
четверг, 18 сентября 2025 г. в 18:50:42 UTC+2, Leo B.:
Умножение вычисляет 81-разрядное (включая знак) произведение, которое помещается в сумматор + РМР; порядок
81-разрядное - вот это и непонятно, все регистры на схеме 41-43 бит, сумматор 42-х битный а получается 81-бит.Неужели при умножении сумматор работает с РМР как с аккумулятором? / в СМ попадают старшие разряды /Не пойму как с 42-х битным сумматором можно получить 81-бит суммуА при обычном суммировании вычитании с СМ? / в РМР попадают младшие разряды при нормализации/
Спасибо, Сергей, вот уж не думал, что в МЕСМ6 можно подсмотреть реализацию БЭСМ-6!// A*X: multiply in one cycle, then normalize.
{`FULLMANT, rmr[39:0]} <= amant * bmant;
`FULLEXP <= (a[47:41] + b[47:41] - 64);Получается что при умножении сумматор работает с РМР, причем старшие биты попадают в СМ по сути сумматор на 81 разряд!
Сергей, есть надежда на обновление схемы сумматора МЭСМ6https://github.com/besm6/mesm6/wiki/Microarchitecture#сумматорТам вместо сумматора схема PC.