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

 
 
 
Reply to this topicStart new topic
> Проблема с DCM, WARNING:Route:455
Strijar
сообщение Feb 2 2009, 22:58
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 28-08-06
Пользователь №: 19 892



Коллеги, дайте направление куда копать!

Дано Spartan-3E, снаружи приходит клок 50мгц (через обычную ногу) и выходит на sdram (тоже через обычную). Все работало пока не захотелось умножить частоту - до 80 (Синтезатор говорит можно до 95). При роутинге вылазит предупреждение

WARNING:Route:455 - CLK Net:sdram_clk_OBUF may have excessive skew because
0 CLK pins and 2 NON_CLK pins failed to route using a CLK template.

Естественно память глючит. Даже если умножать на 1. А если на sdram подать родной клок (не умноженый на 1) - работает. DCM сгенерил через coregen:

Код
library ieee;
use ieee.std_logic_1164.ALL;
use ieee.numeric_std.ALL;
library UNISIM;
use UNISIM.Vcomponents.ALL;

entity dcm 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;
          LOCKED_OUT      : out   std_logic);
end dcm;

architecture BEHAVIORAL of dcm 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 GND_BIT         : std_logic;
begin
   GND_BIT <= '0';
   CLKIN_IBUFG_OUT <= CLKIN_IBUFG;
   CLK0_OUT <= CLKFB_IN;

   CLKFX_BUFG_INST : BUFG
      port map (I=>CLKFX_BUF,
                O=>CLKFX_OUT);
  
   CLKIN_IBUFG_INST : IBUF
      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);
  
   DCM_SP_INST : DCM_SP
   generic map( CLK_FEEDBACK => "1X",
            CLKDV_DIVIDE => 2.0,
            CLKFX_DIVIDE => 5,
            CLKFX_MULTIPLY => 5,
            CLKIN_DIVIDE_BY_2 => FALSE,
            CLKIN_PERIOD => 20.000,
            CLKOUT_PHASE_SHIFT => "NONE",
            DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS",
            DFS_FREQUENCY_MODE => "LOW",
            DLL_FREQUENCY_MODE => "LOW",
            DUTY_CYCLE_CORRECTION => TRUE,
            FACTORY_JF => x"C080",
            PHASE_SHIFT => 0,
            STARTUP_WAIT => FALSE)
      port map (CLKFB=>CLKFB_IN,
                CLKIN=>CLKIN_IBUFG,
                DSSEN=>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=>open,
                CLK270=>open,
                LOCKED=>LOCKED_OUT,
                PSDONE=>open,
                STATUS=>open);
  
end BEHAVIORAL;


Констрейны:

Код
NET "clk" LOC = "p54";
NET "clk" TNM_NET = "clk";
TIMESPEC "ts_clkin" = PERIOD "clk" 50 MHz HIGH 50 %;

NET sdram* SLEW = fast;
NET sdram_clk SLEW = slow;


В top:

Код
    dcm_scm : entity dcm
        port map(
            clkin_in => clk,
            rst_in => '0',
            clkfx_out => clk_int,
            locked_out => clk_lock
        );

    int_res <= not clk_lock;
    sdram_clk <= clk_int;


Подскажите где чего смотреть и куда копать.
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Feb 2 2009, 23:25
Сообщение #2


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

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!

Проблема не в DCM а в задержках на роутинге клоков.

Я бы выходной клок на SDRAM сделал через выходной DDR регистр. Выход DCM через bufg подал на clk DDR, а на D-входы которых соответственно 1 и 0. Ну и наверное надо добавить CLKOUT_PHASE_SHIFT ="FIXED" и подобрать PHASE_SHIFT для корректной работы.

Успехов! Rob.
Go to the top of the page
 
+Quote Post
Strijar
сообщение Feb 3 2009, 00:03
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 28-08-06
Пользователь №: 19 892



Цитата(RobFPGA @ Feb 3 2009, 02:25) *
Проблема не в DCM а в задержках на роутинге клоков.


Спасибо за совет, но сами мы не местные из програмистов я в ПЛИС-ы подался. С задержками и тригерами только вот сейчас начал бодаться... Можно пример попросить? А еще лучше наводку - где почитать.

И не понятно - без DCM работает стабильно.

Сообщение отредактировал Strijar - Feb 3 2009, 00:04
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Feb 3 2009, 00:51
Сообщение #4


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

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!

Нужно правильно учитывать задержки распространения сигнала от входной ноги Clk_In к DCM, и от DCM к выходной ноге.
Если делать просто Clk_In => Clk_Out то задержка от DCM к выходу будет большой и меняется от разводки к разводке, так как прямого соединения нет, только через логику. В варианте с DDR задержка предсказуемая и постоянная так как используются соединения для глобального клока. Изменения задержки от входа к DCM компенсируется самим DCM хотя лучше привязать положение DCM поближе к входной ноге. Ну и подбирая значения PHASE_SHIFT можно получить требуемые временные параметры сигналов для SDRAM.

Если на скорую руку - то вот так. Я в VHDL не шибко писатель поэтому набросал в графике.

Для выхода Clk2x_Out лучше ставить NET Clk2x_Out SLEW = FAST | DRIVE = 16 или 24;
DDR регистр надо разместить в блоке IO.

По использованию DCM у Хilinx есть куча апнотов, поищите на сайте Xilinx.

Успехов! Rob.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Strijar
сообщение Feb 3 2009, 00:56
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 28-08-06
Пользователь №: 19 892



Еще раз спасибо! Оказалось достаточно если вместо sdram_clk => clk_int зацепить через BUFG - заработало! Предупреждение никуда не делось, но работает.
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Feb 3 2009, 01:00
Сообщение #6


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

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!

В варианте с DDR и предупреждений не будет rolleyes.gif

Успехов! Rob.
Go to the top of the page
 
+Quote Post

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

 


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


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