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

 
 
4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> помогите со схемой, прыгает частота
essev
сообщение Nov 11 2010, 20:54
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 16-05-07
Пользователь №: 27 757



Всем привет.

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

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

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

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



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



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


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




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


спасибо

Сообщение отредактировал essev - Nov 11 2010, 21:38
Go to the top of the page
 
+Quote Post
Sergey'F
сообщение Nov 11 2010, 21:41
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 351
Регистрация: 17-09-05
Из: Москва
Пользователь №: 8 660



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

Почитайте вот здесь: http://electronix.ru/forum/index.php?showt...=73715&st=0.
Go to the top of the page
 
+Quote Post
essev
сообщение Nov 11 2010, 21:58
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 16-05-07
Пользователь №: 27 757



tsu = 7.764 ns
tco = 9.01 ns
th = -1.269 ns
Go to the top of the page
 
+Quote Post
des00
сообщение Nov 12 2010, 04:15
Сообщение #4


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(essev @ Nov 11 2010, 14:54) *
Подскажите, в чем беда? может буз входного регистра можно обойтись?

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

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


--------------------
Go to the top of the page
 
+Quote Post
essev
сообщение Nov 12 2010, 06:53
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 16-05-07
Пользователь №: 27 757



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

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

Сообщение отредактировал essev - Nov 12 2010, 06:55
Go to the top of the page
 
+Quote Post
des00
сообщение Nov 12 2010, 07:00
Сообщение #6


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(essev @ Nov 12 2010, 00:53) *
не понимаю почему если я делаю сумматор 2-тактным (мегафунция LPM_add_sub_unsigned), то частота становится 143 МГц.

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


--------------------
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Nov 12 2010, 07:05
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Код
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


Это для беззнакового сложения. Если надо со знаком - додумайте.
Go to the top of the page
 
+Quote Post
sazh
сообщение Nov 12 2010, 07:13
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(essev @ Nov 12 2010, 09:53) *
не понимаю почему если я делаю сумматор 2-тактным (мегафунция LPM_add_sub_unsigned), то частота становится 143 МГц.


Конвейер подключили. Вам ведь дали ссылку на пост, в котором рассмотрено все это.
За счет ресурсов можно сделать что угодно. (разбить по разрядности, или четные, нечетные отсчеты, в конвейере).
Go to the top of the page
 
+Quote Post
essev
сообщение Nov 12 2010, 07:58
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 16-05-07
Пользователь №: 27 757



так, что мегафункция может медленно работать? нужно свое писать?
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Nov 12 2010, 08:18
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Уважаемый, я двумя постами выше вам уже все написал.
Go to the top of the page
 
+Quote Post
essev
сообщение Nov 12 2010, 10:09
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 16-05-07
Пользователь №: 27 757



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

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

а будет ли работать схема если она не дотягивает по частоте 10 МГц ?
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Nov 12 2010, 11:06
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Цитата(essev @ Nov 12 2010, 13:09) *
DmitryR, у Вас вроде сходный результат синтез даст?

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

Цитата(essev @ Nov 12 2010, 13:09) *
а будет ли работать схема если она не дотягивает по частоте 10 МГц ?

Может быть по-всякому.
Go to the top of the page
 
+Quote Post
sazh
сообщение Nov 12 2010, 11:26
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(essev @ Nov 12 2010, 13:09) *
DmitryR, у Вас вроде сходный результат синтез даст?

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


Вы din через регистр пропустите.
Go to the top of the page
 
+Quote Post
essev
сообщение Nov 12 2010, 11:37
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 16-05-07
Пользователь №: 27 757



DmitryR, вы уж не обессудьте меня - долбаюсь с этой частотой уже 2 дня - и все никак.

Go to the top of the page
 
+Quote Post
sazh
сообщение Nov 12 2010, 12:05
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(essev @ Nov 12 2010, 14:37) *
с этой частотой


Можно поиграть разрядностями сумматора и счетчика
Код
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

Go to the top of the page
 
