реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Умножитель signed/unsigned 64bit
Mad-man
сообщение Dec 29 2006, 18:09
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 91
Регистрация: 5-11-06
Пользователь №: 21 995



help.gif Может кто видел умножители 64бит целых знаковых и беззнаковых чисел.
Или какое-нибудь законченное решение откуда его можно выдрать.
язык Verilog-2001.

Был бы очень благодарен. cheers.gif

чесно говоря есть 32 разрядный можно былобы его немного расширить,
но за такой код убить мало, ничего не понятно angry.gif
не хочется изобретать велосипеды
и кроме того похоже на умножение столбиком какое-то cranky.gif
Go to the top of the page
 
+Quote Post
Terminator
сообщение Jan 3 2007, 09:30
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 209
Регистрация: 7-12-04
Из: Томск
Пользователь №: 1 382



Такой вариант устроит?
Код
wire [W_A-1:0] a;
wire [W_B-1:0] b;
wire [W_A+W_B-1:0] q;

assign q = a * b;


Если надо со знаком дописать signed.
Go to the top of the page
 
+Quote Post
3.14
сообщение Jan 3 2007, 10:18
Сообщение #3


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



Только вот разные синтезаторы директивы signed/unsigned по разному жуют, надо в доке уточнять.


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
klop
сообщение Jan 3 2007, 22:29
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 433
Регистрация: 28-02-06
Пользователь №: 14 788



Цитата(Terminator @ Jan 3 2007, 09:30) *
Такой вариант устроит?
Код
wire [W_A-1:0] a;
wire [W_B-1:0] b;
wire [W_A+W_B-1:0] q;

assign q = a * b;


Если надо со знаком дописать signed.


А что насчет быстодейсвия?
Go to the top of the page
 
+Quote Post
Самурай
сообщение Jan 4 2007, 01:32
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 468
Регистрация: 4-03-05
Пользователь №: 3 066



Цитата(Mad-man @ Dec 29 2006, 18:09)
не хочется изобретать велосипеды
и кроме того похоже на умножение столбиком какое-то


Каждый уважающий себя инженер должен хотя бы один раз в жизни изобрести свой собственный велосипедsmile.gif. Это, я Вас смею заверить, очень полезно с точки зрения познания глубинной сущности вещей.

И позвольте спросить, что это за пренебрежительное отношение к умножению в столбик? Пусть меня поправят если я ошибаюсь, но насколько мне известно, большинство существующих в мире алгоритмов умножения базируются как раз на методе умножения в столбик! Все эти алгоритмы Бута, деревья Уоллеса, матричные алгоритмы - все это ни что иное как алгоритм умножения столбиком, только вид в профильsmile.gif. Я сейчас не говорю про совершенно безумные методы, те что например базируются на алгоритме БПФ, или на теоретико-числовых преобразованиях. Это отдельная песня и тема кандидатских работsmile.gif.

Но это было лирическое отступлениеsmile.gif. А если возвращаться к нашим баранам, то как верно было замечено в предыдущем посте, что Вы скажете насчет быстродействия? Или если немного развернуть этот вопрос, то оптимизированный по какому критерию умножитель Вам нужен? По занимаемым ресурсам или быстродействию?

Сообщение отредактировал Самурай - Jan 4 2007, 01:43
Go to the top of the page
 
+Quote Post
Terminator
сообщение Jan 4 2007, 06:13
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 209
Регистрация: 7-12-04
Из: Томск
Пользователь №: 1 382



Цитата(klop @ Jan 4 2007, 01:29) *
Цитата(Terminator @ Jan 3 2007, 09:30) *

Такой вариант устроит?
Код
wire [W_A-1:0] a;
wire [W_B-1:0] b;
wire [W_A+W_B-1:0] q;

assign q = a * b;


Если надо со знаком дописать signed.


А что насчет быстодейсвия?

Каков вопрос таков ответ smile.gif
Симплифи, при соблюдении некоторых условий, синтезирует вполне быстрый умножитель. В квартусе, если надо быстрый, то без lpm_mult не обойтись. Может есть и более удачные варианты, я не встречал.
Go to the top of the page
 
