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

 
 
 
Reply to this topicStart new topic
> Как подключить несколько DCM к одному генератору, Для ПЛИС Xilinx Virtex4, среда ISE 10.1
Alexandr
сообщение Sep 22 2009, 09:08
Сообщение #1


Знающий
****

Группа: Модераторы
Сообщений: 804
Регистрация: 1-12-04
Пользователь №: 1 283



Как-то раньше не требовалось использовать больше одного DCM. А тут мне нужно стало два DCM использовать. При этом тактовый генератор внешний всего один. При подключении выхода генератора на вход сразу двух DCM выскакивает ошибка. Которая не исчезает при установке буферов. Также не помогает брать синхросигнал с выхода одного DCM на вход другого. Среди ядер есть конечно каскадный DCM из 2-х элементов, но хотелось бы разобраться как использовать несколько независимых DCM. По логике должен быть элемент для разделения глобального синхросигнала на несколько цепей, но я что-то его не нахожу.


--------------------
Иван Сусанин - первый полупроводник
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Sep 22 2009, 09:21
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Если бы вы привели сами ошибки, то сделать предположение об источнике проблем стало бы легче.
Go to the top of the page
 
+Quote Post
Alexandr
сообщение Sep 22 2009, 09:39
Сообщение #3


Знающий
****

Группа: Модераторы
Сообщений: 804
Регистрация: 1-12-04
Пользователь №: 1 283



Вот текст ошибки:
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


--------------------
Иван Сусанин - первый полупроводник
Go to the top of the page
 
+Quote Post
dmitry-tomsk
сообщение Sep 22 2009, 09:54
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 672
Регистрация: 18-02-05
Пользователь №: 2 741



Цитата(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 никто не запрещал
Go to the top of the page
 
+Quote Post
Alexandr
сообщение Sep 22 2009, 10:01
Сообщение #5


Знающий
****

Группа: Модераторы
Сообщений: 804
Регистрация: 1-12-04
Пользователь №: 1 283



Первое что сделал - это поставил на входной пин буфер IBUFG. Ошибка не исчезла просто в ней речь уже шла о выходе этого самого буфера вместо С19.


--------------------
Иван Сусанин - первый полупроводник
Go to the top of the page
 
+Quote Post
Apast
сообщение Sep 22 2009, 10:30
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 224
Регистрация: 22-06-04
Из: Новосибирск
Пользователь №: 87



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

Вообще у DCM есть выход CLKIN_IBUFG_OUT. С него можно взять сигнал и завести на следующий DCM.
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Sep 22 2009, 10:34
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Надо в пропертях DCM убрать инстанциирование IBUFG на CLKIN.
Go to the top of the page
 
+Quote Post
Alexandr
сообщение Sep 22 2009, 12:03
Сообщение #8


Знающий
****

Группа: Модераторы
Сообщений: 804
Регистрация: 1-12-04
Пользователь №: 1 283



Насчет 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 я чего-то не нашел.


--------------------
Иван Сусанин - первый полупроводник
Go to the top of the page
 
+Quote Post
Apast
сообщение Sep 22 2009, 12:36
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 224
Регистрация: 22-06-04
Из: Новосибирск
Пользователь №: 87



Цитата(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 не вставляется.
Go to the top of the page
 
+Quote Post
MKS
сообщение Sep 22 2009, 12:42
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 469
Регистрация: 13-03-05
Пользователь №: 3 315



Попробуйте поставить источник тактового сигнала для DCM как внутрений (смотри рис.).
Прикрепленное изображение
Go to the top of the page
 
+Quote Post
Костян
сообщение Sep 22 2009, 13:20
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059



Цитата(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);
Go to the top of the page
 
+Quote Post
Alexandr
сообщение Sep 22 2009, 13:20
Сообщение #12


Знающий
****

Группа: Модераторы
Сообщений: 804
Регистрация: 1-12-04
Пользователь №: 1 283



Заработало. Всем спасибо за помощь. Действительно - поставил в обоих DCM галку на внутренний источник тактового сигнала. А тактовый сигнал с пина серез IBUFG подключил к первому DCM, а на второй DCM сигнал беру с выхода CLK0_OUT первого DCM.


--------------------
Иван Сусанин - первый полупроводник
Go to the top of the page
 
+Quote Post
dmitry-tomsk
сообщение Sep 22 2009, 13:38
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 672
Регистрация: 18-02-05
Пользователь №: 2 741



Цитата(Alexandr @ Sep 22 2009, 17:20) *
Заработало. Всем спасибо за помощь. Действительно - поставил в обоих DCM галку на внутренний источник тактового сигнала. А тактовый сигнал с пина серез IBUFG подключил к первому DCM, а на второй DCM сигнал беру с выхода CLK0_OUT первого DCM.

При таком подходе нужно сброс второй DCM делать через сигнал locked первой, все же проще с ibufg на входы clkin обоих DCM
Go to the top of the page
 
+Quote Post
Alexandr
сообщение Sep 22 2009, 13:46
Сообщение #14


Знающий
****

Группа: Модераторы
Сообщений: 804
Регистрация: 1-12-04
Пользователь №: 1 283



dmitry-tomsk Вы меня опередили. Я уже помоделировал и пришел к такому же выводу.


--------------------
Иван Сусанин - первый полупроводник
Go to the top of the page
 
+Quote Post

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

 


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


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