+Quote Post
DmitryR
сообщение Nov 12 2010, 12:07
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Вот именно что вы долбаетесь - а вы проанализируйте ситуацию. Я вам дал код - он устраивает? Если нет, он лучше? Если лучше, то за счет чего? Непонять так - отсинтезировали, посмотрели RTL схему. Поняли. Нельзя ли это улучшение использовать еще раз? Можно. Вот и действуйте.
Go to the top of the page
 
+Quote Post
essev
сообщение Nov 12 2010, 12:30
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 16-05-07
Пользователь №: 27 757



Скажите, пожалуйста, а если я включил в квартусе Physycal Syntesys Optimization и частота почти стала равна нужной мне, то схема в железке с ума не будет на ровном месте сходить? smile.gif
Go to the top of the page
 
+Quote Post
ViKo
сообщение Nov 12 2010, 12:34
Сообщение #18


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Похоже, это предел работы для MAX. Если показывает частоту 130 MHz, то только такую и можно гарантировать рабочей. Все "извращения" мало чего дадут.
Нужно изменить требования задания. Например, зачем счетчик на 24 разряда? Если вход 8-разрядный. Значит, когда-то куда-то подсчитанное значение забрасывается? Чаще забрасывайте, а разрядность уменьшите.

Go to the top of the page
 
+Quote Post
sazh
сообщение Nov 12 2010, 13:04
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(essev @ Nov 12 2010, 15:30) *
Скажите, пожалуйста, а если я включил в квартусе Physycal Syntesys Optimization и частота почти стала равна нужной мне, то схема в железке с ума не будет на ровном месте сходить? smile.gif


Я ж Вам на пятерке под 200 сделал.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Nov 12 2010, 13:31
Сообщение #20


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(sazh @ Nov 12 2010, 15:04) *
Я ж Вам на пятерке под 200 сделал.

но за два такта smile.gif
Go to the top of the page
 
+Quote Post
Victor®
сообщение Nov 12 2010, 13:46
Сообщение #21


Lazy
******

Группа: Свой
Сообщений: 2 070
Регистрация: 21-06-04
Из: Ukraine
Пользователь №: 76



Цитата(ViKo @ Nov 12 2010, 17:31) *
но за два такта smile.gif


Нет никаких проблем ссделать счетчик хоть на 64 разряда с быстродействием
сравнимым с 2-х разрядным регистром сдвига.


--------------------
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
Go to the top of the page
 
+Quote Post
ViKo
сообщение Nov 12 2010, 13:53
Сообщение #22


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Victor® @ Nov 12 2010, 15:46) *
Нет никаких проблем ссделать счетчик хоть на 64 разряда с быстродействием
сравнимым с 2-х разрядным регистром сдвига.

Как это? А распространение переносов по всем разрядам счетчика?
Например 0xffffffffffffffff + 1
Go to the top of the page
 
+Quote Post
sazh
сообщение Nov 12 2010, 14:05
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(ViKo @ Nov 12 2010, 16:31) *
но за два такта


За один такт. В конвейере.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Nov 12 2010, 14:12
Сообщение #24


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(sazh @ Nov 12 2010, 16:05) *
За один такт. В конвейере.

Это вопрос терминологии. У вас в каждом такте будет выдаваться результат. Причем, старшая часть будет содержать результат от предыдущего суммирования, а младшая от последнего.
Чтобы их выровнять, неплохо бы и младшую часть результата задержать на такт.
Go to the top of the page
 
+Quote Post
Victor®
сообщение Nov 12 2010, 14:14
Сообщение #25


Lazy
******

Группа: Свой
Сообщений: 2 070
Регистрация: 21-06-04
Из: Ukraine
Пользователь №: 76



Цитата(ViKo @ Nov 12 2010, 17:53) *
Как это? А распространение переносов по всем разрядам счетчика?
Например 0xffffffffffffffff + 1



Распространение переноса надо уметь готовить и счетчик колоть на части.

Вот покопался и нашел проектик 2003 года (MAX+PLUS II/AHDL/GDF), просинтезил
Вот результаты:

