Перейти к содержанию
    

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 не более короткие.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дизайн большой (в отношении к чипу?) Просто из цитаты мне кажется что вся эта 8-ми элементная цепочка раскидана по всему чипу и синтезатор не может ее компактно упаковать. Хорошо бы посмотреть в PlanAhead (тут уже писали).

Ну и кажется мне, что при таких огромных задержках никакие настройки синтезатора не помогут, только вручную разбивать Levels of Logic = 8 не более короткие.

у меня старая версия ISE плис SPARTAN 3, и там нет PlanAhead, там есть FloorPlaner. Я с ним особо никогда не работал, поэтому особо дельного по этому поводу ничего не могу сказать. Я пробовал как то в ручную все расположить но ничего не получилось

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

найдите все ваши большие выражения (длинные) типа

((A+B) << C) & D)

и разбейте их на несколько маленьких

Temp <= A+B;

Temp1 <= Temp << C;

Temp2 <= Temp1 & D;

 

через 3 такта появиться результат как был, но скорость будет выше. Находите все ваши большие выражения и упрощайте.

 

Сложения длинных векторов заменяйте на несколько сложение коротких с правильным переносом... и так далее... упрощайте работу и все станет быстрее

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Находите все ваши большие выражения и упрощайте.

Да тут и искать не надо - ясно же говорит анализатор (Levels of Logic = 8) - вот с этого и надо начинать. Может там один hot-spot весь дизайн?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да тут и искать не надо - ясно же говорит анализатор (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;

Изменено пользователем evgenz

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

анализатор всеровну пишет (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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

погодите погодите....

А регистры вставляются просто так? У них нет клока по которому они защелкивают данные с выхода одного модуля, чтобы они стали верными для входы другого уже через клок? Если нет, то какой в них смысл...

 

если у вас выход одного модуля идет на вход другого, то вы выход первого заводите на регистр, каждый такт на этом регистре защелкиваете результат, а уже этот регистр подаете на вход второго модуля, в таком раскладе у вас будет быстрее. а так вы просто проводов добавили....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

PSS/ Посмотрел путь, если есть возможность, то я бы поставил промежуточные регистры сюда XCORRELATOR/XKANAL17/XBLOC_REG_NKAN/XREGOS/QOUT* и сюда XCORRELATOR/XKANAL17/KT* - при этом я не нашел RTL для XREGOS.

Роман а что значит RTL для XREGOS, под RTL что подразумевается

И почему на эти цепи ставить промежуточный регистр, по какому принципу вы их определили??? я так думал что нужно промежуточные цепи ставить где в отчете (fanout=68) большой или я не прав??

 

если у вас выход одного модуля идет на вход другого, то вы выход первого заводите на регистр, каждый такт на этом регистре защелкиваете результат, а уже этот регистр подаете на вход второго модуля, в таком раскладе у вас будет быстрее. а так вы просто проводов добавили....

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

Изменено пользователем evgenz

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да тут и искать не надо - ясно же говорит анализатор (Levels of Logic = 8) - вот с этого и надо начинать.

просто любопытство, а где он это говорит? :)

Например в квартусе...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

значит внутри модулей у вас задержки.

у вас нет модуля с длиннющими входными данными?

есть входная 32-битная шина, и шина адреса на 24 бита, вот эти шины дальше ветвятся по всем модулям, если вы это имеете ввиду.

также есть разные управляющие битики, но все эти данные и шины проходят через промежуточные регистры

 

просто любопытство, а где он это говорит? :)

Например в квартусе...

такой отчет я получил в Timing Analyzer, там и написано что (Levels of Logic = 8)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

есть входная 32-битная шина, и шина адреса на 24 бита, вот эти шины дальше ветвятся по всем модулям, если вы это имеете ввиду.

также есть разные управляющие битики, но все эти данные и шины проходят через промежуточные регистры

Ищите либо коммутатор шин. Это то место, где выходы разных регистров коммутируются на общую шину для чтения хостом...

Либо, что более вероятно, это дешифратор адреса для выработки чип-селекта. В этом случае, от полной дешифрации надо переходить к частичной. Тогда будет меньше каскадов логики задействовано.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Роман а что значит 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 ну и последний то, что осталось. Я не знаю что у Вас там внутри и как это работает, но если можно все разделить это регистрами при отсутствии обратной связи, то конкретно этот путь будет удовлетворять временным требованиям. И, кстати говоря, судя по путям в отчете - это и есть межмодульные порты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ищите либо коммутатор шин. Это то место, где выходы разных регистров коммутируются на общую шину для чтения хостом...

Либо, что более вероятно, это дешифратор адреса для выработки чип-селекта. В этом случае, от полной дешифрации надо переходить к частичной. Тогда будет меньше каскадов логики задействовано.

по поводу комутатора я его давно разбил, было вот так

 

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 это и есть адрес и он особо не дешифрируется?? но я в проекте не где не видел больших дешифраторов

Изменено пользователем evgenz

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. UG612 (v 13.4). Страница 234.

2. Как уже советовали, упрощайте свой проект, разбивайте на отдельные части(подробнее с примером в UG612).

3. Некоторые IP-ядра от Xilinx имеют такую настройку как Clock Latency - увеличивая количество шагов конвейера Вы увеличиваете результирующую тактовую частоту. Порой не стоит пытаться сделать что-либо за один такт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...