Перейти к содержанию
    

Как работают быстрые умножители?

Сабж.

Как сумматор с ускоренным переносом работает - в принципе понятно.

Но как умножение за 1 такт делают (32*32->32/64) - вот это не понятно.

Кто подскажет? Или покажите книжку по этой теме.

 

Также, для ASIC как генерируются такие схемы? Есть какие-то генераторы? Или руками, на Verilog/VHDL?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сабж.

Как сумматор с ускоренным переносом работает - в принципе понятно.

Но как умножение за 1 такт делают (32*32->32/64) - вот это не понятно.

Ровно точно так же.

Умножитель - это каскадный сумматор. То есть комбинационное устройство. Ему такты не нужны.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ровно точно так же.

Умножитель - это каскадный сумматор. То есть комбинационное устройство. Ему такты не нужны.

 

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

Понятно что можно тут соптимизировать и складывать не "в столбик, последовательно", а парралельно по парам - но все равно, log2(32) = 5 сложений должно пролететь последовательно в любом случае... Ничего другого тут нет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Также, для ASIC как генерируются такие схемы? Есть какие-то генераторы? Или руками, на Verilog/VHDL?
Если вы имели в виду генерацию топологии, то у ментора для этого вроде Datapath служит.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если вы имели в виду генерацию топологии, то у ментора для этого вроде Datapath служит.

 

Я в том смысле, что если например разрабатываем DSP:

Мы просто пишем A=B*C+D и за нас все синтезируют (непонятно только как с выбором скорость<>размер), или нужно руками писать правильную реализацию умножения? Т.е. синтезируемая ли это конструкция и если да, то насколько она по дефолту эффективно реализуется?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Обычно выбираем стратегию синтеза, метод оптимизации - по площади, по времени ...

Задаем временные ограничения. В соответствии с этими исходными данными синтезатор

выбирает подходящую архитектура модуля. Например, у синопсиса доступно 5 видов

архитектуры умножителей.

 

Multiplier Synthesis Implementationsa:

 

csa Carry-save array synthesis model

nbw Either a non-Booth (A_width+B_width ≤ 41) or a Booth Wallace-tree

(A_width+B_width > 41) synthesis modelb

wall Booth-recoded Wallace-tree synthesis model

mcarch MC-inside-DW Wallace-tree DesignWare

csmult MC-inside-DW flexible Booth Wallace DesignWare

 

During synthesis, Design Compiler will select the appropriate architecture for your constraints.

However, you may force Design Compiler to use one of the architectures described in this table.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Обычно выбираем стратегию синтеза, метод оптимизации - по площади, по времени ...

Задаем временные ограничения. В соответствии с этими исходными данными синтезатор

выбирает подходящую архитектура модуля. Например, у синопсиса доступно 5 видов

архитектуры умножителей.

 

Multiplier Synthesis Implementationsa:

 

csa Carry-save array synthesis model

nbw Either a non-Booth (A_width+B_width ≤ 41) or a Booth Wallace-tree

(A_width+B_width > 41) synthesis modelb

wall Booth-recoded Wallace-tree synthesis model

mcarch MC-inside-DW Wallace-tree DesignWare

csmult MC-inside-DW flexible Booth Wallace DesignWare

 

During synthesis, Design Compiler will select the appropriate architecture for your constraints.

However, you may force Design Compiler to use one of the architectures described in this table.

 

Вот это няшка, не зря свой хлеб едят :-) Буду изучать.

 

А кто может подсказать как выглядят современные синтезаторы по сравнению друг с другом по их возможностям синтеза арифметики?

Т.е. у всех такие возможности, или синопсис просто круче всех? )

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я в том смысле, что если например разрабатываем DSP:

Мы просто пишем A=B*C+D и за нас все синтезируют (непонятно только как с выбором скорость<>размер), или нужно руками писать правильную реализацию умножения? Т.е. синтезируемая ли это конструкция и если да, то насколько она по дефолту эффективно реализуется?

 

ну собс-но говоря A=B*C+... в конце концов сводится к цепочке суматоров разрядности A

иначе, насколько я понимаю нельзя

 

а по поводу понимания как утрамбовать внутреннюю логику через CSA, Booth, Wallace и прочее - есть такая старая книжка ASIC the book, и большая часть ее в виде ASIC the website

там все это в картинках для CS стюдентов разрисовано (по моему глава так и называется datapath logic)

 

так как структуры там регулярные - то автоматизировать это не так уж и сложно - какие-нибудь симплифаи с пресижинами, да и даже квартусы с айсами вполне справляются

 

---------------------

 

интереснее, имхо, делитель реализовывать - чтоб он не 1 бит за такт давал, а битов 5

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...