- synchronous 64-bit loadable, down counter, asynch. reset
205,75 MHz для EPM1270F256A5 по Classic Timing Analyzer (Quartus 9.0)

P.S.
TimeQuest показал 300.03 MHz.
Кому верить не знаю - Altera давно не занимаюсь.


--------------------
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
Go to the top of the page
 
+Quote Post
ViKo
сообщение Nov 12 2010, 14:28
Сообщение #26


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Victor® @ Nov 12 2010, 16:14) *
...и счетчик колоть на части.

Правильно, так можно и на 1024 разряда сделать счетчик. С конвейером. С латентностью.
Автор темы хотел за такт получать результат.
Как пример, можно обычных микросхем - счетчиков соединить друг за другом, выход предыдущего - на клок следующего. И - никаких проблем с быстродействием. Весь счетчик будет считать на максимальной рабочей частоте, как для одной микросхемы.
Go to the top of the page
 
+Quote Post
Victor®
сообщение Nov 12 2010, 14:30
Сообщение #27


Lazy
******

Группа: Свой
Сообщений: 2 070
Регистрация: 21-06-04
Из: Ukraine
Пользователь №: 76



Цитата(ViKo @ Nov 12 2010, 18:28) *
Правильно, так можно и на 1024 разряда сделать счетчик. С конвейером. С латентностью.
Автор темы хотел за такт получать результат.
Как пример, можно обычных микросхем - счетчиков соединить друг за другом, выход предыдущего - на клок следующего. И - никаких проблем с быстродействием. Весь счетчик будет считать на максимальной рабочей частоте, как для одной микросхемы.


"выход предыдущего на клок следующего" и не будет синхронного счетчика - со всеми вытекающими....


--------------------
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
Go to the top of the page
 
+Quote Post
ViKo
сообщение Nov 12 2010, 14:33
Сообщение #28


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Victor® @ Nov 12 2010, 16:30) *
"выход предыдущего на клок следующего" и не будет синхронного счетчика - со всеми вытекающими....

А с остальными доводами - согласны?
Не обязательно так, как написал, делать. Есть сигнал переноса у счетчика. Его подавать на разрешение следующей микросхемы. А чтобы эти сигналы все были короткими (один период тактовой частоты), их можно на триггерах формировать.
Go to the top of the page
 
+Quote Post
Victor®
сообщение Nov 12 2010, 14:56
Сообщение #29


Lazy
******

Группа: Свой
Сообщений: 2 070
Регистрация: 21-06-04
Из: Ukraine
Пользователь №: 76



Цитата(ViKo @ Nov 12 2010, 17:33) *
А с остальными доводами - согласны?


Цитата
Правильно, так можно и на 1024 разряда сделать счетчик. С конвейером.


С этим согласен. С конвеером для переноса. При чем тут латентность не понял...

TOPICSTARTER-у

Интересная ссылка
http://www.aoki.ecei.tohoku.ac.jp/arith/mg/index.html

Сгенерите себе, что Вам больше подходит.
Ну и промоделировать не мешает, конечно...


--------------------
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
Go to the top of the page
 
+Quote Post
sazh
сообщение Nov 12 2010, 14:58
Сообщение #30


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(ViKo @ Nov 12 2010, 17:12) *
Чтобы их выровнять, неплохо бы и младшую часть результата задержать на такт.


Может промоделируете, а потом уж советы?
Go to the top of the page
 
+Quote Post
ViKo
сообщение Nov 12 2010, 15:03
Сообщение #31


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Victor® @ Nov 12 2010, 16:56) *
При чем тут латентность не понял...

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

Цитата(sazh @ Nov 12 2010, 16:58) *
Может промоделируете, а потом уж советы?

Да, у вас это уже сделано. Проглядел. Ну и через сколько тактов появится результат для конкретного входного сигнала?
Go to the top of the page
 
+Quote Post
sazh
сообщение Nov 12 2010, 15:10
Сообщение #32


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(ViKo @ Nov 12 2010, 18:03) *
Да, у вас это уже сделано. Проглядел. Ну и через сколько тактов появится результат для конкретного входного сигнала?