+Quote Post
EvgenyNik
сообщение Jan 4 2007, 15:20
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 597
Регистрация: 24-05-06
Из: г. Чебоксары
Пользователь №: 17 402



А если подойти к этой задаче несколько иначе...
Если в вашем случае разрядность 64 бита характеризует диапазон чисел, а не точность, то стоит подумать об уменьшении разрядности с последующим восстановлением для результата.
Бывают задачи, где надо оперировать числами от 150 (например) до 2 000 000 000 (тоже например). Но при этом требование к точности вычислений - 1%. Если подойти к задаче в лоб, то надо обрабатывать 32 бита, хотя 8 бит вполне достаточно.
Я к тому, что можно на лету определять порядки множителей, умножать только мантиссы в пределах заданной точности и восстанавливать порядок для результата.
Таким образом, можно выйграть и в скорости, и в расходе ресурсов, не проигрывая в заданных параметрах точности.


--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
Go to the top of the page
 
+Quote Post
Gate
сообщение Jan 4 2007, 22:59
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 859
Регистрация: 7-04-05
Из: Санкт-Петербург
Пользователь №: 3 943



У меня сложилось впечатление, что любой нормальный синтезатор превратит конструкцию А*Б в lpm_mult (или что-то аналогичное из поддерживаемых вендором библиотек), которую квартус имплементирует наиболее эфф.образом - это для альтеры, для ксайлинкса не знаю. Делать умножитель ручками имхо не имеет смысла. Можно лишь побороться за конвейер для повышения тактовой.


--------------------
"Человек - это существо, которое охотнее всего рассуждает о том, в чем меньше всего разбирается." (с) С.Лем
Go to the top of the page
 
+Quote Post
Terminator
сообщение Jan 5 2007, 05:46
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 209
Регистрация: 7-12-04
Из: Томск
Пользователь №: 1 382



...
Цитата(Terminator @ Jan 4 2007, 09:13) *
Симплифи, при соблюдении некоторых условий, синтезирует вполне быстрый умножитель. В квартусе, если надо быстрый, то без lpm_mult не обойтись. Может есть и более удачные варианты, я не встречал.


Забыл написать. Говоря про быстрый умножитель, я имел ввиду умножитель с конвейером.

P. S. почему-то нет кнопочки "изменить" ...
Go to the top of the page
 
+Quote Post
cupertino
сообщение Jan 5 2007, 08:41
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 19-12-06
Из: Silicon Valley, California
Пользователь №: 23 683



Цитата(Terminator @ Jan 5 2007, 05:46) *
...
Цитата(Terminator @ Jan 4 2007, 09:13) *

Симплифи, при соблюдении некоторых условий, синтезирует вполне быстрый умножитель. В квартусе, если надо быстрый, то без lpm_mult не обойтись. Может есть и более удачные варианты, я не встречал.


Забыл написать. Говоря про быстрый умножитель, я имел ввиду умножитель с конвейером.

P. S. почему-то нет кнопочки "изменить" ...


Чтобы Synplify синтезировал умножитель с конвеером, надо в придеденный код добавить регистров на выходе, только тогда Synplify сможет растащить их в промежуточные точки не нарушая логику работы схемы
Go to the top of the page
 
+Quote Post
-=Vitaly=-
сообщение Jan 5 2007, 10:09
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 468
Регистрация: 31-08-06
Из: Киев
Пользователь №: 19 991



Цитата(cupertino @ Jan 5 2007, 09:41) *
Цитата(Terminator @ Jan 5 2007, 05:46) *

...
Цитата(Terminator @ Jan 4 2007, 09:13) *

Симплифи, при соблюдении некоторых условий, синтезирует вполне быстрый умножитель. В квартусе, если надо быстрый, то без lpm_mult не обойтись. Может есть и более удачные варианты, я не встречал.


Забыл написать. Говоря про быстрый умножитель, я имел ввиду умножитель с конвейером.

P. S. почему-то нет кнопочки "изменить" ...


