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

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Ошибки при работе схемы на ПЛИС, Прошу помощи. Временный задержки
gibson1980
сообщение Jan 23 2014, 08:30
Сообщение #16


Частый гость
**

Группа: Свой
Сообщений: 116
Регистрация: 13-12-12
Пользователь №: 74 831



В корках умножителей речь идет вроде о LUTах, посмотри еще вот этот пример, вот там точно умножение будет на DSP...

Прикрепленное изображение

вообще что за ПЛИС используется?

Сообщение отредактировал gibson1980 - Jan 23 2014, 08:31


--------------------
Go to the top of the page
 
+Quote Post
bognev
сообщение Jan 23 2014, 08:38
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 58
Регистрация: 4-06-11
Пользователь №: 65 475



Цитата(gibson1980 @ Jan 23 2014, 12:30) *
В корках умножителей речь идет вроде о LUTах, посмотри еще вот этот пример, вот там точно умножение будет на DSP...

Прикрепленное изображение

вообще что за ПЛИС используется?


ПЛИС - virtex 6.

В корке умножителей есть выбор:
Прикрепленное изображение
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jan 23 2014, 08:41
Сообщение #18


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(bognev @ Jan 22 2014, 14:36) *
. Решение проблемы нашел в последовательной обработке на более высокой частоте.

На самом деле, есть еще один вариант.
Не последовательно на более высокой частоте, а многопоточно, но тоже на более высокой частоте...
Т.е. есть вычислитель и есть память. Из памяти извлекаются данные для N-го потока, выполняется операция и данные опять отправляются в память... При этом конвейером извлекаются данные для другого потока... Для Ваших 16-ти потоков потребуется память шириной "сколько надо" х 16... Под шириной я понимаю все или часть битов, которые извлекаются для обработки...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
bognev
сообщение Jan 23 2014, 09:10
Сообщение #19


Участник
*

Группа: Участник
Сообщений: 58
Регистрация: 4-06-11
Пользователь №: 65 475



Цитата(iosifk @ Jan 23 2014, 12:41) *
На самом деле, есть еще один вариант.
Не последовательно на более высокой частоте, а многопоточно, но тоже на более высокой частоте...
Т.е. есть вычислитель и есть память. Из памяти извлекаются данные для N-го потока, выполняется операция и данные опять отправляются в память... При этом конвейером извлекаются данные для другого потока... Для Ваших 16-ти потоков потребуется память шириной "сколько надо" х 16... Под шириной я понимаю все или часть битов, которые извлекаются для обработки...

Вариант понятен, но скажем если без алгоритма в чипскопе я наблюдаю такую картинку:
Прикрепленное изображение

TRIG1, TRIG3, TRIG3, TRIG4 - это отсчеты 16и каналов последовательно передаются на вход алгоритма, а в TRIG5 счетчик, который синхронно с отсчетом в одно время должен менять свое значение, но если посмотреть на шину, то видно, что есть задержка.
При этом алгоритм подавления сейчас в схеме закомментирован. Если сейчас так схема работает, то более высокая частота или конвейер вряд ли спасут.


Вот вопрос такой

CODE
Timing constraint: NET "clk100" PERIOD = 10 ns HIGH 50%;
For more information, see Period Analysis in the Timing Closure User Guide (UG612).
22078 paths analyzed, 14128 endpoints analyzed, 2971 failing endpoints
2971 timing errors detected. (2971 setup errors, 0 hold errors, 0 component switching limit errors)
Minimum period is 11.898ns.
--------------------------------------------------------------------------------

Paths for end point ddc/ddc/SW_IN_I/user_rd_data_10_3_ii_14 (SLICE_X21Y127.CX), 1 path
--------------------------------------------------------------------------------
Slack (setup path): -0.949ns (requirement - (data path - clock path skew + uncertainty))
Source: ddc/ddc/u_ddrii_tb_top_0/Label1/user_rd_data_10_3_14 (FF)
Destination: ddc/ddc/SW_IN_I/user_rd_data_10_3_ii_14 (FF)
Requirement: 5.000ns
Data Path Delay: 1.592ns (Levels of Logic = 0)
Clock Path Skew: -3.864ns (1.420 - 5.284)
Source Clock: ddc/ddc/i_clk_0_tb rising at 5.000ns
Destination Clock: clk100 rising at 10.000ns
Clock Uncertainty: 0.493ns

