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

Всем привет.

 

Нарисовал схему для альтера epm1270.

Развожу в квартусе....

 

у меня 8-битная входная шина данных (data_in). с этой 8-битной шины данные идут на 24-битный сумматор, работающий за 1 такт.

сумматор суммируется сам с собой (аля sum = sum + data_in).

 

логикой работы сумматора управляет "синхронная логика" - т.е. глубоких комбинационных схем нет

 

частота нужна 150 МГц.

 

 

 

Если ставлю регистр по входу (data_in), то частота начинает занижаться на 20 МГц - квартус дает 130 МГц, убираю 150 МГц.

 

 

 

При занижении ругается на критичный путь от входного регистра до выхода сумматора...

 

 

сделал сумматор 2-х тактным, а также убрал логику разрешения работы сумматора (всегда разрешен) - ситуация вообще не улучшилась

 

 

 

 

Подскажите, в чем беда? может буз входного регистра можно обойтись?

 

 

спасибо

Изменено пользователем essev

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


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

И какие у Вас tsu/th без этого регистра на входе получаются? :)

 

Почитайте вот здесь: http://electronix.ru/forum/index.php?showt...=73715&st=0.

 

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


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

Подскажите, в чем беда? может буз входного регистра можно обойтись?

что не понятного то ? нет регистра и входных констрейнов путь от data_in не анализируется. Есть регистр, есть анализ.

 

24 бита сумматор за такт на 150МГц на втором максе (телепатирую, еще и на самом медленном) это фантастика %)

 

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


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

уменьшил разрядность сумматора до 16-ти частота со 130 до 140 поднялась.

 

не понимаю почему если я делаю сумматор 2-тактным (мегафунция LPM_add_sub_unsigned), то частота становится 143 МГц.

Изменено пользователем essev

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


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

не понимаю почему если я делаю сумматор 2-тактным (мегафунция LPM_add_sub_unsigned), то частота становится 143 МГц.

телепаты все еще в отпуске, проект в студию.

 

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


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

module sum(
   input         clk,
   input         rstn,
   input  [ 7:0] din,
   input         dvin,
   output [23:0] dout
);

reg [ 8:0] lsb;
reg [15:0] msb;
reg [ 7:0] lsb_d;

always @(posedge clk or negedge rstn)
   if(!rstn)
      begin
         lsb<=0;
         lsb_d<=0;
         msb<=0;
      end
   else
      begin
         if(dvin)
            lsb<={1'b0,lsb[7:0]}+{1'b0,din};
         if(lsb[8])
            msb<=msb+1;
         lsb_d<=lsb[7:0];
      end

assign dout={msb,lsb_d};

endmodule

 

Это для беззнакового сложения. Если надо со знаком - додумайте.

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


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

не понимаю почему если я делаю сумматор 2-тактным (мегафунция LPM_add_sub_unsigned), то частота становится 143 МГц.

 

Конвейер подключили. Вам ведь дали ссылку на пост, в котором рассмотрено все это.

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

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


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

сделал по коду Sergey'F. Квартус 6.0 результат практически не изменился.

 

DmitryR, у Вас вроде сходный результат синтез даст?

 

а будет ли работать схема если она не дотягивает по частоте 10 МГц ?

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


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

DmitryR, у Вас вроде сходный результат синтез даст?

Об этом легко узнать, проведя этот синтез. Мало того, что я в хорошем расположении духа написал вам идею кода, так вы хотите чтобы я его еще сам отсинтезил и добился времянки. Я конечно это могу, но это в раздел "предлагаю работу" тогда уже.

 

а будет ли работать схема если она не дотягивает по частоте 10 МГц ?

Может быть по-всякому.

 

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


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

DmitryR, у Вас вроде сходный результат синтез даст?

 

а будет ли работать схема если она не дотягивает по частоте 10 МГц ?

 

Вы din через регистр пропустите.

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


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

с этой частотой

 

Можно поиграть разрядностями сумматора и счетчика

module pipelined_accumulator //XAPP 039.001
(
input          clk,
input          rst,
input   [7:0] data,
output [23:0] result
);

reg  [7:0] sync_reg = 8'd0;
reg [11:0] accum_l = 12'd0;
reg           reg_crry = 1'b0;
reg [11:0] accum_h = 12'd0;
reg [11:0] regl_out = 12'd0;

wire [12:0] alu_l = {1'b0, accum_l} + {{5'd0, sync_reg}};

always @ (posedge clk or posedge rst)
begin
if (rst)
    begin
    sync_reg <= 8'd0;
    accum_l <= 12'd0;
    reg_crry <= 1'b0;
    accum_h <= 12'd0;
    regl_out <= 12'd0;
    end
else
    begin
    sync_reg <= data;
    accum_l <= alu_l[11:0];
    reg_crry <= alu_l[12];
    if(reg_crry)    accum_h <= accum_h + 1'b1;
    regl_out <= accum_l;
    end
end

assign result = {accum_h, regl_out};


endmodule

 

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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