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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Отладка проектов
zomg
сообщение Feb 26 2011, 07:48
Сообщение #16


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 12-05-10
Пользователь №: 57 219



Цитата
То есть нужно 2 констрейна на каждый cross clock domain переход?

Чтобы ISE анализировал cross clock domain переходы, то в .ucf необходимо определить связь между клоками, например clk0 и clk1, таким образом:
Код
NET "clk0" TNM_NET = "SYS_clk0";
TIMESPEC "TS_SYS_clk0" = PERIOD "SYS_clk0" 5 ns HIGH 50 %;
NET "clk1" TNM_NET = "SYS_clk1";
TIMESPEC "TS_SYS_clk1" = PERIOD "SYS_clk1" "TS_SYS_clk0"*2 HIGH 50 %;

Здесь clk0 и clk1 приходят с внешних ножек. Констрейнты для клоков с выхода PLL и DCM будут прописаны ISE автоматически, за них беспокоиться не надо.
Go to the top of the page
 
+Quote Post
Boris_TS
сообщение Feb 26 2011, 08:57
Сообщение #17


Злополезный
****

Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188



Цитата(zomg @ Feb 26 2011, 10:48) *
Чтобы ISE анализировал cross clock domain переходы, то в .ucf необходимо определить связь между клоками, например clk0 и clk1, таким образом:
Код
NET "clk0" TNM_NET = "SYS_clk0";
TIMESPEC "TS_SYS_clk0" = PERIOD "SYS_clk0" 5 ns HIGH 50 %;
NET "clk1" TNM_NET = "SYS_clk1";
TIMESPEC "TS_SYS_clk1" = PERIOD "SYS_clk1" "TS_SYS_clk0"*2 HIGH 50 %;

Здесь clk0 и clk1 приходят с внешних ножек. Констрейнты для клоков с выхода PLL и DCM будут прописаны ISE автоматически, за них беспокоиться не надо.

1. При такой записи SYS_clk0 и SYS_clk1 будут для Timing Analyzer'а связаны по фазе, а в реальности этого может и не быть - не зря же они на разные входы подаются...
2. Для особоневерующих есть более интересный случай, если взять соотношение частот не 2, а, например, 1.01 - вот потеха начнётся...

Для тех, кому лень код писать, а покрутить гаечки хочется:
VHDL:
Код
library IEEE;
use IEEE.Std_Logic_1164.all;

Library UNISIM;
use UNISIM.vcomponents.all;

entity CLK is port (
    IN_D:    in    std_logic;
    IN_CLK:    in    std_logic_vector(1 downto 0);
    OUT_Q:    out    std_logic_vector(1 downto 0) );
end entity;


architecture Arc of CLK is
    signal    CLK_UB:    std_logic_vector(OUT_Q'Range);
    signal    CLK:    std_logic_vector(OUT_Q'Range);
    signal    D:        std_logic;
    signal    Q:        std_logic_vector(OUT_Q'Range) := (others => '0');
    
    attribute iob: string;
    attribute iob of Q: signal is "false";
begin
    D_IBUF: component IBUF port map ( I => IN_D, O => D );
    
    IO: for i in CLK'Reverse_Range generate
        CLK_IBUF: component IBUFG port map ( I => IN_CLK(I), O => CLK_UB(i) );
        CLK_BUFG: component BUFG  port map ( I => CLK_UB(I), O => CLK   (i) );
        Q_OBUF:   component OBUF  port map ( I => Q(I),      O => OUT_Q (i) );
    end generate;
    
    Q(0) <= D    when rising_edge(CLK(0));
    Q(1) <= Q(0) when rising_edge(CLK(1));
end architecture;

UCF:
Код
NET "IN_CLK<0>" TNM_NET = CLK0;
NET "IN_CLK<1>" TNM_NET = CLK1;
TIMESPEC TS_CLK_0 = PERIOD "CLK0" 5 ns          HIGH 50%;
TIMESPEC TS_CLK_1 = PERIOD "CLK1" TS_CLK_0*1.01 HIGH 50%;

Для ленивых результат от P&R:
Код
------------------------------------------------------------------------------------------------------
  Constraint                                |  Check  | Worst Case |  Best Case | Timing |   Timing  
                                            |         |    Slack   | Achievable | Errors |    Score  
------------------------------------------------------------------------------------------------------
* TS_CLK_1 = PERIOD TIMEGRP "CLK1" TS_CLK_0 | SETUP   |    -1.706ns|   177.356ns|       1|        1706
   * 1.01 HIGH 50%                          | HOLD    |     0.678ns|            |       0|           0
------------------------------------------------------------------------------------------------------
  TS_CLK_0 = PERIOD TIMEGRP "CLK0" 5 ns HIG | N/A     |         N/A|         N/A|     N/A|         N/A
  H 50%                                     |         |            |            |        |            
------------------------------------------------------------------------------------------------------

P.S. Вот с этим (метастабильностью) и развлекаются при cross clock domain переходах.
Go to the top of the page
 
+Quote Post
zomg
сообщение Feb 26 2011, 09:44
Сообщение #18


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 12-05-10
Пользователь №: 57 219



Цитата
1. При такой записи SYS_clk0 и SYS_clk1 будут для Timing Analyzer'а связаны по фазе, а в реальности этого может и не быть - не зря же они на разные входы подаются...

А если в этом случае разность фаз случайная, то что же делать?

Если схемы с такими клоками пересечь, то такая абра-кадабра получится...
Go to the top of the page
 
+Quote Post
Boris_TS
сообщение Feb 26 2011, 12:20
Сообщение #19


Злополезный
****

Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188



Цитата(zomg @ Feb 26 2011, 12:44) *
А если в этом случае разность фаз случайная, то что же делать?
Как что делать ?? - cross clock domain переход делать... для управляющих сигналов синхронизаторы делать, а для данных обычно надобно FIFO прилаживать.

Цитата(zomg @ Feb 26 2011, 12:44) *
Если схемы с такими клоками пересечь, то такая абра-кадабра получится...
Вот над этим и ломают головы люди умные... как бы оно так половчее сделать, чтобы безотказно работало, да еще и с меньшей задержкой данные передавало, и места бы чтобы поменьше занимало.

Вот и приходится ставить синхронизаторы для перехода с ClkX на ClkY, а чтобы MAP/P&R голову долго не ломали по дополнительному constaint'у накладывать приходится на каждое направления перехода (как я и писал ранее)... Да и в самих синхронизаторах constaint’ов разных по пачке, чтобы подавлялась метастабильность получше.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 11th July 2025 - 22:07
Рейтинг@Mail.ru


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