|
Умножитель signed/unsigned 64bit |
|
|
|
Dec 29 2006, 18:09
|
Частый гость
 
Группа: Участник
Сообщений: 91
Регистрация: 5-11-06
Пользователь №: 21 995

|
 Может кто видел умножители 64бит целых знаковых и беззнаковых чисел. Или какое-нибудь законченное решение откуда его можно выдрать. язык Verilog-2001. Был бы очень благодарен.  чесно говоря есть 32 разрядный можно былобы его немного расширить, но за такой код убить мало, ничего не понятно не хочется изобретать велосипеды и кроме того похоже на умножение столбиком какое-то
|
|
|
|
|
Jan 3 2007, 09:30
|

Местный
  
Группа: Участник
Сообщений: 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.
|
|
|
|
|
Jan 3 2007, 22:29
|
Местный
  
Группа: Свой
Сообщений: 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. А что насчет быстодейсвия?
|
|
|
|
|
Jan 4 2007, 01:32
|
Местный
  
Группа: Участник
Сообщений: 468
Регистрация: 4-03-05
Пользователь №: 3 066

|
Цитата(Mad-man @ Dec 29 2006, 18:09) не хочется изобретать велосипеды и кроме того похоже на умножение столбиком какое-то Каждый уважающий себя инженер должен хотя бы один раз в жизни изобрести свой собственный велосипед  . Это, я Вас смею заверить, очень полезно с точки зрения познания глубинной сущности вещей. И позвольте спросить, что это за пренебрежительное отношение к умножению в столбик? Пусть меня поправят если я ошибаюсь, но насколько мне известно, большинство существующих в мире алгоритмов умножения базируются как раз на методе умножения в столбик! Все эти алгоритмы Бута, деревья Уоллеса, матричные алгоритмы - все это ни что иное как алгоритм умножения столбиком, только вид в профиль  . Я сейчас не говорю про совершенно безумные методы, те что например базируются на алгоритме БПФ, или на теоретико-числовых преобразованиях. Это отдельная песня и тема кандидатских работ  . Но это было лирическое отступление  . А если возвращаться к нашим баранам, то как верно было замечено в предыдущем посте, что Вы скажете насчет быстродействия? Или если немного развернуть этот вопрос, то оптимизированный по какому критерию умножитель Вам нужен? По занимаемым ресурсам или быстродействию?
Сообщение отредактировал Самурай - Jan 4 2007, 01:43
|
|
|
|
|
Jan 4 2007, 06:13
|

Местный
  
Группа: Участник
Сообщений: 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. А что насчет быстодейсвия? Каков вопрос таков ответ  Симплифи, при соблюдении некоторых условий, синтезирует вполне быстрый умножитель. В квартусе, если надо быстрый, то без lpm_mult не обойтись. Может есть и более удачные варианты, я не встречал.
|
|
|
|
|
Jan 4 2007, 15:20
|

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

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

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

|
... Цитата(Terminator @ Jan 4 2007, 09:13)  Симплифи, при соблюдении некоторых условий, синтезирует вполне быстрый умножитель. В квартусе, если надо быстрый, то без lpm_mult не обойтись. Может есть и более удачные варианты, я не встречал. Забыл написать. Говоря про быстрый умножитель, я имел ввиду умножитель с конвейером. P. S. почему-то нет кнопочки "изменить" ...
|
|
|
|
|
Jan 5 2007, 08:41
|
Местный
  
Группа: Свой
Сообщений: 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 сможет растащить их в промежуточные точки не нарушая логику работы схемы
|
|
|
|
|
Jan 5 2007, 10:09
|

Местный
  
Группа: Свой
Сообщений: 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 сможет растащить их в промежуточные точки не нарушая логику работы схемы Если можна с этого места поподробнее. Как добавить регистров Синплифай мог разбросать?? Код в студию!!!
|
|
|
|
|
Jan 5 2007, 10:29
|
Местный
  
Группа: Свой
Сообщений: 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 сможет растащить их в промежуточные точки не нарушая логику работы схемы Если можна с этого места поподробнее. Как добавить регистров Синплифай мог разбросать?? Код в студию!!! ;) Например, для 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"
|
|
|
|
|
Jan 5 2007, 16:30
|

Местный
  
Группа: Свой
Сообщений: 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 Это точно так делается?? Где про это можно почитать??? Я сделал вашу схему и у меня просто умножитель и триггеры на его выходе. Синплифай в РТЛ схематике должен показывать что он разбросал схему или нет???
|
|
|
|
|
Jan 6 2007, 00:53
|
Группа: Новичок
Сообщений: 7
Регистрация: 8-11-06
Пользователь №: 22 098

|
В ise есть файлик xst.pdf с примерами и описанием этих примеров, а с сайта можно скачать только примеры ftp://ftp.xilinx.com/pub/documentation/misc/examples_v7.zipmultipliers_3.v -- примир умножителя с конвейром
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|