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

 
 
> помогите со схемой, прыгает частота
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
 
Start new topic
Ответов
essev
сообщение Nov 12 2010, 12:30
Сообщение #2


Участник
*

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



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


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #4


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

Группа: Модераторы
Сообщений: 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
Сообщение #5


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
Сообщение #6


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

Группа: Модераторы
Сообщений: 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
Victor®
сообщение Nov 12 2010, 14:14
Сообщение #7


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
Сообщение #8


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

Группа: Модераторы
Сообщений: 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
Сообщение #9


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
Сообщение #10


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

Группа: Модераторы
Сообщений: 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
Сообщение #11


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
ViKo
сообщение Nov 12 2010, 15:03
Сообщение #12


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

Группа: Модераторы
Сообщений: 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
Сообщение #13


Гуру
******

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



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


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


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

Группа: Модераторы
Сообщений: 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
Сообщение #15


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
Сообщение #16


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

Группа: Модераторы
Сообщений: 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
Сообщение #17


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
Сообщение #18


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

Группа: Модераторы
Сообщений: 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
sazh
сообщение Nov 12 2010, 19:53
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 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

Сообщений в этой теме
- essev   помогите со схемой   Nov 11 2010, 20:54
- - Sergey'F   И какие у Вас tsu/th без этого регистра на входе п...   Nov 11 2010, 21:41
- - essev   tsu = 7.764 ns tco = 9.01 ns th = -1.269 ns   Nov 11 2010, 21:58
- - des00   Цитата(essev @ Nov 11 2010, 14:54) Подска...   Nov 12 2010, 04:15
|- - DmitryR   Кодmodule sum( input clk, input rstn...   Nov 12 2010, 07:05
- - essev   уменьшил разрядность сумматора до 16-ти частота со...   Nov 12 2010, 06:53
|- - des00   Цитата(essev @ Nov 12 2010, 00:53) не пон...   Nov 12 2010, 07:00
|- - sazh   Цитата(essev @ Nov 12 2010, 09:53) не пон...   Nov 12 2010, 07:13
- - essev   так, что мегафункция может медленно работать? нужн...   Nov 12 2010, 07:58
|- - DmitryR   Уважаемый, я двумя постами выше вам уже все написа...   Nov 12 2010, 08:18
- - essev   сделал по коду Sergey'F. Квартус 6.0 результат...   Nov 12 2010, 10:09
|- - DmitryR   Цитата(essev @ Nov 12 2010, 13:09) Dmitry...   Nov 12 2010, 11:06
|- - sazh   Цитата(essev @ Nov 12 2010, 13:09) Dmitry...   Nov 12 2010, 11:26
- - essev   DmitryR, вы уж не обессудьте меня - долбаюсь с это...   Nov 12 2010, 11:37
|- - sazh   Цитата(essev @ Nov 12 2010, 14:37) с этой...   Nov 12 2010, 12:05
|- - DmitryR   Вот именно что вы долбаетесь - а вы проанализируйт...   Nov 12 2010, 12:07
|||- - ViKo   Цитата(Victor® @ Nov 12 2010, 20:00) Что-...   Nov 13 2010, 20:30
||- - Victor®   Цитата(ViKo @ Nov 12 2010, 18:03) Ну как ...   Nov 12 2010, 15:12
|- - sazh   Цитата(ViKo @ Nov 12 2010, 16:31) но за д...   Nov 12 2010, 14:05
|- - ViKo   Цитата(sazh @ Nov 12 2010, 16:05) За один...   Nov 12 2010, 14:12
|- - sazh   Цитата(ViKo @ Nov 12 2010, 17:12) Чтобы и...   Nov 12 2010, 14:58
- - ViKo   Похоже, это предел работы для MAX. Если показывает...   Nov 12 2010, 12:34
- - essev   спасибо всем за ответы только что сделал сумматор...   Nov 12 2010, 19:46
|- - Sergey'F   Цитата(essev @ Nov 12 2010, 22:46) Почему...   Nov 12 2010, 20:36
- - ViKo   2 sazh Пока я читаю ваш код, сходите по приведенн...   Nov 12 2010, 20:09
|- - sazh   Цитата(ViKo @ Nov 12 2010, 23:09) И проко...   Nov 12 2010, 20:25
- - ViKo   2 sazh Разобрался в вашем коде. Вот это меня, дейс...   Nov 12 2010, 20:48
- - essev   сделал в 8.0. частота проекта стала равной нужной...   Nov 13 2010, 04:34
- - Sergey'F   Пользоваться Physical synthesis optimization и все...   Nov 13 2010, 07:53
- - ViKo   Когда задал в Q9.1SP2 Fitter Effort - Standard Fit...   Nov 13 2010, 08:34
- - essev   по ТЗ немного изменились требования к проекту - ма...   Nov 13 2010, 08:38
|- - sazh   Цитата(essev @ Nov 13 2010, 11:38) по ТЗ ...   Nov 13 2010, 10:55
- - Sergey'F   Цитата(ViKo @ Nov 13 2010, 11:34) Когда з...   Nov 13 2010, 09:11
- - essev   снаружи   Nov 13 2010, 11:24
- - essev   Цитата(DmitryR @ Nov 12 2010, 10:05) Кодm...   Nov 15 2010, 10:50
- - essev   немного офтоп у кого-нить есть лицензия для кварт...   Nov 15 2010, 16:39
|- - des00   Цитата(essev @ Nov 15 2010, 10:39) у кого...   Nov 15 2010, 18:04
- - essev   надо поглядеть ))) а то я думал, что лицуха не пол...   Nov 16 2010, 05:04


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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 05:04
Рейтинг@Mail.ru


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