В реальной жизни этих тактов навалом.
А фантастику только в кино снимают.
Go to the top of the page
 
+Quote Post
Victor®
сообщение Nov 12 2010, 15:12
Сообщение #33


Lazy
******

Группа: Свой
Сообщений: 2 070
Регистрация: 21-06-04
Из: Ukraine
Пользователь №: 76



Цитата(ViKo @ Nov 12 2010, 18:03) *
Ну как же - результат счета появляется с задержкой.
(вообще, здесь о сумматоре речь идет, мы уже на счетчик перескочили).


1) Про задержку не понял... результат появляется с задержкой всегда.
Если Вы имеете в виду задержку на какое-то число тактов - то в счетчиках на основе
CLA , о котором я пишу результат счета появляется в том-же такте.

2) Счетчик - вырожденный случай сумматора/аккумулятора с константой) :-)


--------------------
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
Go to the top of the page
 
+Quote Post
ViKo
сообщение Nov 12 2010, 15:23
Сообщение #34


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(sazh @ Nov 12 2010, 17:10) *
В реальной жизни этих тактов навалом.

Это вы топикстартеру скажите.

Цитата(Victor® @ Nov 12 2010, 17:12) *
Если Вы имеете в виду задержку на какое-то число тактов - то в счетчиках на основе
CLA , о котором я пишу результат счета появляется в том-же такте.

Можете поподробнее - что это, CLA? А, нашел, в ссылке. Carry LookAhead - как же, говорили об этом на форуме, совсем недавно.
Там тоже есть ограничения по быстродействию. 64 разряда - фантастически выглядит.
Не зря там дальше идет RCLA smile.gif
Go to the top of the page
 
+Quote Post
Victor®
сообщение Nov 12 2010, 15:32
Сообщение #35


Lazy
******

Группа: Свой
Сообщений: 2 070
Регистрация: 21-06-04
Из: Ukraine
Пользователь №: 76



Цитата(ViKo @ Nov 12 2010, 18:23) *
Это вы топикстартеру скажите.


Можете поподробнее - что это, CLA?


Carry-look-ahead

Вот из таких блоков собирается большей разрядности
(писалось давненько - потому привожу как есть - на AHDL).
Каскадируется соединением c_out с ena.
Код
SUBDESIGN 4bit_cnt
(
    clk        :INPUT;
    res/        :INPUT;
    ena        :INPUT;
    d[3..0]    :INPUT;
    load        :INPUT;
    q[3..0]    :OUTPUT;
    c_out            :OUTPUT;
)
VARIABLE
    flip[3..0]    :DFFE;
BEGIN
    flip[].clk = clk;
    flip[].prn = res/;
    flip[].ena = ena # load;

    IF load THEN
        flip[].d = d[];
    ELSE
        flip[].d = flip[].q - 1;
    END IF;
    
    q[] = flip[];
    c_out = DFF((flip[] == 1), clk, res/, );
END;


--------------------
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
Go to the top of the page
 
+Quote Post
ViKo
сообщение Nov 12 2010, 15:53
Сообщение #36


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Victor® @ Nov 12 2010, 17:32) *
Каскадируется соединением c_out с ena.

Вот на этом каскадировании и возникает конвейер. Потому что следующий счетчик считает не сразу после того, как предыдущий был в состоянии 1111, а в следующем такте.
Я тоже делал практически также счетчик на 24 разряда с перезагрузкой, только выход переноса, подобный вашему, у меня был один. Работать мне нужно было на 100 MHz. А загружать приходилось число, на 2 меньше требуемого периода. Из-за той самой латентности, или как-там еще ее назвать...
P.S. у вас сделано в точности с моим сообщением №28 smile.gif
Go to the top of the page
 
+Quote Post
Victor®
сообщение Nov 12 2010, 18:00
Сообщение #37


Lazy
******

Группа: Свой
Сообщений: 2 070
Регистрация: 21-06-04
Из: Ukraine
Пользователь №: 76



