|
vivado 2014.1 , ILA ,ошибки |
|
|
|
Mar 11 2015, 19:38
|
Знающий
   
Группа: Свой
Сообщений: 614
Регистрация: 12-06-09
Из: рядом с Москвой
Пользователь №: 50 219

|
Цитата(serg_k1 @ Mar 11 2015, 17:50)  Здравствуйте, столкнулся с проблемой «The design failed to meet the timing requirements.» vivado 2014.1 плата Artix , при подключении ILA под частоту 400МГц. Нужна именно она. При 200МГц все нормально. ... Artix7 Datasheet FMAX_FIFO (FIFO in all modes without ECC) скорость / частота 3 - 509.68МГц 2 - 460.83МГц 1 - 388.20МГц Таким образом, из даташита, если у вас Артихс первой скорости, то напрямую логгер на блочной памяти на 400МГц вам не сделать. На китах обычно первую скорость и ставят, ибо дешевле. Можно попробывать обмануть Виваду и сказать ей в настройках проекта, что скорость 2 или 3 - но гарантии работоспособности проекта нету. Либо, как DES00 вам посоветовал, попытаться сделать свой логгер, память затактировать от 200МГц и распараллелить данные на 2 потока.
|
|
|
|
|
Mar 12 2015, 06:13
|
Частый гость
 
Группа: Участник
Сообщений: 115
Регистрация: 21-03-07
Пользователь №: 26 368

|
Цитата(des00 @ Mar 11 2015, 19:12)  сделать свой логер на фифо и подключить ILA, который не может работать на 400МГц. Спасибо, попробую так сделать. В настройках стоит Artix-7 AC701 Evaluation Platform (xc7a200tfbg676-2), но попробую фифо под 200МГц
|
|
|
|
|
Mar 17 2015, 15:54
|

Знающий
   
Группа: Свой
Сообщений: 747
Регистрация: 11-04-07
Пользователь №: 26 933

|
Цитата Для reset установлен false path. Это зачем? Цитата к сожалению ничего не получилось. Что-то конкретно не работает или вас просто испугали ворнинги? Цитата Сделал несколько фифо под 200 и ILA. Удалось данные распараллелить в два раза? Фифо можно собрать на распределенной памяти, для распарарллеливания нужна самая минимальная глубина. Цитата После запуска Report Timing Summary показывает наличие ошибок в Intra-Clock Paths->clk_wiz_0->Setup Скорее всего нужно прописать констрейнты.
--------------------
|
|
|
|
|
Mar 18 2015, 14:06
|
Частый гость
 
Группа: Участник
Сообщений: 115
Регистрация: 21-03-07
Пользователь №: 26 368

