Перейти к содержанию
    

1. Модуль align_pll в нормальном режиме без всяких сдвигов?

Да, проект с одним каналом и pll приаттачил.

2. Фронт входных частоты и первой посылки данных совпадает или изначально смещен и если смещен, то почему это не отображается в ограничениях и нет на временной диаграмме?

 

Изначально смещён. Я дубина, выложил не тот sdc... Поправил в том посте. Теперь понятно?

3. -clock_fall -это что за ограничение, забыл? :wacko:

Это говорит TQ, что input_delay применяется к заднему фронту клока.

deserializer_ddio_pll.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Между прочим, пробовали собрать проект без привязки сигналов к пинам? Вдруг там какой-нибудь сигнал попадает на неподходящий пин.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Между прочим, пробовали собрать проект без привязки сигналов к пинам?

Мы её (или она нас???) испробовали уже во всех позициях, поверьте...

 

Резюмирую: проект мы таки завели на 65 МГц, но не на ddio, из чего сделали вывод что благословенные ddio в Arria II GX не работают на частоте 65*12/2 =390МГц.

Аналогичная ситуация со стратиксами 3-4 и даже Arria II GZ на частоте 80*12/2 =480МГц DDR, согласно сведениям TQ.

А теперь для истории, и вообще, может кому-то окажется полезно, расскажу как завели.

Код для десериализатора переписали вот так:

module adc_deserializer(s_adc_clk, s_adc_frame, s_adc_data, adc_data, en_adc_data);

parameter    WIDTH_ADC_DATA = 12;//ширина шины данных АЦП

input    s_adc_clk;
input    s_adc_frame;
input    s_adc_data;
output    [WIDTH_ADC_DATA-1:0]adc_data;
output    en_adc_data;

reg n_in_rx, in_rx_p, in_rx_n;
reg [WIDTH_ADC_DATA/2-1:0]pos_shift_reg, odd_data;
reg [WIDTH_ADC_DATA/2-1:0]neg_shift_reg, evn_data;
reg en_adc_frame, en_odd_data, en_evn_data;

wire s_adc_clk;
reg en_adc_data;
wire [WIDTH_ADC_DATA-1:0]adc_data;

genvar i;
generate for(i=0; i<WIDTH_ADC_DATA/2; i=i+1) begin: assign_adc_data
        assign adc_data[2*i+1:2*i] = {odd_data[i], evn_data[i]};
    end
endgenerate

always @(posedge s_adc_clk) begin
    pos_shift_reg <= {pos_shift_reg, in_rx_p};
    neg_shift_reg <= {neg_shift_reg, in_rx_n};
    en_adc_frame <= s_adc_frame;
    en_odd_data <= en_adc_frame;
    en_evn_data <= en_odd_data;
        en_adc_data <= !en_odd_data;
    if(en_adc_frame && !en_odd_data)
        odd_data <= pos_shift_reg;
    if(en_odd_data && !en_evn_data)
        evn_data <= neg_shift_reg;
end//always

always @(posedge s_adc_clk) begin
    in_rx_p <= s_adc_data;
    in_rx_n <= n_in_rx;
end//always

always @(negedge s_adc_clk) begin
    n_in_rx <= s_adc_data;
end
//always
endmodule

 

То бишь сделали двухфронтовый защёлкиватель, но без ddio c реализацией на логике.

 

Кажный канальчик объединили в общий 8-канальный десериализатор:

module adc_deserializers(s_adc_clk, s_adc_frame, s_adc_data, adc_data, en_adc_data);

parameter NUM_CHANNEL = 8;//Количество каналов
parameter WIDTH_ADC_DATA = 12;//Ширина шины данных АЦП

input    s_adc_clk;
input    s_adc_frame;
input    [NUM_CHANNEL-1:0]s_adc_data;
output    [WIDTH_ADC_DATA*NUM_CHANNEL-1:0]adc_data;
output    [NUM_CHANNEL-1:0]en_adc_data;



adc_deserializer #(
        .WIDTH_ADC_DATA(WIDTH_ADC_DATA))
    adc_deserializer[NUM_CHANNEL-1:0](
        .s_adc_clk(s_adc_clk),
        .s_adc_frame(s_adc_frame),
        .s_adc_data(s_adc_data),
        .adc_data(adc_data),
        .en_adc_data(en_adc_data));

endmodule

 

TQ сказал

+------------------------------------+
; Fast 900mV 0C Model Setup Summary;
+------------+-------+---------------+
; Clock; Slack; End Point TNS;
+------------+-------+---------------+
; clk_480MHz; 0.125; 0.000;
+------------+-------+---------------+


+------------------------------------+
; Fast 900mV 0C Model Hold Summary;
+------------+-------+---------------+
; Clock; Slack; End Point TNS;
+------------+-------+---------------+
; clk_480MHz; 0.135; 0.000;
+------------+-------+---------------+

Далее воткнули этот кусочек десериалайзера в общий проект - полезли отрицательные слаки.

Из положения вышли, создав для десериалайзера каждого канала Design Partition, и воткнув их Post-fit в основной проект.

Запас по слакам стал меньше, но жить тем не менее можно.

 

Спасибо всем, кто пытался помочь!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...