Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как подключить несколько DCM к одному генератору
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Alexandr
Как-то раньше не требовалось использовать больше одного DCM. А тут мне нужно стало два DCM использовать. При этом тактовый генератор внешний всего один. При подключении выхода генератора на вход сразу двух DCM выскакивает ошибка. Которая не исчезает при установке буферов. Также не помогает брать синхросигнал с выхода одного DCM на вход другого. Среди ядер есть конечно каскадный DCM из 2-х элементов, но хотелось бы разобраться как использовать несколько независимых DCM. По логике должен быть элемент для разделения глобального синхросигнала на несколько цепей, но я что-то его не нахожу.
DmitryR
Если бы вы привели сами ошибки, то сделать предположение об источнике проблем стало бы легче.
Alexandr
Вот текст ошибки:
NgdBuild:462 - input pad net 'C19' drives multiple buffers:
pin I on block XLXI_31/CLKIN_IBUFG_INST with type IBUFG,
pin I on block XLXI_304/XLXI_13/CLKIN_IBUFG_INST with type IBUFG

С19 - это пад на который поступает тактовый сигнал
XLXI_31 и XLXI_13 - это входы 2-х DCM.
Т.е. черным по белому сказано, что один тактовый сигнал не может напрямую поступать на входы 2-х и более DCM
dmitry-tomsk
Цитата(Alexandr @ Sep 22 2009, 12:39) *
Вот текст ошибки:
NgdBuild:462 - input pad net 'C19' drives multiple buffers:
pin I on block XLXI_31/CLKIN_IBUFG_INST with type IBUFG,
pin I on block XLXI_304/XLXI_13/CLKIN_IBUFG_INST with type IBUFG

С19 - это пад на который поступает тактовый сигнал
XLXI_31 и XLXI_13 - это входы 2-х DCM.
Т.е. черным по белому сказано, что один тактовый сигнал не может напрямую поступать на входы 2-х и более DCM

Вообще-то там сказано, что с одной ножки на два тактовых буфера нельзя. А с одного тактового буфера на две DCM никто не запрещал
Alexandr
Первое что сделал - это поставил на входной пин буфер IBUFG. Ошибка не исчезла просто в ней речь уже шла о выходе этого самого буфера вместо С19.
Apast
Цитата(Alexandr @ Sep 22 2009, 13:01) *
Первое что сделал - это поставил на входной пин буфер IBUFG. Ошибка не исчезла просто в ней речь уже шла о выходе этого самого буфера вместо С19.

Вообще у DCM есть выход CLKIN_IBUFG_OUT. С него можно взять сигнал и завести на следующий DCM.
DmitryR
Надо в пропертях DCM убрать инстанциирование IBUFG на CLKIN.
Alexandr
Насчет CLKIN_IBUFG_OUT тоже пробовал: выползает ошибка вида

NgdBuild:770 - IBUFG 'XLXI_31/CLKIN_IBUFG_INST' and BUFG 'xxx_BUFG' on
net 'xxx1' are lined up in series. Buffers of the same direction cannot be
placed in series.

'xxx' - это цепь связывающая выход одного DCM со входом другого.

Как убрать IBUFG из CLKIN я чего-то не нашел.
Apast
Цитата(Alexandr @ Sep 22 2009, 16:03) *
Насчет CLKIN_IBUFG_OUT тоже пробовал: выползает ошибка вида

NgdBuild:770 - IBUFG 'XLXI_31/CLKIN_IBUFG_INST' and BUFG 'xxx_BUFG' on
net 'xxx1' are lined up in series. Buffers of the same direction cannot be
placed in series.

'xxx' - это цепь связывающая выход одного DCM со входом другого.

Как убрать IBUFG из CLKIN я чего-то не нашел.

Я не совсем понимаю как вы и откуда используете DCM. Если смотреть библиотеку UNISIM модуль DCM то там нет ни каких глобальных
буфферов. Если вы генерите модуль COREGEN_ом то там есть выбор CLKIN EXTERNAL или INTERNAL, при CLKIN EXTERNAL он вставляет
IBUFG т.к. считается что сигнал идет с пина, а при CLKIN INTERNAL ни каких IBUFG не вставляется.
MKS
Попробуйте поставить источник тактового сигнала для DCM как внутрений (смотри рис.).
Нажмите для просмотра прикрепленного файла
Костян
Цитата(Alexandr @ Sep 22 2009, 11:03) *
Насчет CLKIN_IBUFG_OUT тоже пробовал: выползает ошибка вида

NgdBuild:770 - IBUFG 'XLXI_31/CLKIN_IBUFG_INST' and BUFG 'xxx_BUFG' on
net 'xxx1' are lined up in series. Buffers of the same direction cannot be
placed in series.

'xxx' - это цепь связывающая выход одного DCM со входом другого.

Как убрать IBUFG из CLKIN я чего-то не нашел.

с помощью генератора сделайте свою конфигурацию DCM. Затем снегерируйте из этой корки HDL описание . И во уже сам файл hdl можно править вдоль и поперек.
Такой способ дает наглядность,а не гадание на кофейной гуще, что там вставилось через GUI

