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

 
 
> Как правильно описать интерфейс на 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



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

 


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


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