Clock Uncertainty: 0.493ns ((TSJ^2 + DJ^2)^1/2) / 2 + PE
Total System Jitter (TSJ): 0.070ns
Discrete Jitter (DJ): 0.220ns
Phase Error (PE): 0.377ns

Maximum Data Path at Slow Process Corner: ddc/ddc/u_ddrii_tb_top_0/Label1/user_rd_data_10_3_14 to ddc/ddc/SW_IN_I/user_rd_data_10_3_ii_14
Location Delay type Delay(ns) Physical Resource
Logical Resource(s)
------------------------------------------------- -------------------
SLICE_X29Y143.CQ Tcko 0.337 ddc/ddc/u_ddrii_tb_top_0/Label1/user_rd_data_10_3<15>
ddc/ddc/u_ddrii_tb_top_0/Label1/user_rd_data_10_3_14
SLICE_X21Y127.CX net (fanout=1) 1.221 ddc/ddc/u_ddrii_tb_top_0/Label1/user_rd_data_10_3<14>
SLICE_X21Y127.CLK Tdick 0.034 ddc/ddc/SW_IN_I/user_rd_data_10_3_ii<15>
ddc/ddc/SW_IN_I/user_rd_data_10_3_ii_14
------------------------------------------------- ---------------------------
Total 1.592ns (0.371ns logic, 1.221ns route)
(23.3% logic, 76.7% route)

--------------------------------------------------------------------------------


В Timing Report я вижу максимальный путь между двумя FF на выходе блока u_ddrii_tb_top_0 и на входе другого блока SW_IN_I, каким образом уменьшить эту задержку?
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Jan 23 2014, 09:54
Сообщение #20


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

Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



По поводу поста 9 - большое кол-во логических уровней - 10 и все они прилично размазаны, т.е. находятся на большом расстоянии друг от друга отчего задержка на путях - 73,4%. Эту задержку можно уменьшить, но общую от 12.249ns свести до 2.702ns Вы не сможете - меняйте алгоритм.
По поводу последнего поста все интересней - там переход из одного клокового домена в другой. У Вас там первый триггер тактируется частотой ddc/ddc/i_clk_0_tb которая 200МГц, а второй clk100 который 100МГц. При этом анализатор считает, что запас по 5ns и Clock Path Skew составляет от них 3.864ns (т.е. помимо задержки данных в том месте еще и одна частота задержана относительно другой существенно). Вопрос - как формируется частота i_clk_0_tb и завязана ли она на clk100? Или это какая-нибудь часть честного буфера пересинхронизации и на анализ можно вообще не обращать внимания?
Go to the top of the page
 
+Quote Post
bognev
сообщение Jan 23 2014, 10:14
Сообщение #21


Участник
*

Группа: Участник
Сообщений: 58
Регистрация: 4-06-11
Пользователь №: 65 475



Цитата(bogaev_roman @ Jan 23 2014, 13:54) *
По поводу поста 9 - большое кол-во логических уровней - 10 и все они прилично размазаны, т.е. находятся на большом расстоянии друг от друга отчего задержка на путях - 73,4%. Эту задержку можно уменьшить, но общую от 12.249ns свести до 2.702ns Вы не сможете - меняйте алгоритм.

В 9 посту алгоритмом является корка умножителя, разве она не должна быть сделана оптимальным образом?
Цитата(bogaev_roman @ Jan 23 2014, 13:54) *
По поводу последнего поста все интересней - там переход из одного клокового домена в другой. У Вас там первый триггер тактируется частотой ddc/ddc/i_clk_0_tb которая 200МГц, а второй clk100 который 100МГц. При этом анализатор считает, что запас по 5ns и Clock Path Skew составляет от них 3.864ns (т.е. помимо задержки данных в том месте еще и одна частота задержана относительно другой существенно). Вопрос - как формируется частота i_clk_0_tb и завязана ли она на clk100? Или это какая-нибудь часть честного буфера пересинхронизации и на анализ можно вообще не обращать внимания?

