Цитата(Gorby @ Jun 22 2006, 12:42)

Это еще не весь ужас. Вот DCM по какой-либо причине вышел из синхронизации - и трындец, его надо ресетить. А если вы ресет не предусмотрели, то дизайн остановился. А предусмотреть ресет непросто. Нужен отдельный дополнительный клок.
Я счетчик ресета сажаю прямо на входной клок, с входа CLKIN. Если очень кумарит - можно через отдельный буфер, но у меня работает и так прекрасно.
Цитата(Gorby @ Jun 22 2006, 12:42)

И что-то типа супервизора.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity reset_fpga is
generic(
RST_ACTIVE: std_logic:='0'; -- Active reset level for scheme
RST_CNT_WIDTH: positive:=26 -- DLL reset counter width
-- Xilinx DLLs has different lock times in different modes
-- 26 is appropriate for any mode
-- if the DFS in not in use - 16 can be used instead
-- or smaller values to speed up simulation
-- (the simulation model of the DLL locks very fast)
);
port(
CLKIN: in std_logic; -- should be the clock BEFORE DLL
LOCKED: in std_logic; -- LOCKED output of the DLL
DLL_RST: out std_logic; -- DLL reset, active HIGH, SYNC to CLKIN
RST: out std_logic -- scheme reset, active LOW, ASYNC
);
end reset_fpga;
architecture rtl of reset_fpga is
signal CNT: std_logic_vector(RST_CNT_WIDTH-1 downto 0):=(others=>'0');
constant CNTZERO: std_logic_vector(RST_CNT_WIDTH-1 downto 4):=(others=>'0');
signal LOCKEDL: std_logic;
signal LOCKEDLPRE: std_logic;
signal DLL_RSTOUT: std_logic;
attribute ASYNC_REG : string;
attribute ASYNC_REG of LOCKEDLPRE: signal is "TRUE";
begin
process(CLKIN)
begin
if(rising_edge(CLKIN))then
LOCKEDLPRE<=LOCKED;
LOCKEDL<=LOCKEDLPRE;
CNT<=CNT+1;
if(CNT(RST_CNT_WIDTH-1 downto 4)=CNTZERO and LOCKEDL='0') then
DLL_RSTOUT<='1';
else
DLL_RSTOUT<='0';
end if;
end if;
end process;
DLL_RST<=DLL_RSTOUT;
process(LOCKEDL,DLL_RSTOUT)
begin
if(LOCKED='1' and DLL_RSTOUT='0') then
RST<=not RST_ACTIVE;
else
RST<=RST_ACTIVE;
end if;
end process;
end rtl;
Цитата(Gorby @ Jun 22 2006, 12:42)

У меня DCM останавливался в произвольный момент времени по причине плохой формы опорного клока - там ступенька посредине фронта была. Это разводчик в штангу дал. Ему было сказано Звездой развести клок на два чипа, а он их последовательно daisy chain сделал. Вот отражение и портило фронт тому чипу, что посредине.
Если бы сделали звездой - было бы IMHO еще хуже. Делаю последовательно, смотрю в HyperLynx, 100МГц проблем пока не было. Резисторов туда, ежели чего. Но еще лучше клок завести в FPGA, а с него после DLL уже вывести сколько надо повторенных клоков.