akorud 0 7 июня, 2014 Опубликовано 7 июня, 2014 · Жалоба Data Path Delay: 45.447ns (Levels of Logic = 8) Total 45.447ns (9.813ns logic, 35.634ns route) (21.6% logic, 78.4% route) Дизайн большой (в отношении к чипу?) Просто из цитаты мне кажется что вся эта 8-ми элементная цепочка раскидана по всему чипу и синтезатор не может ее компактно упаковать. Хорошо бы посмотреть в PlanAhead (тут уже писали). Ну и кажется мне, что при таких огромных задержках никакие настройки синтезатора не помогут, только вручную разбивать Levels of Logic = 8 не более короткие. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
evgenz 0 9 июня, 2014 Опубликовано 9 июня, 2014 · Жалоба Дизайн большой (в отношении к чипу?) Просто из цитаты мне кажется что вся эта 8-ми элементная цепочка раскидана по всему чипу и синтезатор не может ее компактно упаковать. Хорошо бы посмотреть в PlanAhead (тут уже писали). Ну и кажется мне, что при таких огромных задержках никакие настройки синтезатора не помогут, только вручную разбивать Levels of Logic = 8 не более короткие. у меня старая версия ISE плис SPARTAN 3, и там нет PlanAhead, там есть FloorPlaner. Я с ним особо никогда не работал, поэтому особо дельного по этому поводу ничего не могу сказать. Я пробовал как то в ручную все расположить но ничего не получилось Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 9 июня, 2014 Опубликовано 9 июня, 2014 · Жалоба найдите все ваши большие выражения (длинные) типа ((A+B) << C) & D) и разбейте их на несколько маленьких Temp <= A+B; Temp1 <= Temp << C; Temp2 <= Temp1 & D; через 3 такта появиться результат как был, но скорость будет выше. Находите все ваши большие выражения и упрощайте. Сложения длинных векторов заменяйте на несколько сложение коротких с правильным переносом... и так далее... упрощайте работу и все станет быстрее Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
akorud 0 9 июня, 2014 Опубликовано 9 июня, 2014 · Жалоба Находите все ваши большие выражения и упрощайте. Да тут и искать не надо - ясно же говорит анализатор (Levels of Logic = 8) - вот с этого и надо начинать. Может там один hot-spot весь дизайн? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
evgenz 0 9 июня, 2014 Опубликовано 9 июня, 2014 (изменено) · Жалоба Да тут и искать не надо - ясно же говорит анализатор (Levels of Logic = 8) - вот с этого и надо начинать. Может там один hot-spot весь дизайн? не хочу задавать глупых вопросов а что значит hot-spot?? если я правильно понял то все надо упростить, у меня в главном модуле просто объявлены другие модули как компоненты и сигналы одного модуля заходят на входы другого, я пробовал все эти сигналы заводить через промежуточный регистр но особо не помогло, анализатор всеровну пишет (Levels of Logic = 8), и задержки не меняются подскажите как лучше делать промежуточные регистры так xCSWR: FOR B IN 7 DOWNTO 0 GENERATE CSWR0( B )<=CSW( B ); END GENERATE; или достаточно будет CSWR0 <= CSW; Изменено 9 июня, 2014 пользователем evgenz Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 9 июня, 2014 Опубликовано 9 июня, 2014 · Жалоба анализатор всеровну пишет (Levels of Logic = 8), и задержки не меняются Откройте какой-нибудь Post-PAR Static Timing Report и увидете отчет, типа: Slack (setup path): 15.205ns (requirement - (data path - clock path skew + uncertainty)) Source: Inst_fanRegulator/Inst_lcd16x2_ctrl/cnt[5] (FF) Destination: Inst_fanRegulator/Inst_lcd16x2_ctrl/cnt[10] (FF) Requirement: 20.000ns Data Path Delay: 4.685ns (Levels of Logic = 6) Clock Path Skew: 0.000ns Source Clock: clk50 rising at 0.000ns Destination Clock: clk50 rising at 20.000ns Clock Uncertainty: 0.110ns Clock Uncertainty: 0.110ns ((TSJ^2 + DJ^2)^1/2) / 2 + PE Total System Jitter (TSJ): 0.070ns Discrete Jitter (DJ): 0.209ns Phase Error (PE): 0.000ns Maximum Data Path at Slow Process Corner: Inst_fanRegulator/Inst_lcd16x2_ctrl/cnt[5] to Inst_fanRegulator/Inst_lcd16x2_ctrl/cnt[10] Location Delay type Delay(ns) Physical Resource Logical Resource(s) ------------------------------------------------- ------------------- SLICE_X50Y125.AQ Tcko 0.381 Inst_fanRegulator/Inst_lcd16x2_ctrl/cnt(10) Inst_fanRegulator/Inst_lcd16x2_ctrl/cnt[5] SLICE_X63Y126.B1 net (fanout=2) 1.077 Inst_fanRegulator/Inst_lcd16x2_ctrl/cnt(5) SLICE_X63Y126.B Tilo 0.068 Inst_fanRegulator/Inst_lcd16x2_ctrl/cnt(15) Inst_fanRegulator/Inst_lcd16x2_ctrl/op_state_ns_0_o2_i_a2_1[2] SLICE_X63Y123.D3 net (fanout=10) 0.589 Inst_fanRegulator/Inst_lcd16x2_ctrl/un1_cnt_1 SLICE_X63Y123.D Tilo 0.068 Inst_fanRegulator/Inst_lcd16x2_ctrl/cnt(3) Inst_fanRegulator/Inst_lcd16x2_ctrl/op_state_ns_0_o2_i_a2_3_lut6_2_o6[2] SLICE_X63Y123.C2 net (fanout=3) 0.473 Inst_fanRegulator/Inst_lcd16x2_ctrl/un1_cnt SLICE_X63Y123.C Tilo 0.068 Inst_fanRegulator/Inst_lcd16x2_ctrl/cnt(3) Inst_fanRegulator/Inst_lcd16x2_ctrl/proc_state.va_8_line1_buffer.un1_next_op_state_1_sqmuxa_2 SLICE_X62Y123.C5 net (fanout=2) 0.193 Inst_fanRegulator/Inst_lcd16x2_ctrl/next_cnt_sm3_2 SLICE_X62Y123.C Tilo 0.068 Inst_fanRegulator/Inst_lcd16x2_ctrl/op_state(9) Inst_fanRegulator/Inst_lcd16x2_ctrl/proc_state.va_8_line1_buffer.un1_next_op_state_1_sqmuxa SLICE_X62Y123.D3 net (fanout=7) 0.356 Inst_fanRegulator/Inst_lcd16x2_ctrl/next_cnt_sm3 SLICE_X62Y123.D Tilo 0.068 Inst_fanRegulator/Inst_lcd16x2_ctrl/op_state(9) Inst_fanRegulator/Inst_lcd16x2_ctrl/proc_state.va_8_line1_buffer.next_cnt_m5s4_lut6_2_o6 SLICE_X50Y125.D2 net (fanout=14) 1.248 Inst_fanRegulator/Inst_lcd16x2_ctrl/N_718 SLICE_X50Y125.CLK Tas 0.028 Inst_fanRegulator/Inst_lcd16x2_ctrl/cnt(10) Inst_fanRegulator/Inst_lcd16x2_ctrl/proc_state.va_8_line1_buffer.next_cnt[10] Inst_fanRegulator/Inst_lcd16x2_ctrl/cnt[10] ------------------------------------------------- --------------------------- Total 4.685ns (0.749ns logic, 3.936ns route) (16.0% logic, 84.0% route) Т. е. в данном случае 6 уровней логики и все задержки можно наглядно увидеть поэлементно, при этом указан весь путь от триггера до триггера и Вам предлагается "разбить" его, вставив дополнительный триггер по сути. В Вашем случае требуется открыть Ваш критический путь и посмотреть что и как, может Вы вставляете регистры совершенно не в то место. PS/ Извиняюсь, не увидел пост 14. Очень много уходит на соединения - 78.4% route, но даже если ужать и дублировать логику, то не факт что уложится. Тут скорее всего поможет только вставка промежуточных регистров или изменение алгоритма. PSS/ Посмотрел путь, если есть возможность, то я бы поставил промежуточные регистры сюда XCORRELATOR/XKANAL17/XBLOC_REG_NKAN/XREGOS/QOUT* и сюда XCORRELATOR/XKANAL17/KT* - при этом я не нашел RTL для XREGOS. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 9 июня, 2014 Опубликовано 9 июня, 2014 · Жалоба погодите погодите.... А регистры вставляются просто так? У них нет клока по которому они защелкивают данные с выхода одного модуля, чтобы они стали верными для входы другого уже через клок? Если нет, то какой в них смысл... если у вас выход одного модуля идет на вход другого, то вы выход первого заводите на регистр, каждый такт на этом регистре защелкиваете результат, а уже этот регистр подаете на вход второго модуля, в таком раскладе у вас будет быстрее. а так вы просто проводов добавили.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
evgenz 0 10 июня, 2014 Опубликовано 10 июня, 2014 (изменено) · Жалоба PSS/ Посмотрел путь, если есть возможность, то я бы поставил промежуточные регистры сюда XCORRELATOR/XKANAL17/XBLOC_REG_NKAN/XREGOS/QOUT* и сюда XCORRELATOR/XKANAL17/KT* - при этом я не нашел RTL для XREGOS. Роман а что значит RTL для XREGOS, под RTL что подразумевается И почему на эти цепи ставить промежуточный регистр, по какому принципу вы их определили??? я так думал что нужно промежуточные цепи ставить где в отчете (fanout=68) большой или я не прав?? если у вас выход одного модуля идет на вход другого, то вы выход первого заводите на регистр, каждый такт на этом регистре защелкиваете результат, а уже этот регистр подаете на вход второго модуля, в таком раскладе у вас будет быстрее. а так вы просто проводов добавили.... я выход первого модуля завожу на регистры и каждый такт соответственно данные в нем защелкиваются, в свою очередь эти регистры я завожу на входы второго модуля, ну т.е. как вы и написали но это особо не помогло Изменено 10 июня, 2014 пользователем evgenz Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 10 июня, 2014 Опубликовано 10 июня, 2014 · Жалоба значит внутри модулей у вас задержки. у вас нет модуля с длиннющими входными данными? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 10 июня, 2014 Опубликовано 10 июня, 2014 · Жалоба Да тут и искать не надо - ясно же говорит анализатор (Levels of Logic = 8) - вот с этого и надо начинать. просто любопытство, а где он это говорит? :) Например в квартусе... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
evgenz 0 10 июня, 2014 Опубликовано 10 июня, 2014 · Жалоба значит внутри модулей у вас задержки. у вас нет модуля с длиннющими входными данными? есть входная 32-битная шина, и шина адреса на 24 бита, вот эти шины дальше ветвятся по всем модулям, если вы это имеете ввиду. также есть разные управляющие битики, но все эти данные и шины проходят через промежуточные регистры просто любопытство, а где он это говорит? :) Например в квартусе... такой отчет я получил в Timing Analyzer, там и написано что (Levels of Logic = 8) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 10 июня, 2014 Опубликовано 10 июня, 2014 · Жалоба есть входная 32-битная шина, и шина адреса на 24 бита, вот эти шины дальше ветвятся по всем модулям, если вы это имеете ввиду. также есть разные управляющие битики, но все эти данные и шины проходят через промежуточные регистры Ищите либо коммутатор шин. Это то место, где выходы разных регистров коммутируются на общую шину для чтения хостом... Либо, что более вероятно, это дешифратор адреса для выработки чип-селекта. В этом случае, от полной дешифрации надо переходить к частичной. Тогда будет меньше каскадов логики задействовано. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 10 июня, 2014 Опубликовано 10 июня, 2014 · Жалоба Роман а что значит RTL для XREGOS, под RTL что подразумевается И почему на эти цепи ставить промежуточный регистр, по какому принципу вы их определили??? я так думал что нужно промежуточные цепи ставить где в отчете (fanout=68) большой или я не прав?? RTL это ваше VHDL описание для конкретного модуля. Определял исходя из Вашего временного отчета по следующему принципу - в ограничениях у Вас указан период Requirement: 18.000ns, в сумме Вы получаете по этой цепочке Data Path Delay: 45.447ns, таким образом, чтобы уложилось по времени я разбил эту цепочку на три промежутка так, чтобы каждый был меньше 18ns и получил три отрезка. 1. от SLICE_X34Y85.YQ до SLICE_X41Y121.YQ (или там, где фанаут 68) 2. от SLICE_X41Y121.YQ до SLICE_X44Y67.XQ ну и последний то, что осталось. Я не знаю что у Вас там внутри и как это работает, но если можно все разделить это регистрами при отсутствии обратной связи, то конкретно этот путь будет удовлетворять временным требованиям. И, кстати говоря, судя по путям в отчете - это и есть межмодульные порты. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
evgenz 0 10 июня, 2014 Опубликовано 10 июня, 2014 (изменено) · Жалоба Ищите либо коммутатор шин. Это то место, где выходы разных регистров коммутируются на общую шину для чтения хостом... Либо, что более вероятно, это дешифратор адреса для выработки чип-селекта. В этом случае, от полной дешифрации надо переходить к частичной. Тогда будет меньше каскадов логики задействовано. по поводу комутатора я его давно разбил, было вот так DATA_OUT10<="00000" & Q_SIGREAD WHEN AR1(14 DOWNTO 0)="000000000000100" ELSE "00000" & STIME WHEN AR1(14 DOWNTO 0)="000000000001000" ELSE DATA_FFT; DATA_OUT20 <= "00000" & STIMERD when AR2(9 downto 0)=ADDR_STIMERD else DATA_CORE; DATA_OUT<=DATA_OUT0 WHEN AD(19 DOWNTO 18)="00" ELSE DATA_OUT1 WHEN AD(19 DOWNTO 18)="01" ELSE X"00000 а сделал стало вот так, если я правильно понимаю process (X50) begin if(rising_edge(X50)) then if(AR1(14 DOWNTO 0)="000000000000100") then DATA_OUT10 <= "00000" & Q_SIGREAD; end if; if(AR1(14 DOWNTO 0)="000000000001000") then DATA_OUT10 <= "00000" & STIME; end if; if(AR1(14 DOWNTO 0)/="000000000000100" and AR1(14 DOWNTO 0)/="000000000001000") then DATA_OUT10 <= DATA_FFT; end if; if(AR2(9 downto 0)=ADDR_STIMERD) then DATA_OUT20 <= "00000" & STIMERD; end if; if(AR2(9 downto 0)/=ADDR_STIMERD) then DATA_OUT20<=DATA_CORE; end if; end if;--rising end process; process (X50) begin if rising_edge(X50) then if (AD(19 DOWNTO 18) = "00") then DATA_OUT<=DATA_OUT0; end if; if (AD(19 DOWNTO 18) = "01") then DATA_OUT<=DATA_OUT1; end if; if(AD(19 DOWNTO 18) /= "00" and AD(19 DOWNTO 18)/="01") then DATA_OUT<=X"0000000" & "00" & INTR1 & INTR0; end if; end if; end process; или я что то делаю не так??? а по поводу адреса AD и AR это и есть адрес и он особо не дешифрируется?? но я в проекте не где не видел больших дешифраторов Изменено 10 июня, 2014 пользователем evgenz Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
10ff 0 10 июня, 2014 Опубликовано 10 июня, 2014 · Жалоба 1. UG612 (v 13.4). Страница 234. 2. Как уже советовали, упрощайте свой проект, разбивайте на отдельные части(подробнее с примером в UG612). 3. Некоторые IP-ядра от Xilinx имеют такую настройку как Clock Latency - увеличивая количество шагов конвейера Вы увеличиваете результирующую тактовую частоту. Порой не стоит пытаться сделать что-либо за один такт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться