2016년 1월 17일 일요일

[Xilinx] Reset Design 구현 시 꼭 고려하여야 할 ASYNC_REG

Reset Design 구현 시 꼭 고려하여야 할 ASYNC_REG에 대하여 알아보겠습니다.

Xilinx FPGA를 사용함에 있어 Reset Active High를 recommend한다.
하지만, PLL과 MMCM의 LOCK signal은 Low에서 clock output의 정상적인 동작이 되는 시점에 High가 된다. 이를 User Logic의 reset과 연동할 때, Low에서 High로 바뀌는 Lock signal을 High에서 Low가 되는 signal로 변경하여야 Reset Active High의 구조가 된다.
이 때, 아래의 code를 이용하여 사용하면 된다.


attribute ASYNC_REG : string;
signal sync_regs : std_logic_vector(2 downto 0);
attribute ASYNC_REG of sync_regs: signal is "TRUE";

process(clk)
begin
if rising_edge(clk) then
sync_regs <= sync_regs [1:0] & (not locked_pll);
end if;
end process;

reset <= sync_regs(2);


여기서 ASYNC_REG를 사용하지 않으면 위 Logic은 LUT의 shift-register로 구현된다.


지금까지 Reset Design 구현 시 꼭 고려하여야 할 ASYNC_REG에 대하여 알아보았습니다.

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 구현 방법을 알아보았습니다.

2016년 1월 5일 화요일

[Xilinx] Xilinx가 제공하는 FPGA의 Orcad library가 있는가?

Xilinx FPGA를 사용하여 PCB 회로도 작성 시, Xilinx가 제공하는 Orcad Library가 있으면 좋겠다라는 생각을 많이 한다.

하지만, Xilinx는 Orcad library를 제공하지 않는다.
내가 직접 만들어서 사용하여야 한다. 국내의 Hardware 개발자들의 모임이 있다면 이러한 Orcad Library를 공유하면 얼마나 좋을까...하는 생각을 하여본다.

어쨌든 그 모든 것은 돈으로 해결을 할 수 있다는 것에 위안을 삼는다.
아래의 사이트를 가면 Orcad Library를 구할 수 있다. 물론 유료라는 점......
SchematicSymbol.com



[Xilinx] ISERDES를 이용한 1:7 Rx-LVDS 구현시 Reset과 Bitslip의 문제

ISERDES를 사용하여 1:7 Rx-LVDS를 구현하여 테스트 중에 문제가 발생했다.


Bitslip을 이용하여 내가 원하는 7 bits parallel data 값으로 정렬이 되었다.....
정확히 3번의 Bitslip으로...
그런데 Reset을 하면 Bitslip 3번에 원하는 7 bits parallel data 값으로 정렬이 되지 않는 문제가 발생했다......으~~~악
문제가 무엇일까?
엄청 고민하고 테스트를 한 결과 드디어 문제를 해결하였다....ㅎㅎ
Reset Sequence에 무언가를 하여야 한다.


결론은 .... 다음과 같다.
RX-LVDS 구현시,
1x,7x clock을 구현하는 PLL의 Lock을 RESET과 연동하지 않으면, Reset을 할 때 마다 Bitslip이 틀어지는 문제가 발생하였다.
그와는 별개로 다른 하위 디자인 블럭의 리셋 스킴과 연동될 경우에 가끔 LVDS동작에 문제(고정된 bitslip과 iodelay value일 경우 타이밍 맞추어진 부분이 틀어지는)를 일으키는 경우가 있는 것으로 보인다.
이 경우에는 전체 리셋이 release된 이 후에 LVDS control logic에 다시 리셋이 되었다가 release되는 로직을 구성하면 된다.



2015년 10월 31일 토요일

[ 관심 ] 3D 프린터

미래학에서는 구글 이미지 파일이 50만 개면 기술이 소멸하지 않는다고 본다. 파일이 500만 개면 10년 남은 것이고, 5억 개면 이미 우리 곁에 온 것으로 판단한다. 9월 20일 ‘3D print’로 검색한 결과 8390만 개의 3D프린터 이미지 파일이 있다. 대략 6년 후면 집집마다 3D프린터를 보유하고 제품을 직접 인쇄하는 모습이 일상이 될 수도 있다.
Thingiverse(미국, thingiverse.com): 3D프린터 제조사 스트라타시스가 운영하며, 무료로 3D 모델 데이터를 공유할 수 있다.
Cubify.com(미국, cubify.com): 취미 요소가 강하며, 큐브 시리즈 3D프린터로 출력할 수 있는 모델들을 다운로드할 수 있다.
CGTrader(리투아니아, cgtrader.com): 전문가용 3D 모델 데이터를 판매한다. 출품자와 가격 협상을 할 수 있다.
Yeggi(독일, yeggi.com): 3D 프린팅이 가능한 무료 데이터가 많고, 검색하기도 쉽다.
FABforall(스위스, fabforall.com/home): 3D 모델 데이터나 프린트 서비스 정보를 제공한다.
Sculpteo(프랑스, sculpateo.com/en): 고품질의 3D 프린팅이 가능한 모델 데이터가 올라온다.
Shapeways(네덜란드, shapeways.com): 유럽의 전자 전문 업체 필립스가 투자한 네덜란드 벤처 회사다. 3D 프린팅 기술을 내세워 사용자들이 원하는 디자인 그대로 입체 모형을 제작해 제공한다. 디자이너나 아티스트, 일반인이 올려놓은 작품을 3D 프린팅해 구입할 수도 있다. 판매가격은 디자이너가 정하고, 세이프웨이스와 수익을 배분한다. 10만 개의 개인 숍과 디자이너들이 입점해 있다.

[ Xilinx ] Block memory의 initial value를 설정하는 MIF file 양식입니다

Xilinx BRAM IP를 생성시 Memory의 initial value가 필요로 하는 경우 *.MIF file이 필요합니다.
아래는 Block memory의 초기값을 설정하는 MIF file 양식입니다.
1024 line x 12bit 일 경우 아래와 같이 구성하면 됩니다.

000010111001
000010101110
000010101101
011101100011
000010101011
011101100101
011101100110
011101000111
000010100111
…..



2014년 10월 9일 목요일

[ Xilinx ] MIG에서 Memory controller efficiency를 올리기 위한 방법

Xilinx Memory Controller IP인 MIG를 사용함에 있어 지금보다 efficiency를 더 높이고 싶은 경우가 있습니다.
메모리의 write & read 효율을 올리기 위하여 다음의 사이트를 내용을 보면 됩니다.