Клок i_clk_0_tb формируется в корке контроллера памяти на основе 200 МГц, которые в свою очередь формируются из 100 МГц с помощью mmcm_base от внешнего клока.
Если в кратце, то я во внешней памяти DDRII SRAM организовал циклический буфер, память работает на 200 МГц.
Данные из памяти, я преобразую в последовательные в схеме которая работает на 100 МГц.

Вообще схема у меня работает так. Есть данные с АЦП на входе с частотой 160 МГц, 16 каналов. С помощью DDС я понижаю частоту дискретизации сигнала до 2 МГц. По каждому отсчету вырабатывет флаг готовности на выходе DDC. Данные с каждого из 16 каналов идут параллельно. Потом эти данные с частотой 200 МГц записываются в память и считываются. Соответственно, по сигналу готовности с памяти записываю данные в регистр, а потом преобразую в последовательный поток схемой, которая работает на частоте 100 МГц. То есть, есть поток данных, каждый отсчет длительностью 1/2Мгц = 500 нс, но он состоит из 200МГц/2МГц = 100 одинаковых отсчетов.

Сообщение отредактировал bognev - Jan 23 2014, 10:32
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Jan 23 2014, 10:50
Сообщение #22


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

Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



Цитата(bognev @ Jan 23 2014, 14:14) *
В 9 посту алгоритмом является корка умножителя, разве она не должна быть сделана оптимальным образом?

Корка умножителя сколько на сколько? Какие цифры дает документация по максимальной частоте на такие умножители? И к этой цифре еще нужно прибавить 5,320 ns, которые у Вас набегают до входа умножителя (посмотрите на координаты)
Код
SLICE_X75Y110.BQ Tcko 0.337 ddc/adc1_x<9>_REPLICA_1417
ddc/ddc/x_gen_mult_s4[0].x_mult_q/U1/blk000000b0
SLICE_X57Y35.C1 net (fanout=1) 5.320 ddc/ddc/x_gen_mult_s4[0].x_mult_q/U1/sig00000153

Я думаю что 370МГц здесь получить нереально.

Цитата
Если в кратце, то я во внешней памяти DDRII SRAM организовал циклический буфер, память работает на 200 МГц.
Данные из памяти, я преобразую в последовательные в схеме которая работает на 100 МГц.

Эти данные торчат на выходе корки (конкретно на регистрах) и вы их считываете на пониженной частоте, я правильно понял? Просто Clock Path Skew очень большой, такое ощущение, что частота ddc/ddc/i_clk_0_tb пущена по обычной (сигнальной) цепи, а не на клоковой. Тут можно поробовать либо принудительно ее пустить по клоковой шине (региональный клок например) и таким образом Clock Path Skew должен уменьшиться, либо триггеры типа ddc/ddc/SW_IN_I/user_rd_data_10_3_ii_14 принудительно расположить (констрейнами задать координаты) рядом с ddc/ddc/u_ddrii_tb_top_0/Label1/user_rd_data_10_3_14.
Go to the top of the page
 
+Quote Post
bognev
сообщение Jan 23 2014, 11:16
Сообщение #23


Участник
*

Группа: Участник
Сообщений: 58
Регистрация: 4-06-11
Пользователь №: 65 475



Цитата(bogaev_roman @ Jan 23 2014, 14:50) *
Корка умножителя сколько на сколько? Какие цифры дает документация по максимальной частоте на такие умножители? И к этой цифре еще нужно прибавить 5,320 ns, которые у Вас набегают до входа умножителя (посмотрите на координаты)
Код
SLICE_X75Y110.BQ Tcko 0.337 ddc/adc1_x<9>_REPLICA_1417
ddc/ddc/x_gen_mult_s4[0].x_mult_q/U1/blk000000b0
SLICE_X57Y35.C1 net (fanout=1) 5.320 ddc/ddc/x_gen_mult_s4[0].x_mult_q/U1/sig00000153

Я думаю что 370МГц здесь получить нереально.

Я поправил ucf файл в соответсвии с тем, что на самом деле имею
Код
NET "clk300"      PERIOD = 300 MHz;
NET "clk_adc"      PERIOD = 160 MHz;
NET "clk100"      PERIOD = 100 MHz;
NET "clk100"      PERIOD = 100 MHz;
NET "clk200"      PERIOD = 200 MHz;

370 МГц было специально задрано.

