|
помогите со схемой, прыгает частота |
|
|
|
Nov 11 2010, 20:54
|
Участник

Группа: Участник
Сообщений: 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
|
|
|
|
|
 |
Ответов
|
Nov 12 2010, 14:14
|

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
|
|
|
|
|
Nov 12 2010, 14:30
|

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
|
|
|
|
|
Nov 12 2010, 14:56
|

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
|
|
|
|
|
Nov 12 2010, 15:03
|

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

|
Цитата(Victor® @ Nov 12 2010, 16:56)  При чем тут латентность не понял... Ну как же - результат счета появляется с задержкой. (вообще, здесь о сумматоре речь идет, мы уже на счетчик перескочили). Цитата(sazh @ Nov 12 2010, 16:58)  Может промоделируете, а потом уж советы? Да, у вас это уже сделано. Проглядел. Ну и через сколько тактов появится результат для конкретного входного сигнала?
|
|
|
|
|
Nov 12 2010, 15:23
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 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
|
|
|
|
|
Nov 12 2010, 15:32
|

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
|
|
|
|
|
Nov 12 2010, 18:00
|

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
|
|
|
|
|
Nov 12 2010, 19:08
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 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
|
|
|
|
|
Nov 12 2010, 19:53
|
Гуру
     
Группа: Свой
Сообщений: 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. Впечатляет.
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|