Цитата(ViKo @ Nov 12 2010, 18:53) *
Потому что следующий счетчик считает не сразу после того, как предыдущий был в состоянии 1111, а в следующем такте.


Что-то Вы сами запутались и меня путаете.... О чем, собственно спор?
Счетчик работает на вычитание, перенос должен быть когда его значение будет "0000".
Но делается на такт раньше (когда его значение "1111") и задерживается (пайплайнинг или конвейер, если угодно).
и разрешает следующей ступени в каскаде переключиться.

Возьмите код, что я привел - промоделируйте и посмотрите.


--------------------
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
Go to the top of the page
 
+Quote Post
ViKo
сообщение Nov 12 2010, 19:08
Сообщение #38


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Victor® @ Nov 12 2010, 20:00) *
О чем, собственно спор?

Пока ехал домой, сообразил, что можно проверять на условие на 1 меньше (или больше в вашем случае, для вычитающего счетчика). И тогда, действительно, код всего счетчика будет изменяться, как положено. Получается, так можно сделать счетчик любой длины. Если делать счетчик с перезагрузкой, придется с загружаемыми кодами "поработать".
Но это работает для счетчика. Для сумматора нельзя предсказать, когда он должен выработать перенос заранее. Допустим, сумматор насчитал 0xfe, откуда знать, что придет на вход для суммирования?

P.S. Насчет кода от sazh - это самое подходящее решение для поставленной задачи. Оно работает благодаря тому, что входные данные - 8-разрядные. Поэтому за один такт нужно выполнять суммирование 8 разрядов входного сигнала с 8-разрядной накопленной суммой. Старшие разряды накопленной суммы можно вычислять в следующем такте. Если бы, однако, входное слово имело все 24 разряда, конвейерная обработка была бы невозможна.
upd. то же самое и у DmitryR (я, кажется, слегка попутал эти коды, когда отвечал)
P.P.S. Приведу ссылку на разговор в не столь отдаленном прошлом
http://electronix.ru/forum/index.php?showt...st&p=732059
Go to the top of the page
 
+Quote Post
essev
сообщение Nov 12 2010, 19:46
Сообщение #39


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 16-05-07
Пользователь №: 27 757



спасибо всем за ответы

только что сделал сумматор по методу DmitryR. Сразу и не допер в чем его фишка, а оказалось очень красиво и ресурсов мало ест.

однако появились новые подводные камни в проекте - общая частота проекта маловастая.

Квартус 6.0. Выставляю нужную мне частоту в Individual Clocks... - квартус не вытягивает заданную 150 МГц.


стал использовать Physical Syntesys Optimization - установил все галочки. И вроде бы частота выдержалась нужная = 150 МГц.
Однако ради чистоты эксперимента немного убавил требуемую частоту в Individual Clocks... = 145 МГц

и теперь, даже при включенном Physical Syntesys Optimization, частота проекта провалилась Мегагерц на 10.

Возвращаю на исходную 150 МГц в Individual Clocks... и все норм становится.

Если повышать частоту в Individual Clocks... - снова провал...

Почему так?










Go to the top of the page
 
+Quote Post
sazh
сообщение Nov 12 2010, 19:53
Сообщение #40


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(ViKo @ Nov 12 2010, 22:08) *
Если бы, однако, входное слово имело все 24 разряда, конвейерная обработка была бы невозможна.


Сегодня, явно не Ваш день.
Код
module pipelined_accumulator //XAPP 039.001
(
input          clk,
input          rst,
input  [17:0] data,
output [17:0] result
);

reg [17:0] sync_reg = 18'd0;
reg  [7:0] regh_in = 8'd0;
reg  [9:0] accum_l = 10'd0;
reg           reg_crry = 1'b0;
reg  [7:0] accum_h = 8'd0;
reg  [9:0] regl_out = 10'd0;

wire [9:0] alu_l;
wire       cout;
wire       cin;
wire [7:0] alu_h;

always @ (posedge clk or posedge rst)
begin
if (rst)
    begin
    sync_reg <= 18'd0;
    regh_in <= 8'd0;
    accum_l <= 10'd0;
    reg_crry <= 1'b0;
    accum_h <= 8'd0;
    regl_out <= 10'd0;
    end