|
Цитата(dm.pogrebnoy @ Mar 17 2015, 19:54)  Это зачем?
Что-то конкретно не работает или вас просто испугали ворнинги?
Удалось данные распараллелить в два раза? Фифо можно собрать на распределенной памяти, для распарарллеливания нужна самая минимальная глубина.
Скорее всего нужно прописать констрейнты. 1. Для reset установлен false path. у фифо был reset и ошибки "setup" для ILA . я сделал чтобы этот путь распостранения не учитывался. 2. 3. испугали ворнинги. хотелось бы быть уверенным что ila с фифо работает правильно. Сейчас просто считает счетчик под оба фронта 400МГц и я его хочу смотреть. Код //--------------------------- clk_wiz_0 core_clk_400 ( // Clock in ports .clk_in1_p(sys_clk_p), // input clk_in1_p .clk_in1_n(sys_clk_n), // input clk_in1_n // Clock out ports .clk_out1(clk_400MHz), // output clk_out1 .clk_out2(clk_out2), // output clk_out2 .clk_out3(clk_out3), // output clk_out3 // Status and control signals .reset(reset),// input reset .locked(locked_1)); // output locked //--------------------------- clk_wiz_1 core_clk_200 ( // Clock in ports .clk_in1(clk_400MHz), // Clock out ports .clk_out1(clk_200), .clk_out2(clk_200_90), .clk_out3(clk_200_180), .clk_out4(clk_200_270), .clk_out5(clk_400), .clk_out6(clk_400_90), .clk_out7(clk_400_180), // Status and control signals .reset(reset),// input reset .locked(locked_2));
... begin if ( ( clk_400_90 == 0 ) & ( clk_200_90 == 0) ) nom <= 2'b00; else nom <= nom + 1'b1; if ( data_AB < 16'hffff) data_AB <= data_AB + 1'b1; else data_AB <= 16'h0; case ( nom ) 2'b00: begin data_AB_1 <= data_AB; end 2'b01: begin data_AB_2 <= data_AB; end 2'b10: begin data_AB_3 <= data_AB; end 2'b11: begin data_AB_4 <= data_AB; end endcase end ... //-------------таких 4 под wr_clk = clk_200_xxx --------------- fifo_data fifo_data_2( .wr_clk(clk_200), .rd_clk(clk_200), .d_in(data_AB_2), .led(GPIO_LED_1), .reset(reset) ); ... между data_AB_2 и clk_200 период 400МГц , а выдается ошибка timing. А в ILA частота 200МГц и там тоже ошибка timing - setup. Причем ошибки есть даже тогда, когда остается один из 4-х каналов, при этом вход счетчика остается под оба фронта 400. пробовал и так Код always @( posedge clk_200 ) begin data_AB_1 <= data_AB; end //---------------------------- always @( posedge clk_200_90 ) begin data_AB_2 <= data_AB; end
... а будет- входные данные (32р LVDS) под оба фронта 400МГц и с которыми нужно разбираться. Поэтому и хотелось быть уверенным в правильности работы. 4.на входную частоту sys_clk_p и clk_400MHz для clk_wiz_1 core_clk_200 прописано. Что еще нужно?
|
|
|
|
|
Mar 18 2015, 15:51
|

Знающий
   
Группа: Свой
Сообщений: 747
Регистрация: 11-04-07
Пользователь №: 26 933

|
1) Использовать 1 MMCM вместо двух. Проверить Clock Interaction после разводки. 2) Это что? Так не надо делать. Код if ( ( clk_400_90 == 0 ) & ( clk_200_90 == 0) ) nom <= 2'b00; else nom <= nom + 1'b1; 3) Цитата между data_AB_2 и clk_200 период 400МГц , не совсем понятно что это значит. 4) Цитата а будет- входные данные (32р LVDS) под оба фронта 400МГц Принимайте этот поток при помощи DDR триггеров в IOB, дальше на ФИФО с разной разрядностью шин по входу и выходу, получив таким образом понижение частоты и распараллеливание потока данных Код fifo_data fifo_data_2( .wr_clk(clk_400), .rd_clk(clk_200), .wdata(wdata) // 64 бита .rdata(rdata) // 128 бит ); 5) На 4п. см мой 1. Если есть проблемы в Clock Interaction Report - устранить.
--------------------
|
|
|
|
|
Mar 19 2015, 15:59
|
Частый гость
 
Группа: Участник
Сообщений: 115
Регистрация: 21-03-07
Пользователь №: 26 368

|
Цитата(dm.pogrebnoy @ Mar 18 2015, 19:51)  1) Использовать 1 MMCM вместо двух. Проверить Clock Interaction после разводки. 4) Принимайте этот поток при помощи DDR триггеров в IOB, дальше на ФИФО с разной разрядностью шин по входу и выходу, получив таким образом понижение частоты и распараллеливание потока данных Если есть проблемы в Clock Interaction Report - устранить. Спасибо, по моему сейчас так и сделал. Принимаю(пока счетчик под оба фронта) на IDDR. Выход Q1 и Q2 на fifo_data_1(под clk_400) и _2(под clk_400_180). выходы фифо(х2) под 200 на ila. Но есть проблемы в Clock Interaction Report. причем не только clk_400- clk_400_180, но и clk_400- clk_400. А разве Clock Interaction Report показывает не только взаимодействие clk подсетей, но и внутри? ошибки fifo_data_2 clk_400 falling- clk_400_180 rising,(*) fifo_data_1 clk_400 rising- clk_400 rising, fifo_data_2 clk_400_180 rising- clk_400_180 rising, мне не понятно где есть такое (*) пересечение . и как это устранять? (*) может потому что IDDR- там же один clk
|
|
|
|
|
Mar 19 2015, 19:19
|

