Цитата(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
//-----------------------------------------------------
описывать свои воздействия.