else
    begin
    sync_reg <= data;
    regh_in <= sync_reg[17:10];
    accum_l <= alu_l;
    reg_crry <= cout;
    accum_h <= alu_h;
    regl_out <= accum_l;
    end
end

assign result = {accum_h, regl_out};
///////////////////
add_10
    add_10_inst
        (
        .dataa        (accum_l),
        .datab        (sync_reg[9:0]),
        .cout        (cout),
        .result        (alu_l)
        );

add_8
    add_8_inst
        (
        .cin        (reg_crry),
        .dataa        (regh_in),
        .datab        (accum_h),
        .result        (alu_h)
        );

endmodule



Цитата(essev @ Nov 12 2010, 22:46) *
Квартус 6.0.


Впечатляет.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Nov 12 2010, 20:09
Сообщение #41


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



2 sazh

Пока я читаю ваш код, сходите по приведенной мной ссылке. И прокомментируйте, если можно.

Go to the top of the page
 
+Quote Post
sazh
сообщение Nov 12 2010, 20:25
Сообщение #42


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(ViKo @ Nov 12 2010, 23:09) *
И прокомментируйте, если можно.


Там ручная работа.
А это - поведенческое описание для получения приемлемого результата.
Go to the top of the page
 
+Quote Post
Sergey'F
сообщение Nov 12 2010, 20:36
Сообщение #43


Местный
***

Группа: Свой
Сообщений: 351
Регистрация: 17-09-05
Из: Москва
Пользователь №: 8 660



Цитата(essev @ Nov 12 2010, 22:46) *
Почему так?

Непонятно, что Вы делаете.
Кстати, если модифицировать мой код под Ваши условия, получится код DmitryR. И результат на EPM1270T144A5 - 201МГц в MAXII, что с Таймквестом, что с Classic TA. Может, стоит обновить версию Quartus?

И что еще хуже, вот такой код дает 175МГц:
Код
module testadd
(
input clk, input rst,
input [7:0] dataa,
output reg [23:0] result
);

reg [7:0] datareg;

always @ (negedge rst or posedge clk)
begin
    if (!rst)
    begin
        result <= 0;
        datareg <= 0;
    end
    else
    begin
        datareg <= dataa;
        result <= result+datareg;
    end
end

endmodule


О чем три страницы написали? smile.gif
Go to the top of the page
 
+Quote Post
ViKo
сообщение Nov 12 2010, 20:48
Сообщение #44


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



2 sazh
Разобрался в вашем коде. Вот это меня, действительно, впечатлило! Теперь мне уже странно, что до сих пор я пребывал в уверенности, что подобное невозможно. А оказалось все просто. Это ж можно ценой латентности складывать сколь угодно большие числа с максимальным быстродействием, невзирая на обратную связь.

