Xilinx - 7 - SelectIO - ISERDESE 2 - 직렬 및 변환기
4888 단어 FPGA 개발 기술
http://mp.weixin.qq.com/mp/homepage?__biz=MzU3OTczMzk5Mg==&hid=7&sn=ad5d5d0f15df84f4a92ebf72f88d4ee8&scene=18#wechat_redirect --------------------------------------------------------------------------------------------------------------------------
1. ISERDESE 2 안내
ISERDESE 2 는 문자열 을 완성 하고 변환 할 때 불필요 한 순서 상의 문 제 를 가 져 오지 않 아 고속 소스 동기 화 응용 에 적합 하 다.예 를 들 어 카메라 데이터.
전용 스 트 링 기/스 트 링 및 컨버터: 고속 데이터 전송 을 완료 할 수 있 으 며 FPGA 엔 드 가 데이터 주파수 와 일치 하지 않 아 도 됩 니 다. 이 컨버터 는 SDR (single data rate) 과 DDR (double data rate) 을 지원 합 니 다.SDR 모드 는 2 -, 3 -, 4 -, 5 -, 6 -, 7 -, 8bit 폭 을 지원 합 니 다.DDR 모드 는 4 -, 6 -, 8 - bit 폭 을 지원 합 니 다.10 또는 14 - bit 는 두 개의 직렬 연결 이 필요 합 니 다.
Bitslip 서브 모듈: 이 서브 모듈 은 디자이너 가 입력 한 병렬 데 이 터 를 다시 배열 할 수 있 습 니 다.원본 동기 화 tranining 에 사용 할 수 있 습 니 다.strobe - based 저장 인터페이스 지원
테스트 프로그램
이번 에는 SDR 모드 6bit 비트 폭 을 테스트 로 선택 했다.필요 한 시 계 는 PLLE 2BASE 에서 데이터 가 IDELAYE 2 를 통 해 ISERDES 2 에 입력 됩 니 다.
ISERDESE2 #(
.DATA_RATE("SDR"), // DDR, SDR
.DATA_WIDTH(6), // Parallel data width (2-8,10,14)
.DYN_CLKDIV_INV_EN("FALSE"), // Enable DYNCLKDIVINVSEL inversion (FALSE, TRUE)
.DYN_CLK_INV_EN("FALSE"), // Enable DYNCLKINVSEL inversion (FALSE, TRUE)
// INIT_Q1 - INIT_Q4: Initial value on the Q outputs (0/1)
.INIT_Q1(1'b0),
.INIT_Q2(1'b0),
.INIT_Q3(1'b0),
.INIT_Q4(1'b0),
.INTERFACE_TYPE("NETWORKING"), // MEMORY, MEMORY_DDR3, MEMORY_QDR, NETWORKING, OVERSAMPLE
.IOBDELAY("NONE"), // NONE, BOTH, IBUF, IFD
.NUM_CE(1), // Number of clock enables (1,2)
.OFB_USED("FALSE"), // Select OFB path (FALSE, TRUE)
.SERDES_MODE("MASTER"), // MASTER, SLAVE
// SRVAL_Q1 - SRVAL_Q4: Q output values when SR is used (0/1)
.SRVAL_Q1(1'b0),
.SRVAL_Q2(1'b0),
.SRVAL_Q3(1'b0),
.SRVAL_Q4(1'b0)
)
ISERDESE2_inst (
.O(out), // 1-bit output: Combinatorial output
// Q1 - Q8: 1-bit (each) output: Registered data outputs
.Q1(Q1),
.Q2(Q2),
.Q3(Q3),
.Q4(Q4),
.Q5(Q5),
.Q6(Q6),
.Q7(Q7),
.Q8(Q8),
// SHIFTOUT1, SHIFTOUT2: 1-bit (each) output: Data width expansion output ports
.SHIFTOUT1(),
.SHIFTOUT2(),
.BITSLIP(BITSLIP), // 1-bit input: The BITSLIP pin performs a Bitslip operation synchronous to
// CLKDIV when asserted (active High). Subsequently, the data seen on the Q1
// to Q8 output ports will shift, as in a barrel-shifter operation, one
// position every time Bitslip is invoked (DDR operation is different from
// SDR).
// CE1, CE2: 1-bit (each) input: Data register clock enable inputs
.CE1(1'b1),
.CE2(1'b0),
.CLKDIVP(), // 1-bit input: TBD
// Clocks: 1-bit (each) input: ISERDESE2 clock input ports
.CLK(clk_high), // 1-bit input: High-speed clock
.CLKB(), // 1-bit input: High-speed secondary clock
.CLKDIV(clk_div), // 1-bit input: Divided clock
.OCLK(), // 1-bit input: High speed output clock used when INTERFACE_TYPE="MEMORY"
// Dynamic Clock Inversions: 1-bit (each) input: Dynamic clock inversion pins to switch clock polarity
.DYNCLKDIVSEL(1'b0), // 1-bit input: Dynamic CLKDIV inversion
.DYNCLKSEL(1'b0), // 1-bit input: Dynamic CLK/CLKB inversion
// Input Data: 1-bit (each) input: ISERDESE2 data input ports
.D(DATAOUT), // 1-bit input: Data input
.DDLY(), // 1-bit input: Serial data from IDELAYE2
.OFB(), // 1-bit input: Data feedback from OSERDESE2
.OCLKB(), // 1-bit input: High speed negative edge output clock
.RST(rest_ise), // 1-bit input: Active high asynchronous reset
// SHIFTIN1, SHIFTIN2: 1-bit (each) input: Data width expansion input ports
.SHIFTIN1(),
.SHIFTIN2()
);
assign outdata = {Q6,Q5,Q4,Q3,Q2,Q1};
3. 시 뮬 레이 션 결과
Bitslip 기능 을 사용 하지 않 는 시 뮬 레이 션 결과:
중간 에 bitslip 기능 을 켜 고 두 번 째 숫자 에서 자 리 를 잡 은 후 한 자 리 를 옮 겼 습 니 다:
메모: Bitslip 의 자 리 를 옮 기 는 것 은 첫 번 째 순환 이 아니 라 아 날로 그 데이터 순환 출력 일 뿐 입 니 다.