Чтобы Synplify синтезировал умножитель с конвеером, надо в придеденный код добавить регистров на выходе, только тогда Synplify сможет растащить их в промежуточные точки не нарушая логику работы схемы

a14.gif

Если можна с этого места поподробнее. Как добавить регистров Синплифай мог разбросать?? help.gif
Код в студию!!! wink.gif
Go to the top of the page
 
+Quote Post
cupertino
сообщение Jan 5 2007, 10:29
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 19-12-06
Из: Silicon Valley, California
Пользователь №: 23 683



Цитата(-=Vitaly=- @ Jan 5 2007, 10:09) *
Цитата(cupertino @ Jan 5 2007, 09:41) *

Цитата(Terminator @ Jan 5 2007, 05:46) *

...
Цитата(Terminator @ Jan 4 2007, 09:13) *

Симплифи, при соблюдении некоторых условий, синтезирует вполне быстрый умножитель. В квартусе, если надо быстрый, то без lpm_mult не обойтись. Может есть и более удачные варианты, я не встречал.


Забыл написать. Говоря про быстрый умножитель, я имел ввиду умножитель с конвейером.

P. S. почему-то нет кнопочки "изменить" ...


Чтобы Synplify синтезировал умножитель с конвеером, надо в придеденный код добавить регистров на выходе, только тогда Synplify сможет растащить их в промежуточные точки не нарушая логику работы схемы

a14.gif

Если можна с этого места поподробнее. Как добавить регистров Синплифай мог разбросать?? help.gif
Код в студию!!! ;)


Например, для 3-ступенчатого конвеера:

Код
wire [W_A-1:0] a;
wire [W_B-1:0] b;
reg [W_A+W_B-1:0] q0, g1, q;

always @(posedge clock) begin
     q0 <= a * b;
     q1 <= q0;
     q <= q1;
end


и в "Imp Options" -> "Options" разрешить "Pipelining"
Go to the top of the page
 
+Quote Post
-=Vitaly=-
сообщение Jan 5 2007, 16:30
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 468
Регистрация: 31-08-06
Из: Киев
Пользователь №: 19 991



Например, для 3-ступенчатого конвеера:

Код
wire [W_A-1:0] a;
wire [W_B-1:0] b;
reg [W_A+W_B-1:0] q0, g1, q;

always @(posedge clock) begin
     q0 <= a * b;
     q1 <= q0;
     q <= q1;
end



Это точно так делается?? Где про это можно почитать??? Я сделал вашу схему и у меня просто умножитель и триггеры на его выходе. Синплифай в РТЛ схематике должен показывать что он разбросал схему или нет???
Go to the top of the page
 
+Quote Post
ALeksey_ZX
сообщение Jan 6 2007, 00:53
Сообщение #14





Группа: Новичок
Сообщений: 7
Регистрация: 8-11-06
Пользователь №: 22 098



В ise есть файлик xst.pdf с примерами и описанием этих примеров,
а с сайта можно скачать только примеры
ftp://ftp.xilinx.com/pub/documentation/misc/examples_v7.zip

multipliers_3.v -- примир умножителя с конвейром
Go to the top of the page
 
+Quote Post
Gate
сообщение Jan 6 2007, 01:25
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 859
Регистрация: 7-04-05
Из: Санкт-Петербург
Пользователь №: 3 943



Цитата(-=Vitaly=- @ Jan 5 2007, 16:30) *
Это точно так делается?? Где про это можно почитать??? Я сделал вашу схему и у меня просто умножитель и триггеры на его выходе. Синплифай в РТЛ схематике должен показывать что он разбросал схему или нет???

Нежелание или неумение читать документацию становится хронической болезнью начинающих(?) разработчиков. Специально для Вас за 1 минуту поиском слова "multiplier" в "Synplicity FPGA Synthesis User Guide" нашел Chapter 6: Design Optimization. Pipelining. И там все написано angry.gif
А ведь есть еще и Reference guide maniac.gif


--------------------
"Человек - это существо, которое охотнее всего рассуждает о том, в чем меньше всего разбирается." (с) С.Лем
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 06:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.01488 секунд с 7
ELECTRONIX ©2004-2016