Знающий
   
Группа: Свой
Сообщений: 747
Регистрация: 11-04-07
Пользователь №: 26 933

|
Для решения вашей задачи не требуется частот с разными фазами. Только 200 и 400. Без всяких _90 _180 _270. А потому уже можно думать: Цитата мне не понятно где есть такое (*) пересечение . и как это устранять?
--------------------
|
|
|
|
|
Mar 20 2015, 11:20
|
Частый гость
 
Группа: Участник
Сообщений: 115
Регистрация: 21-03-07
Пользователь №: 26 368

|
Цитата(dm.pogrebnoy @ Mar 19 2015, 23:19)  Для решения вашей задачи не требуется частот с разными фазами. Только 200 и 400. Без всяких _90 _180 _270.
А потому уже можно думать: Да , я так и сделал. Но ошибки Clock Interaction остались . 39 штук для ila clk_200 rising- clk_200 rising. И что с ними делать? Report Timing Summary выдал 7 ошибок setup в Intra-Clock Paths . Я попробовал переместить компоненты в окне Device, и снова сделать Report , но цифры ошибок только выросли. Да и не все можно переместить.
|
|
|
|
|
Mar 23 2015, 09:17
|
Частый гость
 
Группа: Участник
Сообщений: 115
Регистрация: 21-03-07
Пользователь №: 26 368

|
есть еще одна проблема. Принимаю данные счетчика на IDDR. так вот эти связи не разводятся. Report DRC показывает RTSTAT #1 Critical Warning 16 net(s) are unrouted. The problem net(s) are dat_AB/data_out[0], dat_AB/data_out[1], dat_AB/data_out[2], dat_AB/data_out[3], dat_AB/data_out[4], dat_AB/data_out[5], dat_AB/data_out[6], dat_AB/data_out[7], dat_AB/data_out[8], dat_AB/data_out[9], dat_AB/data_out[10], dat_AB/data_out[11], dat_AB/data_out[12], dat_AB/data_out[13], dat_AB/data_out[14] (the first 15 of 16 listed).
Сообщение отредактировал serg_k1 - Mar 23 2015, 09:18
|
|
|
|
|
Mar 23 2015, 11:31
|

Знающий
   
Группа: Свой
Сообщений: 747
Регистрация: 11-04-07
Пользователь №: 26 933

|
Цитата(serg_k1 @ Mar 23 2015, 12:17)  есть еще одна проблема. Принимаю данные счетчика на IDDR. так вот эти связи не разводятся. Report DRC показывает RTSTAT #1 Critical Warning 16 net(s) are unrouted. The problem net(s) are dat_AB/data_out[0], dat_AB/data_out[1], dat_AB/data_out[2], dat_AB/data_out[3], dat_AB/data_out[4], dat_AB/data_out[5], dat_AB/data_out[6], dat_AB/data_out[7], dat_AB/data_out[8], dat_AB/data_out[9], dat_AB/data_out[10], dat_AB/data_out[11], dat_AB/data_out[12], dat_AB/data_out[13], dat_AB/data_out[14] (the first 15 of 16 listed). Вы подали внутренний счетчик на IDDR? Так делать нельзя, на IDDR могут заводиться сигналы только с входных буферов.
--------------------
|
|
|
|
|
Mar 23 2015, 13:34
|
Частый гость
 
Группа: Участник
Сообщений: 115
Регистрация: 21-03-07
Пользователь №: 26 368

|
Цитата(dm.pogrebnoy @ Mar 23 2015, 15:31)  Вы подали внутренний счетчик на IDDR? Так делать нельзя, на IDDR могут заводиться сигналы только с входных буферов. да, это я понял. но мне нужно его тоже смотреть одновременно с внешними сигналами. Значит для него нужно делать что-то вроде того, что я делал сначала?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|