Я прорабатывал проект съема данных с CCD линейки CCD143A("Refract 14 jan 2011.rar").
Предполагалось использовать похожий АЦП(ADS6242) и Spartan3E.
В архиве две платы(эскизы PCAD2006) одна для линейки, вторая АЦП и ПЛИС.
В третьей папке проект для ПЛИС(ISE 10.2).
Объем данных с линейки небольшой.
Предполагалось что ПЛИС управляется по SPI.
Командами по SPI должно было производится чтение линейки в буфер Внутри ПЛИС и получение данных их буфера по SPI.
В проекте есть описание ПЛИС, модель АЦП и тестбенч для проверки.
Для использования LVDS I/O нужно в проекте использовать примитивы(adc_data_interface.v).
Для выходов, входов буферов и т.д.
Код
// Трансляция тактирования от кварца на АЦП
OBUFDS #(.IOSTANDARD("LVDS_25")) lvds_clk_obuf
(
.I(crystal_clk),
.O(adc_clkp),
.OB(adc_clkm)
);
...
// Входной буфер побитового тактирования с АЦП
IBUFGDS #(.IOSTANDARD("LVDS_25"), .IBUF_DELAY_VALUE("0"), .DIFF_TERM("TRUE")) lvds_bit_clk_ibuf (.I(adc_bit_clkp), .IB(adc_bit_clkm), .O(bit_clk) );
...
// Входные буфера данных с АЦП
IBUFDS #(.IOSTANDARD("LVDS_25"), .IFD_DELAY_VALUE("0"), .DIFF_TERM("TRUE")) lvds_bit_a0_ibuf (.I(adc_da0_p), .IB(adc_da0_m), .O(inv_bit_A0) );
...
// Входные DDR регистры данных
IDDR2
#(.DDR_ALIGNMENT("C0")) fd_io_0 (.C0(rxclk_dcm), .C1(rxclk_dcm_180), .D(inv_bit_A0), .CE(1'b1), .R(1'b0), .S(1'b0), .Q0(data_in_reg_A0[0]), .Q1(data_in_reg_A0[1]));
Банк где используются LVDS нужно запитать от 2,5V.
В противном случае
.DIFF_TERM("TRUE") вызовет ошибку.
При синтезе проекта нужно обязательно назначить выводы в ucf файле.
И "перетасовать" их под PCB.
Как ни странно, некоторые дифференциальные входы не имеют внутреннего терминирующего резистора.