Конечно, количество временных ошибок уменьштлось с 50 с лишним тысяч, но они все равно остались:
Код
Met Constraint Check Worst Case Slack Best Case Achievable Timing Errors Timing Score
No PERIOD analysis for net "ddc/ddc/U_MEM_CONTROLLER/u_ddrii_infrastructure/sysclk0_i" derived from PERIOD analysis for net "clk200x" derived from NET "clk100" PERIOD = 10 ns HIGH 50% SETUP HOLD -0.246ns -3.005ns 5.246ns  35 16 3241 45928
No PERIOD analysis for net "ddc/ddc/U_MEM_CONTROLLER/u_ddrii_infrastructure/sysclk270_i" derived from PERIOD analysis for net "clk200x" derived from NET "clk100" PERIOD = 10 ns HIGH 50% SETUP HOLD 0.247ns -2.095ns 4.670ns  0 8 0 16760
No NET "clk300" PERIOD = 3.33333333 ns HIGH 50% SETUP HOLD -1.766ns 0.014ns 5.099ns  20 0 13311 0
No NET "clk_adc" PERIOD = 6.25 ns HIGH 50% SETUP HOLD -1.026ns 0.002ns 7.276ns  2162 0 520393 0
No NET "clk100" PERIOD = 10 ns HIGH 50% SETUP HOLD -0.949ns 0.054ns 11.898ns  2971 0 968494 0
Yes PERIOD analysis for net "clk200x" derived from NET "clk100" PERIOD = 10 ns HIGH 50% SETUP HOLD MINPERIOD 2.981ns 0.135ns 0.239ns 2.019ns 4.761ns 0 0 0 0 0 0
Yes PERIOD analysis for net "clk300x" derived from NET "clk100" PERIOD = 10 ns HIGH 50% MINPERIOD 1.904ns 1.429ns 0 0


Цитата(bogaev_roman @ Jan 23 2014, 14:50) *
Корка умножителя сколько на сколько? Какие цифры дает документация по максимальной частоте на такие умножители? И к этой цифре еще нужно прибавить 5,320 ns, которые у Вас набегают до входа умножителя (посмотрите на координаты)

16 бит на 16 бит, по датащиту максимальная частота 450 МГц. А работает на 160 МГц. С запасом даже.

Цитата(bogaev_roman @ Jan 23 2014, 14:50) *
Эти данные торчат на выходе корки (конкретно на регистрах) и вы их считываете на пониженной частоте, я правильно понял?

Так и есть торчат на 200 МГц, считываю на 100 МГц по сигналу готовности.

Цитата(bogaev_roman @ Jan 23 2014, 14:50) *
Просто Clock Path Skew очень большой, такое ощущение, что частота ddc/ddc/i_clk_0_tb пущена по обычной (сигнальной) цепи, а не на клоковой. Тут можно поробовать либо принудительно ее пустить по клоковой шине (региональный клок например) и таким образом Clock Path Skew должен уменьшиться, либо триггеры типа ddc/ddc/SW_IN_I/user_rd_data_10_3_ii_14 принудительно расположить (констрейнами задать координаты) рядом с ddc/ddc/u_ddrii_tb_top_0/Label1/user_rd_data_10_3_14.


Клок i_clk_0_tb формируется из DCM_ADV. И подключен к глобальному клоку.

Сообщение отредактировал bognev - Jan 23 2014, 11:18
Go to the top of the page
 
+Quote Post
Maverick
сообщение Jan 23 2014, 20:15
Сообщение #24


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



проект синхронный? асинхронщины нет?
переходы из разных клоковых доменов организованы правильно? например, фифо Вы применяете? как передаете сигналы готовности схемы из разных клоковых доменов?

про счетчик, который не правильно считает: какой он разрядности? на какой частоте работает?

Вы просто собирали проект в схематехнике генерируя нужные элементы, правильно? какие-то элементы Вы сами делали?

PS В общем здесь нужно смотреть Вашу схематехнику или описание схемы....
PS PS для начала возможно не помешает какая-то блок-схема...


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
o_khavin
сообщение Jan 23 2014, 22:26
Сообщение #25


Местный
***

Группа: Участник
Сообщений: 230
Регистрация: 29-08-09
Пользователь №: 52 094



