Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SerDes. Клок в одном банке, данные в другом
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Nivovod
Есть макетная плата с ПЛИС Kintex7 и есть макетная плата АЦП с последовательным выходом. Проблема в том, что клок с платы АЦП попадает в один банк плис, а сами последовательные данные в другой. Использую ядро SerDes и при синтезе в ISE 14.3 выдается ошибка 1073, указывающая на этот косяк. Как победить проблему?
svedach
Попробуйте самостоятельно сделать на сдвиговом регистре. Может удастся обойти проблему...
Сам делал так:
CODE
module ADCDeser(ADCBitClk,
FR,
SerData, DeSerData, DeSerDataA);

input ADCBitClk;
input FR;
input SerData;
output [15:0] DeSerData;
output DeSerDataA;

//Т.к. данные от АЦП идут последовательно и по двум фронтам, разделяем данные по фронту и по спаду
wire SerDataP;
wire SerDataN;
//Защелкивание разделенных данных в регистры
reg SerDataPReg;
reg SerDataNReg;
//Сдвиговый регистр данных
reg [15:0] DeSerDataShReg;
//Формирование строба записи десериализованных данных в выходной регистр
reg FRReg;
reg DataADly;
reg DataA;
//Выходные десереализованные данные
reg [15:0] DeSerData;
reg DeSerDataA;


initial
begin
SerDataPReg <= 0;
SerDataNReg <= 0;
DeSerDataShReg <= 0;
FRReg <= 0;
DataADly <= 0;
DataA <= 0;
DeSerData <= 0;
DeSerDataA <= 0;
end

IDDR2 #(
.DDR_ALIGNMENT("NONE"), // Sets output alignment to "NONE", "C0" or "C1"
.INIT_Q0(1'b0), // Sets initial state of the Q0 output to 1'b0 or 1'b1
.INIT_Q1(1'b0), // Sets initial state of the Q1 output to 1'b0 or 1'b1
.SRTYPE("SYNC") // Specifies "SYNC" or "ASYNC" set/reset
) IDDR2_inst (
.Q0(SerDataP), // 1-bit output captured with C0 clock
.Q1(SerDataN), // 1-bit output captured with C1 clock
.C0(ADCBitClk), // 1-bit clock input
.C1(~ADCBitClk), // 1-bit clock input
.CE(1'b1), // 1-bit clock enable input
.D(SerData), // 1-bit DDR data input
.R(1'b0), // 1-bit reset input
.S(1'b0) // 1-bit set input
);

always @(posedge ADCBitClk) SerDataPReg <= SerDataP;
always @(negedge ADCBitClk) SerDataNReg <= SerDataN;

always @(posedge ADCBitClk)
begin
FRReg <= FR;
DataA <= (FRReg ^ FR) && (FR);
DataADly <= DataA;
end

always @(posedge ADCBitClk)
begin
DeSerDataShReg <= (DataADly) ? {14'h0000, SerDataPReg, SerDataNReg} : {DeSerDataShReg[13:0], SerDataPReg, SerDataNReg};
end

always @(posedge ADCBitClk)
begin
DeSerData <= (DataADly) ? DeSerDataShReg : DeSerData;
DeSerDataA <= DataADly;
end

endmodule
dsmv
Можно завести тактовый сигнал на глобальный буфер и использовать примитивы ISERDES.





Bad0512
Цитата(Nivovod @ Feb 25 2013, 23:19) *
Есть макетная плата с ПЛИС Kintex7 и есть макетная плата АЦП с последовательным выходом. Проблема в том, что клок с платы АЦП попадает в один банк плис, а сами последовательные данные в другой. Использую ядро SerDes и при синтезе в ISE 14.3 выдается ошибка 1073, указывающая на этот косяк. Как победить проблему?

Данных маловато. Какая частота клока? Как передаются данные (SDR или DDR)? На какой тип клоковых пинов заведен клок (MRCC/SRCC или GC) ? Клоковая инфраструктура у Кинтекса довольно хитрая, поэтому возможно несколько разных решений. Всё зависит от исходных данных.
Nivovod
Спасибо за отклики!

Свой serdes я уже сам конечно написал, но он нормально работает до частоты 160МГц, а мне надо 400МГц. Данные идут по обоим фронтам (DDR), по двум каналам одновременно. Клок заведен на SRCC.
Bad0512
Цитата(Nivovod @ Feb 27 2013, 20:38) *
Спасибо за отклики!

Свой serdes я уже сам конечно написал, но он нормально работает до частоты 160МГц, а мне надо 400МГц. Данные идут по обоим фронтам (DDR), по двум каналам одновременно. Клок заведен на SRCC.

Прочитайте документ ug472. Ключевые слова BUFMR,BUFIO,BUFR.
Все решаемо.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.