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

 
 
> Временной анализ корки DDR3
ovs_pavel
сообщение May 22 2013, 18:13
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 275
Регистрация: 19-05-06
Пользователь №: 17 249



Вечер добрый. Коллеги, не подскажите как выполнить временной анализ DDR3 корки для ПЛИС XC7K325T-2FFG900C.
Расскажу что делаю по этапам.

1. Сгенерил корку DDR3, в качестве пользовательского интерфейса взял User Interface (UI). Корку включил в тестовый проект (необходимо разобраться с пользовательскими сигналами, ну и заодно посмотреть, как работает память).
2. Подключил сгенерированный коркой .ucf-файл к проекту. Все скомпилил, вроде ошибок нет.
3. Сделал test bench, в котором сформировал сигнал сброса и дифференциальный тактовый сигнал 200 МГц.
4. Ну и все это запустил на временной анализ, но... тишина, калибровка памяти не начинается.

Пробовал (из UG586) запустить временной анализ корки из папки "example_design". Там все красиво получается, сразу после сброса начинается калибровка памяти и т.д. Но во первых они выполняют поведенческий анализ корки (behavirial), ну и во вторых не все у них там прозрачно.

Я не могу понять почему у меня не запускается процесс калибровки памяти, ведь достаточно наличия двух сигналов - тактовой и сброса.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
TRILLER
сообщение May 24 2013, 08:48
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 180
Регистрация: 17-02-09
Из: Санкт-Петербург
Пользователь №: 45 001



Не понимаю, в чём затруднение, если честно. При создании корки MIG появится папка example_design. Там в папке sim есть пример тестбенча. Делаете так, как сделано там и дело с концом..
Go to the top of the page
 
+Quote Post
ovs_pavel
сообщение May 24 2013, 11:45
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 275
Регистрация: 19-05-06
Пользователь №: 17 249



Цитата(TRILLER @ May 24 2013, 12:48) *
Не понимаю, в чём затруднение, если честно. При создании корки MIG появится папка example_design. Там в папке sim есть пример тестбенча. Делаете так, как сделано там и дело с концом..


Я что то до конца не понимаю. Не пинайте, объясните что делаю не так (все время делал как опишу ниже; может уже пора переходить к временному анализу как то по другому, но пока не пойму как).

Вот мой тестбенч, созданных как New Source Type -> Verilog Test Ficture:


//-------------------------------------------------------------------------------------
`timescale 1ps/100fs

parameter CLKIN_PERIOD = 5000;

module test;

// Inputs
reg sys_clk_p;
reg sys_clk_n;
reg [27:0] app_addr;
reg [2:0] app_cmd;
reg app_en;
reg [63:0] app_wdf_data;
reg app_wdf_end;
reg [7:0] app_wdf_mask;
reg app_wdf_wren;
reg [2:0] mux_app_rd_data;
reg app_sr_req;
reg app_ref_req;
reg app_zq_req;
reg sys_rst;

// Outputs
wire [13:0] ddr3_addr;
wire [2:0] ddr3_ba;
wire ddr3_ras_n;
wire ddr3_cas_n;
wire ddr3_we_n;
wire ddr3_reset_n;
wire ddr3_ck_p;
wire ddr3_ck_n;
wire ddr3_cke;
wire ddr3_cs_n;
wire [7:0] ddr3_dm;
wire ddr3_odt;
wire [63:0] app_rd_data;
wire app_rd_data_end;
wire app_rd_data_valid;
wire app_rdy;
wire app_wdf_rdy;
wire app_sr_active;
wire app_ref_ack;
wire app_zq_ack;
wire ui_clk;
wire ui_clk_sync_rst;
wire init_calib_complete;

wire test_pll_clk3;

// Bidirs
wire [63:0] ddr3_dq;
wire [7:0] ddr3_dqs_n;
wire [7:0] ddr3_dqs_p;

reg [63:0] rg_ddr3_dq; // Организация двунаправленности.
reg [7:0] rg_ddr3_dqs_n;
reg [7:0] rg_ddr3_dqs_p;

// Instantiate the Unit Under Test (UUT)
ddr3_test uut (
.ddr3_dq(ddr3_dq),
.ddr3_dqs_n(ddr3_dqs_n),
.ddr3_dqs_p(ddr3_dqs_p),
.ddr3_addr(ddr3_addr),
.ddr3_ba(ddr3_ba),
.ddr3_ras_n(ddr3_ras_n),
.ddr3_cas_n(ddr3_cas_n),
.ddr3_we_n(ddr3_we_n),
.ddr3_reset_n(ddr3_reset_n),
.ddr3_ck_p(ddr3_ck_p),
.ddr3_ck_n(ddr3_ck_n),
.ddr3_cke(ddr3_cke),
.ddr3_cs_n(ddr3_cs_n),
.ddr3_dm(ddr3_dm),
.ddr3_odt(ddr3_odt),
.sys_clk_p(sys_clk_p),
.sys_clk_n(sys_clk_n),
.app_addr(app_addr),
.app_cmd(app_cmd),
.app_en(app_en),
.app_wdf_data(app_wdf_data),
.app_wdf_end(app_wdf_end),
.app_wdf_mask(app_wdf_mask),
.app_wdf_wren(app_wdf_wren),
.mux_app_rd_data(mux_app_rd_data),
.app_rd_data(app_rd_data),
.app_rd_data_end(app_rd_data_end),
.app_rd_data_valid(app_rd_data_valid),
.app_rdy(app_rdy),
.app_wdf_rdy(app_wdf_rdy),
.app_sr_req(app_sr_req),
.app_sr_active(app_sr_active),
.app_ref_req(app_ref_req),
.app_ref_ack(app_ref_ack),
.app_zq_req(app_zq_req),
.app_zq_ack(app_zq_ack),
.ui_clk(ui_clk),
.ui_clk_sync_rst(ui_clk_sync_rst),
.init_calib_complete(init_calib_complete),
.sys_rst(sys_rst),

.test_pll_clk3 (test_pll_clk3)
);


initial
begin
sys_rst = 1'b0;

#200000
sys_rst = 1'b1;
end


initial
begin
sys_clk_p <= 1'b0;
sys_clk_n <= 1'b1;
end

always
begin
#(CLKIN_PERIOD/2.0)
sys_clk_p = ~sys_clk_p;
sys_clk_n = ~sys_clk_n;
end


initial
begin
rg_ddr3_dq = 64'hZZZZZZZZZZZZZZZZ;
rg_ddr3_dqs_n = 8'hZZ;
rg_ddr3_dqs_p = 8'hZZ;

app_addr = 0;
app_cmd = 0;
app_en = 0;
app_wdf_data = 0;
app_wdf_end = 0;
app_wdf_mask = 0;
app_wdf_wren = 0;
mux_app_rd_data = 0;
app_sr_req = 0;
app_ref_req = 0;
app_zq_req = 0;
end

assign ddr3_dq = rg_ddr3_dq;
assign ddr3_dqs_n = rg_ddr3_dqs_n;
assign ddr3_dqs_p = rg_ddr3_dqs_p;


endmodule
//-------------------------------------------------------------------------------------

Для начала я подал тактовую и сигнал сброса, и в корке DDR3 изменил параметр:

SIM_INIT_OPTION = "SKIP_PU_DLY", // "NONE", "SKIP_PU_DLY", "SKIP_INIT"

чтобы пропустить время ожидания установки питания. И вроде после сигнала сброса должна начаться инициализация памяти.

У меня же после сброса меняется сигнал ui_clk_sync_rst (из 1 в 0) и сигнал app_wdf_rdy (из 0 в 1), т.е. ФИФО приема данных для записи в SDRAM готово принять данные.

И все. Тишина.

В файле который сгенерился автоматически (в папке example design - sim_tb_top.v) нет ни одного из сигналов пользовательского интерфейса (app_*_*). И пока я его описание не понимаю (видимо опыта не хватает). Поэтому и спрашиваю у знающих как делать.








Кажется потихоньку начал "въезжать". Видимо тестовый тестбенч не формирует пользовательские сигналы и их вообще не прописывает, т.к. не использует. Т.е. мне надо их добавить в файле sim_tb_top.v, после описания сигналов SDRAM памяти. И после всего этого:

//------------------------------------
initial
begin : Logging
fork
begin : calibration_done
wait (init_calib_complete);
$display("Calibration Done");
#50000000;
if (!tg_compare_error) begin
$display("TEST PASSED");
end
else begin
$display("TEST FAILED: DATA ERROR");
end
disable calib_not_done;
$finish;
end

begin : calib_not_done
if (SIM_BYPASS_INIT_CAL == "SIM_INIT_CAL_FULL")
#2500000000;
else
#1000000000;
if (!init_calib_complete) begin
$display("TEST FAILED: INITIALIZATION DID NOT COMPLETE");
end
disable calibration_done;
$finish;
end
join
end
//-----------------------------------------------------

описывать свои воздействия.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


RSS Текстовая версия Сейчас: 5th September 2025 - 12:23
Рейтинг@Mail.ru


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