|
Ошибки при работе схемы на ПЛИС, Прошу помощи. Временный задержки |
|
|
|
Jan 22 2014, 10:36
|
Участник

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

|
Приветсвую всех!
Возникла такая проблема и требуется помощь в ее решении. Пишу проект на virtex 6. В проекте реализован 16 канальный DDC. Работоспособность проверена на железке. Мне необходимо разместить на каждом канале алгоритм подавления несинхронной помехи. Сам алгоритм подавления я написал и проверил также его работоспособность. Но при размещении 16 подавителей, по 1 на каждый канал столкнулся с проблемой нехватки ресурсов slice. Решение проблемы нашел в последовательной обработке на более высокой частоте. Но при этом столнулся с другой проблемой. При отладке в ChipScope видно, что схема ведет себя не корректно. Например, счетчик считает 1 2 3 !2! 4 5 6. Возникают значения, которых не должно быть. Если в ChipScope раскрыть шину, то видно что некоторые сигналы в шине задерживаются на один такт и это приводит к ошибке. Собственно, это мой первый проект и раньше с временными задержками в схеме не сталкивался. Алгоритм синхронный и почему возникают такие задержки мне не понятно. Вопрос в том, в какую сторону копать в чем проблема и как бороться с временными задержками в ПЛИС? Так как вопрос достаточно общий, не знаю, какую информацию еще надо предоставить и в процессе обсуждения выложу ее.
Заранее благодарю за помощь.
Сообщение отредактировал bognev - Jan 22 2014, 10:40
|
|
|
|
|
 |
Ответов
|
Jan 23 2014, 10:14
|
Участник

Группа: Участник
Сообщений: 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
|
|
|
|
|
Jan 23 2014, 10:50
|
Профессионал
    
Группа: Свой
Сообщений: 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.
|
|
|
|
|
Jan 23 2014, 11:16
|
Участник

Группа: Участник
Сообщений: 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
|
|
|
|
|
Jan 23 2014, 22:26
|
Местный
  
Группа: Участник
Сообщений: 230
Регистрация: 29-08-09
Пользователь №: 52 094

|
Цитата(bognev @ Jan 23 2014, 15:16)  16 бит на 16 бит, по датащиту максимальная частота 450 МГц. А работает на 160 МГц. С запасом даже. А мелкие букафки в даташите читали? Про то, в каком конкретно режиме работы умножителя получаются эти 450Mhz. Или просто посмотрели максимальную цифру и обрадовались?  Кроме того, весь этот Ваш "запас" в 4ns плавно растворяется в задержке пробегания перед умножителем, которая составляет 5,2ns.
Сообщение отредактировал o_khavin - Jan 23 2014, 22:26
|
|
|
|
Сообщений в этой теме
bognev Ошибки при работе схемы на ПЛИС Jan 22 2014, 10:36 bogaev_roman Цитата(bognev @ Jan 22 2014, 14:36) Приве... Jan 22 2014, 10:57 bognev Цитата(bogaev_roman @ Jan 22 2014, 14:57)... Jan 22 2014, 12:05 bogaev_roman Я давно в ISE не работал, но все равно тут можно с... Jan 22 2014, 12:40 bognev RE: Ошибки при работе схемы на ПЛИС Jan 23 2014, 06:53 bognev А каким способом можно уменьшить эти нарушения? Ка... Jan 22 2014, 14:52 bogaev_roman Цитата(bognev @ Jan 22 2014, 18:52) А как... Jan 22 2014, 15:30  bognev Цитата(bogaev_roman @ Jan 22 2014, 19:30)... Jan 22 2014, 18:54   gibson1980 ЦитатаРешение проблемы нашел в последовательной об... Jan 23 2014, 07:40    bognev Цитата(gibson1980 @ Jan 23 2014, 11:40) М... Jan 23 2014, 07:49     gibson1980 Цитата(bognev)Можно по подробнее? Коре элементы ес... Jan 23 2014, 07:56      bognev Цитата(gibson1980 @ Jan 23 2014, 11:56) М... Jan 23 2014, 08:02       gibson1980 Наоборот поставить. Я так понимаю что должно умень... Jan 23 2014, 08:13        bognev Цитата(gibson1980 @ Jan 23 2014, 12:13) Н... Jan 23 2014, 08:24         gibson1980 В корках умножителей речь идет вроде о LUTах, посм... Jan 23 2014, 08:30          bognev Цитата(gibson1980 @ Jan 23 2014, 12:30) В... Jan 23 2014, 08:38 iosifk Цитата(bognev @ Jan 22 2014, 14:36) Возни... Jan 22 2014, 18:25 iosifk Цитата(bognev @ Jan 22 2014, 14:36) . Реш... Jan 23 2014, 08:41 bognev Цитата(iosifk @ Jan 23 2014, 12:41) На са... Jan 23 2014, 09:10    Maverick проект синхронный? асинхронщины нет?
переходы из р... Jan 23 2014, 20:15     bognev Цитата(Maverick @ Jan 24 2014, 00:15) про... Jan 24 2014, 06:34      Maverick Цитата(bognev @ Jan 24 2014, 08:34) перех... Jan 24 2014, 07:08       bognev Цитата(Maverick @ Jan 24 2014, 11:08) рек... Jan 24 2014, 20:18        Bad0512 Цитата(bognev @ Jan 25 2014, 03:18) Спаси... Jan 25 2014, 06:45         bognev Цитата(Bad0512 @ Jan 25 2014, 10:45) Пров... Jan 25 2014, 07:22          Bad0512 Цитата(bognev @ Jan 25 2014, 14:22) RКаки... Jan 25 2014, 08:34           bognev Временные ошибки в памяти свелись к сигналу сброса... Jan 27 2014, 08:22 bognev Стал дальше реализовывать проект и столкнулся с но... Jan 31 2014, 04:50 Джеймс Цитата(bognev @ Jan 31 2014, 07:50) Стал ... Jan 31 2014, 06:47  bognev Цитата(Джеймс @ Jan 31 2014, 10:47) Замен... Feb 2 2014, 15:15 Timmy Я бы посоветовал для начала разместить user_rd_dat... Jan 31 2014, 05:54
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|