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

 
 
> Умножитель для библиотеки SILTERRA18SG
Кирюшка
сообщение Jul 13 2018, 09:02
Сообщение #1





Группа: Участник
Сообщений: 7
Регистрация: 14-07-17
Пользователь №: 98 148



Здравствуйте уважаемые форумчане!
Изучаю систему Cadence, в частности NC-Verilog и Genus
Синтезирую под библиотеку Silterra 180nm CL180G

Вот модуль 8-бит умножителя, который хорошо работает на частоте 130 Mhz

Код
module multik (clk, A, B, out, reset);

input clk;
input reset;
input [7:0] A;
input [7:0] B;
output [15:0] out;

reg [7:0] Ar,Br;
reg [15:0] out_r;

reg [7:0] helpers16 [40:0];
reg [15:0] helpers31 [40:0];

integer i;

always @ (posedge clk)
begin
    Ar<=A;
    Br<=B;
    helpers31[0]<=Ar*Br;
    for(i=1; i<10; i=i+1)
    helpers31 [i] <= helpers31[i-1];
    
end

assign out=helpers31[i-1];

endmodule


Вот код умножителя на 16-бит, который "захлебывается", т.е. периодически показывает неверные значения на частоте 130 Mhz. Во вложении скрин, там где желтые значения.


Код
module multik (clk, A, B, out, reset);
input clk;
input reset;
input [15:0] A;
input [15:0] B;
output [31:0] out;

reg [15:0] Ar,Br;
reg [31:0] out_r;

reg [15:0] helpers16 [40:0];
reg [31:0] helpers31 [40:0];

integer i;

always @ (posedge clk)
begin
    Ar<=A;
    Br<=B;
    helpers31[0]<=Ar*Br;
    for(i=1; i<10; i=i+1)
    helpers31 [i] <= helpers31[i-1];
    
end

assign out=helpers31[i-1];

endmodule





Пробовал
retime -prepare
retime -min_delay
в надежде что генус раскидает регистры, и все заработает, но не вышло.

Отсюда возникает 2 вопроса
- какая существует тактика для перемножения больших чисел на больших частотах?
- как пользоваться командой генуса - retime?

Заранее спасибо за любые рекомендации!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
designer78
сообщение Jul 14 2018, 11:53
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 31-10-17
Пользователь №: 100 003



Тема очень старая и также относится и к сумматорам.
Согласен с Shivers что из детского кода ничего хорошего не вырастет.
Использовать DesignWare/AmbitWare можно но считаю врятли хорошая идея. Зачем подвязываться на что-то конкретное и закрытое. Вдруг придется тоже самое например в плисах сделать, что переписывать под плис.
Гораздо более продуктивно будет изучить тему изнутри, прокачать скилл. Тем более что статей/дисеров написано уже наверно тыщи.
Ищите что-то типа
Fast Multiplier
Carry Lookahead Unit (CLU) — схема ускоренного переноса.
Carry Look-ahead Adder (CLA) — схема сумматора с ускоренным переносом.
Пример
i.stanford.edu/pub/cstr/reports/csl/tr/94/617/CSL-TR-94-617.pdf
Ну а дальше
1) Как учил Shivers ручками кодите те самые Wallace tree
2) Если сможете опять же ручками кодите ретаймин этих самых деревьев
3) Если рабочая частота у вас стабильна не от 1MHz до 130MHz, то можно попробовать найти/сделать библиотеку с так называемыми динамическими триггерами (CMOS Dynamic Flip-Flops) и использовать их. Их недостаток состоит в том что они хорошо работают на высоких и не широких диапазонах частот.

Но эта тема для меня чужая, могу ошибаться.

Сообщение отредактировал designer78 - Jul 14 2018, 12:14
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 09:57
Рейтинг@Mail.ru


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