Цитата(bognev @ Jan 23 2014, 15:16) *
16 бит на 16 бит, по датащиту максимальная частота 450 МГц. А работает на 160 МГц. С запасом даже.

А мелкие букафки в даташите читали? Про то, в каком конкретно режиме работы умножителя получаются эти 450Mhz. Или просто посмотрели максимальную цифру и обрадовались? sm.gif
Кроме того, весь этот Ваш "запас" в 4ns плавно растворяется в задержке пробегания перед умножителем, которая составляет 5,2ns.

Сообщение отредактировал o_khavin - Jan 23 2014, 22:26
Go to the top of the page
 
+Quote Post
bognev
сообщение Jan 24 2014, 06:34
Сообщение #26


Участник
*

Группа: Участник
Сообщений: 58
Регистрация: 4-06-11
Пользователь №: 65 475



Цитата(Maverick @ Jan 24 2014, 00:15) *
проект синхронный? асинхронщины нет?
переходы из разных клоковых доменов организованы правильно? например, фифо Вы применяете? как передаете сигналы готовности схемы из разных клоковых доменов?

про счетчик, который не правильно считает: какой он разрядности? на какой частоте работает?

Вы просто собирали проект в схематехнике генерируя нужные элементы, правильно? какие-то элементы Вы сами делали?

PS В общем здесь нужно смотреть Вашу схематехнику или описание схемы....
PS PS для начала возможно не помешает какая-то блок-схема...


асинхронщины нет.
переходы из разных клоковых доменов скорее всего сделаны не правильно, фифо я не применяю, сигналы готовности перетактирую под нужнуй клок.
счетчик работал на 100, 160, 200 Мгцах

в xilinx ise блоки фильтров, умножителей я генерил в coregen, остальные части схемы сам собирал.



Цитата(o_khavin @ Jan 24 2014, 02:26) *
А мелкие букафки в даташите читали? Про то, в каком конкретно режиме работы умножителя получаются эти 450Mhz. Или просто посмотрели максимальную цифру и обрадовались? sm.gif
Кроме того, весь этот Ваш "запас" в 4ns плавно растворяется в задержке пробегания перед умножителем, которая составляет 5,2ns.


Я нашел в чем причина такой временной задержки, она не в самой корке, а в блоке округления и сдвига после, которые я сам и нагородил. Убрал их, скорее всего ошибки в этой части схемы уйдут.
Go to the top of the page
 
+Quote Post
Maverick
сообщение Jan 24 2014, 07:08
Сообщение #27


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(bognev @ Jan 24 2014, 08:34) *
переходы из разных клоковых доменов скорее всего сделаны не правильно, фифо я не применяю, сигналы готовности перетактирую под нужнуй клок.
счетчик работал на 100, 160, 200 Мгцах

рекомендую сделать (по ссылке части 11, 12)


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
bognev
сообщение Jan 24 2014, 20:18
Сообщение #28


Участник
*

Группа: Участник
Сообщений: 58
Регистрация: 4-06-11
Пользователь №: 65 475



Цитата(Maverick @ Jan 24 2014, 11:08) *
рекомендую сделать (по ссылке части 11, 12)

Спасибо!

Временные ошибки удалось свести с 50 с лишним тысяч до 33.
Сейчас основные ошибки в модуле работы с памятью.
Go to the top of the page
 
+Quote Post
Bad0512
сообщение Jan 25 2014, 06:45
Сообщение #29


Знающий
****

Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650



Цитата(bognev @ Jan 25 2014, 03:18) *
Спасибо!

Временные ошибки удалось свести с 50 с лишним тысяч до 33.
Сейчас основные ошибки в модуле работы с памятью.

Проверьте что память использует встроенные в примитив регистры, иначе тайминги будет очень сложно свести в ноль.
Go to the top of the page
 
+Quote Post
bognev
сообщение Jan 25 2014, 07:22
Сообщение #30


Участник
*

Группа: Участник
Сообщений: 58
Регистрация: 4-06-11
Пользователь №: 65 475



Цитата(Bad0512 @ Jan 25 2014, 10:45) *
Проверьте что память использует встроенные в примитив регистры, иначе тайминги будет очень сложно свести в ноль.

RКаким образом можно это проверить? Посмотреть как это развелось в плис? Или в коде?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 28th June 2025 - 23:57
Рейтинг@Mail.ru


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