Цитата(Sergey'F @ Nov 12 2010, 22:36) *
О чем три страницы написали?

а я выставил в настройках "отображать 80 (кажется) сообщений на странице", и у меня все на однойsmile.gif

upd. Q9.1SP2 для последнего кода и той же микросхемы выдал "реалистичных" 127.88 MHz при оптимизации Balanced или Speed. Может быть, что-то нужно подкрутить в настройках?
Go to the top of the page
 
+Quote Post
essev
сообщение Nov 13 2010, 04:34
Сообщение #45


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 16-05-07
Пользователь №: 27 757



сделал в 8.0.

частота проекта стала равной нужной при включенном Physical Syntesys Optimization; без него не дотягивает 10 МГц.
Так можно его (Physical Syntesys Optimization) использовать?


спасибо

Сообщение отредактировал essev - Nov 13 2010, 04:53
Go to the top of the page
 
+Quote Post
Sergey'F
сообщение Nov 13 2010, 07:53
Сообщение #46


Местный
***

Группа: Свой
Сообщений: 351
Регистрация: 17-09-05
Из: Москва
Пользователь №: 8 660



Пользоваться Physical synthesis optimization и всеми остальными настройками, конечно, можно. Если эта настройка включена, компилятор на этапе разводки старается пересинтезировать логику так, чтобы длинные пути проходили через меньшее количество логических элементов.

Вот проект в приложении. Сходу, без настроек, без временных требований, тот же 9.1SP2 - почти 160МГц. Что я делаю не так?

P.S. Я начал было подозревать, что Вы MAXIIZ используете, но версии Z объемом 1270 не бывает, да и 6.0 версии Z почти наверняка еще нет. Так что ничего не понимаю. А в чем проблема поставить одну из последних версий Quartus? Версию 10 не посоветую, а 9.1SP2 - в самый раз.

Прикрепленные файлы
Прикрепленный файл  lab3_maxII_copy.rar ( 212.53 килобайт ) Кол-во скачиваний: 17
 
Go to the top of the page
 
+Quote Post
ViKo
сообщение Nov 13 2010, 08:34
Сообщение #47


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Когда задал в Q9.1SP2 Fitter Effort - Standard Fit, для кода Sergey'F из сообщения №43 получилась частота 159.92 MHz.
(До этого у меня стояла - Auto Fit, и частота была 127.88 MHz. Вроде, по-умолчанию так стоит)
Когда задал Default required fmax - 150 MHz, частота выросла до 175.72 MHz.
и все-то Quartus нужно "подпихивать" smile.gif

Go to the top of the page
 
+Quote Post
essev
сообщение Nov 13 2010, 08:38
Сообщение #48


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 16-05-07
Пользователь №: 27 757



по ТЗ немного изменились требования к проекту - максимальная частота должна быть 170 МГц.
ПЛИС такая же как и была EPM1270T144C5


У меня путь проектирования следующий:

FPGA Advantage -> Precision Syntesys -> Quartus.

Специально выделил цепь, на которую ругается Квартус и пошел по всему пути проектирования.

А цепочка следующая: 8-битный входной порт -> 2-тактный сумматор (по методу DmitryR) -> Выходной 16-битный порт.

Синтезирую в Precision Syntesys. Он мне пишет, что максимальная частота проекта = 152 МГц и пишет, что долгая цепь это суммирование в 2-тактном сумматоре.

Кидаю этот проект Квартусу и он поднимает частоту до 182 МГц.


Так как в "большом" проекте цепочка 8-битный входной порт -> 2-тактный сумматор (по методу DmitryR) -> Выходной 16-битный порт,
то добавляю еще одну.

Синтезирую в Precision Syntesys. Он также пишет, что максимальная частота проекта = 152 МГц и пишет, что долгая цепь это суммирование в 2-тактном сумматоре.

Но теперь Квартус выдает максимальную частоту = 166 МГц... - не вытянул smile.gif
Если воспользуюсь Physical synthesis optimization, то может быть достигну нужной мне частоты...





Go to the top of the page
 
+Quote Post
Sergey'F
сообщение Nov 13 2010, 09:11
Сообщение #49


Местный
***

Группа: Свой
Сообщений: 351
Регистрация: 17-09-05
Из: Москва
Пользователь №: 8 660



Цитата(ViKo @ Nov 13 2010, 11:34) *
Когда задал в Q9.1SP2 Fitter Effort - Standard Fit, для кода Sergey'F из сообщения №43 получилась частота 159.92 MHz.
(До этого у меня стояла - Auto Fit, и частота была 127.88 MHz. Вроде, по-умолчанию так стоит)
Когда задал Default required fmax - 150 MHz, частота выросла до 175.72 MHz.
и все-то Quartus нужно "подпихивать" smile.gif

Auto Fit прекращает оптимизации для сокращения времени компиляции, как только выполнит временные требования. Так как временных требований сначала не было, то он и не старался.

Цитата(essev @ Nov 13 2010, 11:38) *
по ТЗ немного изменились требования к проекту - максимальная частота должна быть 170 МГц.
ПЛИС такая же как и была EPM1270T144C5

У меня путь проектирования следующий:

FPGA Advantage -> Precision Syntesys -> Quartus.

Получите, распишитесь. Без конвейеризации переноса на Вашем устройстве 174МГц. Может, выкинуть, простите, нахрен, Precision в данном случае из маршрута проектирования???

Прикрепленные файлы
Прикрепленный файл  lab3_maxII_copy_2.rar ( 262.27 килобайт ) Кол-во скачиваний: 17
 
Go to the top of the page
 
+Quote Post
sazh
сообщение Nov 13 2010, 10:55
Сообщение #50


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(essev @ Nov 13 2010, 11:38) *
по ТЗ немного изменились требования к проекту - максимальная частота должна быть 170 МГц.
ПЛИС такая же как и была EPM1270T144C5


А как Вы эти 170 на EPM1270T144C5 собрались подавать?
Go to the top of the page
 
+Quote Post
essev
сообщение Nov 13 2010, 11:24
Сообщение #51


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 16-05-07
Пользователь №: 27 757



снаружи
Go to the top of the page
 
+Quote Post
ViKo
сообщение Nov 13 2010, 20:30
Сообщение #52


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Victor® @ Nov 12 2010, 20:00) *
Что-то Вы сами запутались и меня путаете...

