2016년 1월 10일 일요일

[Xilinx] UltraScale Device의 ODDR library를 이용한 clock output 구현 방법

일반적으로 Clock을 입력으로 받아서 출력으로 단순히 내보내는 경우에 ODDR llbrary를 사용하여 구현하는 것을 추천합니다. Register를 거쳐 출력으로 내보내는 Data와의 timing Sync.를 위한 좋은 방법이라고 생각합니다.

다음의 Library를 code에 넣어 사용하면 됩니다.

u1 : oddre1
generic map (
is_c_inverted => '0',  -- optional inversion for c
is_d1_inverted => '0', -- optional inversion for d1
is_d2_inverted => '0', -- optional inversion for d2
srval => '0'           -- initializes the oddre1 flip-flops to the specified value ('0', '1')
)
port map (
q => do,   -- 1-bit output: data output to iob
c => mmcm_clkout,   -- 1-bit input: high-speed clock input
d1 => '1', -- 1-bit input: parallel data input 1
d2 => '0', -- 1-bit input: parallel data input 2
sr => '0'  -- 1-bit input: active high async reset
);

아래는 RTL Schematic View로 살펴본 부분입니다. Old Device의 경우 ODDR을 사용하면 RTL View에서도 ODDR로 보여지는 것과 달리 UltraScale Device는 ODDR이 아닌 OSERDES를 사용한 것으로 보여집니다.


클릭하시면 큰 그림으로 볼 수 있습니다.

UltraScale Device를 사용할 경우, ODDR library에 대하여 보다 자세한 내용은 아래의 링크를 참고하세요.
UltraScale Architecture Libraries Guide UG974 (v2015.4) November 18, 2015 Page 308
UltraScale Architecture SelectIO Resources UG571 (v1.5) November 24, 2015 Page 152


아래의 링크를 클릭하면, 위 Design을 Vivado 2015.4로 구현한 Example Project file을 download 받을 수 있습니다.
example_clock_out


지금까지 ODDR library를 이용한 clock output 구현 방법을 알아보았습니다.

댓글 없음:

댓글 쓰기