Цитата(sazh @ Dec 10 2008, 19:54)

.A({1'b0,a[16:0]}), // 18-bit multiplier input
знак - это a[16], им и надо дополнять. Полученный результат signed. знак у него это святое. Вы же дальше разрядностью играете, суммируете, урезаете и т.д. понятие signed всегда присутствует и в параметрах умножителя (потому что разрядность по входам и выходу разная) и при описании сумматоров, если разрядная сетка меняется (Вы все это на откуп синтезатора отдали)
я же вам написал, в приложенном коде
реализована схема показаанная на рис.6
,
а не на рис.5. И если вы прочитали по диагонали то наверное упустили из виду что это умножитель 35х35. Т.е mult70[69:0] = a[34:0]*b[34:0].
заранее прошу простить что не дописал шапку модуля, так как выдрал кусок кода из своего рабочего проекта. Вот видимо и потекли разногласия...
module mult_35x35( input [34:0] a, input [34:0] b, output [69:0] mult70);
......
.....
....
endmodule
Цитата(sazh @ Dec 10 2008, 19:54)

Посмотрел документ. Одни вопросы и непонятки. Рисунок 5. Умножитель 22х16. На одной веточке скромное unsigned.
Чего на чего умножили - не понять. 16 разрядов до 18 надо размножить. как не понятно.
Код умножили на код. Код получили. Куда его потом засунуть. Как объявить.
если принять во внимание, что нижний умножитель легко и протсто реализуем на простой логике, то
вот так экономят на примитивах типа MULT18x18
Цитата(sazh @ Dec 10 2008, 19:54)

Остается спросить по синтезатор. Неужели он сам не может оперируя signed или unsigned корректно разложить умножитель по этим макросам, или на худой конец ip генератор применить.
может конечно....

, и следует применять, там где это оправдано
Успехов