реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Как правильно описать интерфейс на DDR регистрах?
Dima_G
сообщение Nov 13 2015, 04:22
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699



Добрый день!

Не получается достичь более или менее приличной скорости при реализации DDR интерфейса.
Написал тестовый проект - по фронту выходного клока раз в 8 тактов выдается импульс по шине данных (в приложении диаграмма wave.png - результат симуляции в modelsim). Клок смещен в центр данных.

Пробую собрать в Quartus - на 200Мгц уже не вписываюсь во времянки на Arria 10! wacko.gif
Подскажите пожалуйста, где в закралась ошибка.

Исходник тестового модуля (для ddr_reg использовалась ALT_GPIO мегафункция):
Код
module test_sdc
(
    input  bit ref_clk,
    output bit clk_out,
    output bit data_out
);


// Generate reset signal for PLL
bit[3:0] reset_cntr = '0;
bit reset_pll;
always_ff @(posedge ref_clk) begin
    if (reset_cntr != '1)
        reset_cntr <= reset_cntr + 1'b1;
end
assign reset_pll = reset_cntr != '1;

// Generate clock and reset
bit reset_n, core_clk, out_clk;
pll pll_25_200
(
  .locked   ( reset_n   ),
  .outclk_0 ( core_clk  ), // phase 0 deg
  .outclk_1 ( out_clk   ), // phase 90 deg
  .refclk   ( ref_clk   ),
  .rst      ( reset_pll )
);

// Generate data signal
bit[2:0] data_cntr;
always_ff @(posedge core_clk) begin
if (!reset_n)
  data_cntr <= '0;
else
  data_cntr <= data_cntr + 1'b1;
end
assign data_flag = data_cntr == '1;

// Create DDR output for data and clock
ddr_reg ddr_data
(
  .ck      (core_clk),
  .din     ({1'b0, data_flag}),
  .pad_out (data_out)
);

ddr_reg clk_data
(
  .ck      (out_clk),
  .din     (2'b01),
  .pad_out (clk_out)
);

endmodule


Вот наложенные констрейны
Код
create_clock -period 25MHz [get_ports ref_clk]
derive_pll_clocks
derive_clock_uncertainty

create_generated_clock -name ext_clk_pin -source [get_pins pll_25_200|iopll_0|altera_pll_i|twentynm_pll|iopll_inst|outclk[1]] [get_ports {clk_out}]

set_output_delay -clock [get_clocks ext_clk_pin] -max  0.5 [get_ports data_out]
set_output_delay -clock [get_clocks ext_clk_pin] -min -0.5 [get_ports data_out]
set_output_delay -clock [get_clocks ext_clk_pin] -max  0.5 [get_ports data_out] -clock_fall -add_delay
set_output_delay -clock [get_clocks ext_clk_pin] -min -0.5 [get_ports data_out] -clock_fall -add_delay

set_false_path -setup  -fall_from pll_25_200|iopll_0|outclk0 -rise_to ext_clk_pin
set_false_path -setup  -rise_from pll_25_200|iopll_0|outclk0 -fall_to ext_clk_pin
set_false_path -hold   -fall_from pll_25_200|iopll_0|outclk0 -fall_to ext_clk_pin
set_false_path -hold   -rise_from pll_25_200|iopll_0|outclk0 -rise_to ext_clk_pin

set_false_path -from [all_clocks] -to [get_ports {clk_out}]


Приложил так же архив проекта и скриншот из TQ
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 

Прикрепленные файлы
Прикрепленный файл  test_sdc.qar.txt ( 89.15 килобайт ) Кол-во скачиваний: 20
 
Go to the top of the page
 
+Quote Post
Dima_G
сообщение Nov 13 2015, 13:37
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699



Провел эксперимент - собрал этот же проект для 3 циклона при помощи квартуса 13.0.
Естественно, пришлось пересоздать PLL и заменить ALTGPIO на ALTDDIO_OUT. Ну и в исходники пришлось внести небольшие изменения.
TQ не выявил ошибок - врямянки выполнимы (см. вложение).

Тестовый проект:
Код
module test_sdc
(
  input  bit ref_clk,
  output bit clk_out,
  output bit data_out
);

// Generate reset signal for PLL
bit[3:0] reset_cntr = '0;
bit reset_pll;
always_ff @(posedge ref_clk) begin
    if (reset_cntr != '1)
        reset_cntr <= reset_cntr + 1'b1;
end
assign reset_pll = reset_cntr != '1;

// Generate clock and reset
bit reset_n, core_clk, out_clk, core_clk_, out_clk_;

pll pll_25_200
(
  .locked   ( reset_n   ),
  .c0       ( core_clk  ), // phase 0 deg
  .c1       ( out_clk   ), // phase 90 deg
  .inclk0   ( ref_clk   ),
  .areset   ( reset_pll )
);

// Generate data signal
bit[2:0] data_cntr;
bit data_flag;
always_ff @(posedge core_clk) begin
  if (!reset_n)
    data_cntr <= '0;
  else
    data_cntr <= data_cntr + 1'b1;
end
assign data_flag = data_cntr == '1;

// Create DDR output for data and clock
ddr_reg ddr_data
(
  .datain_h ( 1'b0      ),
  .datain_l ( data_flag ),
  .outclock ( core_clk  ),
  .dataout  ( data_out  )
);

ddr_reg clk_data
(
  .datain_h ( 1'b0      ),
  .datain_l ( 1'b1      ),
  .outclock ( out_clk   ),
  .dataout  ( clk_out   )
);

endmodule


Констрейны:
Код
create_clock -period 25MHz [get_ports ref_clk]
derive_pll_clocks
derive_clock_uncertainty

create_generated_clock -name ext_clk_pin -source [get_pins clk_data|ALTDDIO_OUT_component|auto_generated|ddio_outa[0]|muxsel] [get_ports {clk_out}]

set_output_delay -clock [get_clocks ext_clk_pin] -max  0.5 [get_ports data_out]
set_output_delay -clock [get_clocks ext_clk_pin] -min -0.5 [get_ports data_out]
set_output_delay -clock [get_clocks ext_clk_pin] -max  0.5 [get_ports data_out] -clock_fall -add_delay
set_output_delay -clock [get_clocks ext_clk_pin] -min -0.5 [get_ports data_out] -clock_fall -add_delay

set_false_path -setup  -fall_from pll_25_200|altpll_component|auto_generated|pll1|clk[0] -rise_to ext_clk_pin
set_false_path -setup  -rise_from pll_25_200|altpll_component|auto_generated|pll1|clk[0] -fall_to ext_clk_pin
set_false_path -hold   -fall_from pll_25_200|altpll_component|auto_generated|pll1|clk[0] -fall_to ext_clk_pin
set_false_path -hold   -rise_from pll_25_200|altpll_component|auto_generated|pll1|clk[0] -rise_to ext_clk_pin

set_false_path -from [all_clocks] -to [get_ports {clk_out}]


Эскизы прикрепленных изображений
Прикрепленное изображение
 

Прикрепленные файлы
Прикрепленный файл  test_sdc_c3.qar.txt ( 21.86 килобайт ) Кол-во скачиваний: 15
 
Go to the top of the page
 
+Quote Post
MegaVolt
сообщение Nov 13 2015, 19:01
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 3-01-05
Из: Минск
Пользователь №: 1 783



1. Не очень понятно зачем сдвиг на пол такта клока и данных?

2. Не знаю как в Альтере но в Хилинх по моим прикидкам затащить что-то снаружи больше 250Мгц уже нужно ставить выравнивание фронтов.
Go to the top of the page
 
+Quote Post
des00
сообщение Nov 14 2015, 04:06
Сообщение #4


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Dima_G @ Nov 13 2015, 20:37) *
Провел эксперимент - собрал этот же проект для 3 циклона при помощи квартуса 13.0.
Естественно, пришлось пересоздать PLL и заменить ALTGPIO на ALTDDIO_OUT. Ну и в исходники пришлось внести небольшие изменения.
TQ не выявил ошибок - врямянки выполнимы (см. вложение).

Чего то там намучено в этих новых чипах. Вот похожая тема Смотрите полную информацию по путям : откуда пришли, через что идут, с какими задержками.


--------------------
Go to the top of the page
 
+Quote Post
Dima_G
сообщение Nov 16 2015, 04:02
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699



Цитата(MegaVolt @ Nov 14 2015, 01:01) *
1. Не очень понятно зачем сдвиг на пол такта клока и данных?
2. Не знаю как в Альтере но в Хилинх по моим прикидкам затащить что-то снаружи больше 250Мгц уже нужно ставить выравнивание фронтов.

Помочь фиттеру выполнить setup/hold соотношения.

Цитата(des00 @ Nov 14 2015, 10:06) *
Чего то там намучено в этих новых чипах. Вот похожая тема Смотрите полную информацию по путям : откуда пришли, через что идут, с какими задержками.

Смотрел пути в ChipPlanner - ясности не прибавилось. Почему-то набегает дикая (~3.5нс) задержка распространения сигнала до IO регистра.



Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Dima_G
сообщение Nov 16 2015, 06:43
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699



Попробовал собрать этот же проект для Cyclone 5 - та же проблема со слаками smile3046.gif

Эскизы прикрепленных изображений
Прикрепленное изображение
 

Прикрепленные файлы
Прикрепленный файл  test_sdc_c5.qar.txt ( 21.6 килобайт ) Кол-во скачиваний: 12
 
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Nov 16 2015, 11:27
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(Dima_G @ Nov 16 2015, 08:02) *
Почему-то набегает дикая (~3.5нс) задержка распространения сигнала до IO регистра.
Покажите отчёт TimeQuest по этому пути с включенным Show routing.
Go to the top of the page
 
+Quote Post
Dima_G
сообщение Nov 16 2015, 11:40
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699



Цитата(andrew_b @ Nov 16 2015, 17:27) *
Покажите отчёт TimeQuest по этому пути с включенным Show routing.


Прикрепленные файлы
Прикрепленный файл  test_sdc_Slow_900mV_100C_Model.txt ( 84.42 килобайт ) Кол-во скачиваний: 104
 
Go to the top of the page
 
+Quote Post
Dima_G
сообщение Nov 30 2015, 03:17
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699



Техподдержка Альтеры написала, что "такая частота слишком высокая для GPIO. Используйте мегафункцию PhyLite для реализации таких интерфейсов"
smile3046.gif
Go to the top of the page
 
+Quote Post
des00
сообщение Nov 30 2015, 03:35
Сообщение #10


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Dima_G @ Nov 30 2015, 10:17) *
Техподдержка Альтеры написала, что "такая частота слишком высокая для GPIO. Используйте мегафункцию PhyLite для реализации таких интерфейсов"
smile3046.gif

не знаю что они вам ответили. на 5 ой арии я свободно 400 МГц в ддре вытаскиваю наружу.

PS. Надеюсь вы CMOS/LVTTL режимы не поставили ? wink.gif


--------------------
Go to the top of the page
 
+Quote Post
Dima_G
сообщение Nov 30 2015, 03:46
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699



Цитата(des00 @ Nov 30 2015, 09:35) *
не знаю что они вам ответили. на 5 ой арии я свободно 400 МГц в ддре вытаскиваю наружу.

Вот дословно:
Цитата
The 200MHz output frequency is to high for GPIO.
For such frequency the PHYLite IP should be used. That IP is dedicated to building custom memory interfaces.

laughing.gif

Цитата(des00 @ Nov 30 2015, 09:35) *
PS. Надеюсь вы CMOS/LVTTL режимы не поставили ? wink.gif

Нет, 1.2POD (У меня QDR-IV память подцеплена)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 1st July 2025 - 05:36
Рейтинг@Mail.ru


Страница сгенерированна за 0.01496 секунд с 7
ELECTRONIX ©2004-2016