Вот пример файла для инициализации DCM

Код
entity dcm_mod is
   port ( CLKIN_IN        : in    std_logic;
          RST_IN          : in    std_logic;
          CLKFX_OUT       : out   std_logic;
          CLKIN_IBUFG_OUT : out   std_logic;
          CLK0_OUT        : out   std_logic;
          CLK2X_OUT       : out   std_logic;
          CLK180_OUT      : out   std_logic;
          LOCKED_OUT      : out   std_logic);
end dcm_mod;

architecture BEHAVIORAL of dcm_mod is
   signal CLKFB_IN        : std_logic;
   signal CLKFX_BUF       : std_logic;
   signal CLKIN_IBUFG     : std_logic;
   signal CLK0_BUF        : std_logic;
   signal CLK2X_BUF       : std_logic;
   signal CLK180_BUF      : std_logic;
   signal GND_BIT         : std_logic;
   signal GND_BUS_7       : std_logic_vector (6 downto 0);
   signal GND_BUS_16      : std_logic_vector (15 downto 0);
begin
   GND_BIT <= '0';
   GND_BUS_7(6 downto 0) <= "0000000";
   GND_BUS_16(15 downto 0) <= "0000000000000000";
   CLKIN_IBUFG_OUT <= CLKIN_IBUFG;
   CLK0_OUT <= CLKFB_IN;
   CLKFX_BUFG_INST : BUFG
      port map (I=>CLKFX_BUF,
                O=>CLKFX_OUT);
  
   CLKIN_IBUFG_INST : IBUFG
      port map (I=>CLKIN_IN,
                O=>CLKIN_IBUFG);
  
   CLK0_BUFG_INST : BUFG
      port map (I=>CLK0_BUF,
                O=>CLKFB_IN);
  
   CLK2X_BUFG_INST : BUFG
      port map (I=>CLK2X_BUF,
                O=>CLK2X_OUT);
  
   CLK180_BUFG_INST : BUFG
      port map (I=>CLK180_BUF,
                O=>CLK180_OUT);
  
   DCM_ADV_INST : DCM_ADV
   generic map( CLK_FEEDBACK => "1X",
            CLKDV_DIVIDE => 2.0,
            CLKFX_DIVIDE => 4,
            CLKFX_MULTIPLY => 2,
            CLKIN_DIVIDE_BY_2 => FALSE,
            CLKIN_PERIOD => 10.000,
            CLKOUT_PHASE_SHIFT => "NONE",
            DCM_AUTOCALIBRATION => TRUE,
            DCM_PERFORMANCE_MODE => "MAX_SPEED",
            DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS",
            DFS_FREQUENCY_MODE => "LOW",
            DLL_FREQUENCY_MODE => "LOW",
            DUTY_CYCLE_CORRECTION => TRUE,
            FACTORY_JF => x"F0F0",
            PHASE_SHIFT => 0,
            STARTUP_WAIT => FALSE)
      port map (CLKFB=>CLKFB_IN,
                CLKIN=>CLKIN_IBUFG,
                DADDR(6 downto 0)=>GND_BUS_7(6 downto 0),
                DCLK=>GND_BIT,
                DEN=>GND_BIT,
                DI(15 downto 0)=>GND_BUS_16(15 downto 0),
                DWE=>GND_BIT,
                PSCLK=>GND_BIT,
                PSEN=>GND_BIT,
                PSINCDEC=>GND_BIT,
                RST=>RST_IN,
                CLKDV=>open,
                CLKFX=>CLKFX_BUF,
                CLKFX180=>open,
                CLK0=>CLK0_BUF,
                CLK2X=>CLK2X_BUF,
                CLK2X180=>open,
                CLK90=>open,
                CLK180=>CLK180_BUF,
                CLK270=>open,
                DO=>open,
                DRDY=>open,
                LOCKED=>LOCKED_OUT,
                PSDONE=>open);
  
end BEHAVIORAL;



а вот и глобал буфер

Код
CLKIN_IBUFG_OUT <= CLKIN_IBUFG;
   ...
CLKIN_IBUFG_INST : IBUFG
port map (I=>CLKIN_IN,
               O=>CLKIN_IBUFG);
Alexandr
Заработало. Всем спасибо за помощь. Действительно - поставил в обоих DCM галку на внутренний источник тактового сигнала. А тактовый сигнал с пина серез IBUFG подключил к первому DCM, а на второй DCM сигнал беру с выхода CLK0_OUT первого DCM.
dmitry-tomsk
Цитата(Alexandr @ Sep 22 2009, 17:20) *
Заработало. Всем спасибо за помощь. Действительно - поставил в обоих DCM галку на внутренний источник тактового сигнала. А тактовый сигнал с пина серез IBUFG подключил к первому DCM, а на второй DCM сигнал беру с выхода CLK0_OUT первого DCM.

При таком подходе нужно сброс второй DCM делать через сигнал locked первой, все же проще с ibufg на входы clkin обоих DCM
Alexandr
dmitry-tomsk Вы меня опередили. Я уже помоделировал и пришел к такому же выводу.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.