Давайте внесем ясность. Просто так с одной ступени на следующую перенос не передается. Ведь те переносы, что формируются внутри каждой ступени, имеют разную длительность. Их нужно объединять по И - все предыдущие, для формирования разрешения счета для следующей ступени. На этом объединении быстродействие счетчика и ограничивается. Если на одном LUT можно объединить 4 таких переноса, значит, максимально быстродействующий счетчик может быть 4*4 + 4 = 20 разрядов (каждая ступень - 4-разрядная, всего их 4 для формирования переноса и еще одна 4-разрядная ступень, использующая этот перенос). Дальше потребуется несколько логических элементов, чтобы выработать разрешение счета.
Можно и последовательно передавать перенос-разрешение из ступени в ступень, что, естественно, будет еще медленнее.
В-общем, 64-разрядный счетчик с быстродействием 2-разрядного регистра сдвига - не получится.
P.S. а так, как я описал в сообщении №28 (и как ошибочно предположил, было сделано у вас в сообщении №35)- можно сделать быстрый счетчик. Потому что там не нужно учитывать предыдущие переносы. Только считать будет "абы что".
Go to the top of the page
 
+Quote Post
essev
сообщение Nov 15 2010, 10:50
Сообщение #53


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 16-05-07
Пользователь №: 27 757



Цитата(DmitryR @ Nov 12 2010, 10:05) *
Код
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


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



посимулировал код DmitryR....

Мне кажется, там ошибка, если, снимать сигнал разрешения счета dvin,
т.к. lsb[8] останется равным 1 и это будет вызывать зацикливание старших разрядов всего сумматора.

Ну, например, подать 252, затем 9 при dvin = 1, а потом снять dvin...



Сообщение отредактировал essev - Nov 15 2010, 11:29
Go to the top of the page
 
+Quote Post
essev
сообщение Nov 15 2010, 16:39
Сообщение #54


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 16-05-07
Пользователь №: 27 757



немного офтоп

у кого-нить есть лицензия для квартус 9.0 чтобы семейство поддерживалось?
У меня пишет - not installed и прихидится в 8.0 компилить

Может квартус 9.1

Спасибо
Go to the top of the page
 
+Quote Post
des00
сообщение Nov 15 2010, 18:04
Сообщение #55


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(essev @ Nov 15 2010, 10:39) *
у кого-нить есть лицензия для квартус 9.0 чтобы семейство поддерживалось?
У меня пишет - not installed и прихидится в 8.0 компилить

как то не вяжется not supported с not installed, не надо было при установке от полного пакета отказываться %)


--------------------
Go to the top of the page
 
+Quote Post
essev
сообщение Nov 16 2010, 05:04
Сообщение #56


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 16-05-07
Пользователь №: 27 757



надо поглядеть ))) а то я думал, что лицуха не полная ))
Go to the top of the page
 
+Quote Post

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

 


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


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