|
|
  |
помогите со схемой, прыгает частота |
|
|
|
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:12
|

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
|
|
|
|
|
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:46
|
Участник

Группа: Участник
Сообщений: 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... - снова провал...
Почему так?
|
|
|
|
|
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. Впечатляет.
|
|
|
|
|
Nov 12 2010, 20:36
|
Местный
  
Группа: Свой
Сообщений: 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 О чем три страницы написали?
|
|
|
|
|
Nov 13 2010, 04:34
|
Участник

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

|
сделал в 8.0.
частота проекта стала равной нужной при включенном Physical Syntesys Optimization; без него не дотягивает 10 МГц. Так можно его (Physical Syntesys Optimization) использовать?
спасибо
Сообщение отредактировал essev - Nov 13 2010, 04:53
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|