OpenCores
URL https://opencores.org/ocsvn/versatile_mem_ctrl/versatile_mem_ctrl/trunk

Subversion Repositories versatile_mem_ctrl

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /versatile_mem_ctrl
    from Rev 98 to Rev 99
    Reverse comparison

Rev 98 → Rev 99

/trunk/bench/tb.v
1,4 → 1,4
`include "tb_defines.v"
//`include "tb_defines.v"
`timescale 1ns/1ns
module versatile_mem_ctrl_tb
(
5,315 → 5,227
output OK
);
 
reg wb_clk, wb_rst;
reg sdram_clk, sdram_rst;
reg tb_rst;
`ifdef NR_OF_WBM
parameter nr_of_wbm = `NR_OF_WBM;
`else
parameter nr_of_wbm = 1;
`endif
 
wire [31:0] wbm_dat_i [1:nr_of_wbm];
wire [3:0] wbm_sel_i [1:nr_of_wbm];
wire [31:0] wbm_adr_i [1:nr_of_wbm];
wire [2:0] wbm_cti_i [1:nr_of_wbm];
wire [1:0] wbm_bte_i [1:nr_of_wbm];
wire wbm_cyc_i [1:nr_of_wbm];
wire wbm_stb_i [1:nr_of_wbm];
wire [31:0] wbm_dat_o [1:nr_of_wbm];
wire wbm_ack_o [1:nr_of_wbm];
wire wbm_clk [1:nr_of_wbm];
wire wbm_rst;
`ifdef SDRAM_CLK_PERIOD
parameter sdram_clk_period = `SDRAM_CLK_PERIOD;
`else
parameter sdram_clk_period = 8;
`endif
 
`ifdef WB_CLK_PERIODS
parameter [1:nr_of_wbm] wb_clk_periods = {`WB_CLK_PERIODS};
`else
parameter [1:nr_of_wbm] wb_clk_periods = (20);
`endif
parameter wb_clk_period = 20;
wire [31:0] wbm_a_dat_o [1:nr_of_wbm];
wire [3:0] wbm_a_sel_o [1:nr_of_wbm];
wire [31:0] wbm_a_adr_o [1:nr_of_wbm];
wire [2:0] wbm_a_cti_o [1:nr_of_wbm];
wire [1:0] wbm_a_bte_o [1:nr_of_wbm];
wire wbm_a_we_o [1:nr_of_wbm];
wire wbm_a_cyc_o [1:nr_of_wbm];
wire wbm_a_stb_o [1:nr_of_wbm];
wire [31:0] wbm_a_dat_i [1:nr_of_wbm];
wire wbm_a_ack_i [1:nr_of_wbm];
reg wbm_a_clk [1:nr_of_wbm];
reg wbm_a_rst [1:nr_of_wbm];
 
wire [31:0] wbm_b_dat_o [1:nr_of_wbm];
wire [3:0] wbm_b_sel_o [1:nr_of_wbm];
wire [31:2] wbm_b_adr_o [1:nr_of_wbm];
wire [2:0] wbm_b_cti_o [1:nr_of_wbm];
wire [1:0] wbm_b_bte_o [1:nr_of_wbm];
wire wbm_b_we_o [1:nr_of_wbm];
wire wbm_b_cyc_o [1:nr_of_wbm];
wire wbm_b_stb_o [1:nr_of_wbm];
wire [31:0] wbm_b_dat_i [1:nr_of_wbm];
wire wbm_b_ack_i [1:nr_of_wbm];
 
wire [31:0] wb_sdram_dat_i;
wire [3:0] wb_sdram_sel_i;
wire [31:0] wb_sdram_adr_i;
wire [31:2] wb_sdram_adr_i;
wire [2:0] wb_sdram_cti_i;
wire [1:0] wb_sdram_bte_i;
wire wb_sdram_we_i;
wire wb_sdram_cyc_i;
wire wb_sdram_stb_i;
wire [31:0] wb_sdram_dat_o;
wire wb_sdram_ack_o;
reg wb_sdram_clk;
reg wb_sdram_rst;
wire [1:nr_of_wbm] wbm_OK;
genvar i;
`define DUT sdr_sdram_16_ctrl
`define SDR 16
`ifdef SDR
wire [1:0] ba, ba_pad;
wire [12:0] a, a_pad;
wire [`SDR-1:0] dq_i, dq_o, dq_pad;
wire dq_oe;
wire [1:0] dqm, dqm_pad;
wire cke, cke_pad, cs_n, cs_n_pad, ras, ras_pad, cas, cas_pad, we, we_pad;
assign #1 {ba_pad,a_pad} = {ba,a};
assign #1 {ras_pad, cas_pad, we_pad} = {ras,cas,we};
assign #1 dqm_pad = dqm;
assign #1 cke_pad = cke;
assign cs_n_pad = cs_n;
mt48lc16m16a2 mem(
.Dq(dq_pad),
.Addr(a_pad),
.Ba(ba_pad),
.Clk(wb_sdram_clk),
.Cke(cke_pad),
.Cs_n(cs_n_pad),
.Ras_n(ras_pad),
.Cas_n(cas_pad),
.We_n(we_pad),
.Dqm(dqm_pad));
assign #1 dq_pad = (dq_oe) ? dq_o : {`SDR{1'bz}};
assign #1 dq_i = dq_pad;
`DUT DUT(
// wisbone i/f
.dat_i(wb_sdram_dat_i),
.adr_i({wb_sdram_adr_i[24:2],1'b0}),
.sel_i(wb_sdram_sel_i),
.cti_i(wb_sdram_cti_i),
.bte_i(wb_sdram_bte_i),
.we_i (wb_sdram_we_i),
.cyc_i(wb_sdram_cyc_i),
.stb_i(wb_sdram_stb_i),
.dat_o(wb_sdram_dat_o),
.ack_o(wb_sdram_ack_o),
// SDR SDRAM
.ba(ba),
.a(a),
.cmd({ras, cas, we}),
.cke(cke),
.cs_n(cs_n),
.dqm(dqm),
.dq_i(dq_i),
.dq_o(dq_o),
.dq_oe(dq_oe),
// system
.clk(wb_sdram_clk), .rst(wb_sdram_rst));
`endif
 
wire [1:0] ba, bad;
wire [12:0] a, ad;
wire [15:0] dq_i;
wire [15:0] dq_o;
wire [15:0] dq_io;
wire [1:0] dqs, dqs_n, dqs_i, dqs_o, dqs_n_i, dqs_n_o, dqs_io, dqs_n_io;
wire [1:0] dqm, dqmd, dm_rdqs;
wire dq_oe, dqs_oe;
wire cs_n, cs_nd, ras, rasd, cas, casd, we, wed, cke, cked;
wire ck_fb_i, ck_fb_o;
// wishbone master(s)
generate
for (i=1; i <= nr_of_wbm; i=i+1) begin: wb_master
wbm wbmi(
.adr_o(wbm_a_adr_o[i]),
.bte_o(wbm_a_bte_o[i]),
.cti_o(wbm_a_cti_o[i]),
.dat_o(wbm_a_dat_o[i]),
.sel_o(wbm_a_sel_o[i]),
.we_o (wbm_a_we_o[i]),
.cyc_o(wbm_a_cyc_o[i]),
.stb_o(wbm_a_stb_o[i]),
.dat_i(wbm_a_dat_i[i]),
.ack_i(wbm_a_ack_i[i]),
.clk(wbm_a_clk[i]),
.reset(wbm_a_rst[i]),
.OK(wbm_OK[i])
);
 
`ifdef SDR_16 // SDR SDRAM
wb0 wb0i
(
.adr(wb0_adr_i),
.bte(wb0_bte_i),
.cti(wb0_cti_i),
.cyc(wb0_cyc_i),
.dat(wb0_dat_i),
.sel(wb0_sel_i),
.stb(wb0_stb_i),
.we (wb0_we_i),
.ack(wb0_ack_o),
.clk(wb_clk),
.dat_i(wb0_dat_o),
.reset(wb_rst)
);
wb1 wb1i
(
.adr(wb1_adr_i),
.bte(wb1_bte_i),
.cti(wb1_cti_i),
.cyc(wb1_cyc_i),
.dat(wb1_dat_i),
.sel(wb1_sel_i),
.stb(wb1_stb_i),
.we (wb1_we_i),
.ack(wb1_ack_o),
.clk(wb_clk),
.dat_i(wb1_dat_o),
.reset(wb_rst)
);
wb4 wb4i
(
.adr(wb4_adr_i),
.bte(wb4_bte_i),
.cti(wb4_cti_i),
.cyc(wb4_cyc_i),
.dat(wb4_dat_i),
.sel(wb4_sel_i),
.stb(wb4_stb_i),
.we (wb4_we_i),
.ack(wb4_ack_o),
.clk(wb_clk),
.dat_i(wb4_dat_o),
.reset(wb_rst)
);
`endif
wb3wb3_bridge wbwb_bridgei (
// wishbone slave side
.wbs_dat_i(wbm_a_dat_o[i]),
.wbs_adr_i(wbm_a_adr_o[i][31:2]),
.wbs_sel_i(wbm_a_sel_o[i]),
.wbs_bte_i(wbm_a_bte_o[i]),
.wbs_cti_i(wbm_a_cti_o[i]),
.wbs_we_i (wbm_a_we_o[i]),
.wbs_cyc_i(wbm_a_cyc_o[i]),
.wbs_stb_i(wbm_a_stb_o[i]),
.wbs_dat_o(wbm_a_dat_i[i]),
.wbs_ack_o(wbm_a_ack_i[i]),
.wbs_clk(wbm_a_clk[i]),
.wbs_rst(wbm_a_rst[i]),
// wishbone master side
.wbm_dat_o(wbm_b_dat_o[i]),
.wbm_adr_o(wbm_b_adr_o[i]),
.wbm_sel_o(wbm_b_sel_o[i]),
.wbm_bte_o(wbm_b_bte_o[i]),
.wbm_cti_o(wbm_b_cti_o[i]),
.wbm_we_o (wbm_b_we_o[i]),
.wbm_cyc_o(wbm_b_cyc_o[i]),
.wbm_stb_o(wbm_b_stb_o[i]),
.wbm_dat_i(wbm_b_dat_i[i]),
.wbm_ack_i(wbm_b_ack_i[i]),
.wbm_clk(wb_sdram_clk),
.wbm_rst(wb_sdram_rst));
end
endgenerate
 
`ifdef DDR_16 // DDR2 SDRAM
wb0_ddr wb0i
(
.adr(wb0_adr_i),
.bte(wb0_bte_i),
.cti(wb0_cti_i),
.cyc(wb0_cyc_i),
.dat(wb0_dat_i),
.sel(wb0_sel_i),
.stb(wb0_stb_i),
.we (wb0_we_i),
.ack(wb0_ack_o),
.clk(wb_clk),
.dat_i(wb0_dat_o),
.reset(tb_rst)
);
wb1_ddr wb1i
(
.adr(wb1_adr_i),
.bte(wb1_bte_i),
.cti(wb1_cti_i),
.cyc(wb1_cyc_i),
.dat(wb1_dat_i),
.sel(wb1_sel_i),
.stb(wb1_stb_i),
.we (wb1_we_i),
.ack(wb1_ack_o),
.clk(wb_clk),
.dat_i(wb1_dat_o),
.reset(tb_rst)
);
wb4_ddr wb4i
(
.adr(wb4_adr_i),
.bte(wb4_bte_i),
.cti(wb4_cti_i),
.cyc(wb4_cyc_i),
.dat(wb4_dat_i),
.sel(wb4_sel_i),
.stb(wb4_stb_i),
.we (wb4_we_i),
.ack(wb4_ack_o),
.clk(wb_clk),
.dat_i(wb4_dat_o),
.reset(tb_rst)
);
`define SINGLE_WB
`ifdef SINGLE_WB
assign wb_sdram_dat_i=wbm_b_dat_o[1];
assign wb_sdram_sel_i=wbm_b_sel_o[1];
assign wb_sdram_adr_i=wbm_b_adr_o[1];
assign wb_sdram_we_i =wbm_b_we_o[1];
assign wb_sdram_bte_i=wbm_b_bte_o[1];
assign wb_sdram_cti_i=wbm_b_cti_o[1];
assign wb_sdram_cyc_i=wbm_b_cyc_o[1];
assign wb_sdram_stb_i=wbm_b_stb_o[1];
assign wbm_b_dat_i[1]=wb_sdram_dat_o;
assign wbm_b_ack_i[1]=wb_sdram_ack_o;
`endif
 
versatile_mem_ctrl_top # (
.nr_of_wb_clk_domains(2),
.nr_of_wb_ports_clk0(1),
.nr_of_wb_ports_clk1(1),
.nr_of_wb_ports_clk2(0),
.nr_of_wb_ports_clk3(0))
dut (
.wb_adr_i_0({{wb0_adr_i[31:2],wb0_we_i,wb0_bte_i,wb0_cti_i},{wb1_adr_i[31:2],wb1_we_i,wb1_bte_i,wb1_cti_i}}),
.wb_dat_i_0({{wb0_dat_i,wb0_sel_i},{wb1_dat_i,wb1_sel_i}}),
.wb_dat_o_0({wb0_dat_o,wb1_dat_o}),
.wb_stb_i_0({wb0_stb_i,wb1_stb_i}),
.wb_cyc_i_0({wb0_cyc_i,wb1_cyc_i}),
.wb_ack_o_0({wb0_ack_o,wb1_ack_o}),
assign OK = &wbm_OK;
 
.wb_adr_i_1({wb4_adr_i[31:2],wb4_we_i,wb4_bte_i,wb4_cti_i}),
.wb_dat_i_1({wb4_dat_i,wb4_sel_i}),
.wb_dat_o_1(wb4_dat_o),
.wb_stb_i_1(wb4_stb_i),
.wb_cyc_i_1(wb4_cyc_i),
.wb_ack_o_1(wb4_ack_o),
generate
for (i=1; i <= nr_of_wbm; i=i+1) begin: wb_reset
 
.wb_adr_i_2(2'b0),
.wb_dat_i_2(2'b0),
.wb_dat_o_2(),
.wb_stb_i_2(2'b0),
.wb_cyc_i_2(2'b0),
.wb_ack_o_2(),
// Wishbone reset
initial
begin
#0 wbm_a_rst[i] = 1'b1;
#200 wbm_a_rst[i] = 1'b0;
end
 
.wb_adr_i_3(2'b0),
.wb_dat_i_3(2'b0),
.wb_dat_o_3(),
.wb_stb_i_3(2'b0),
.wb_cyc_i_3(2'b0),
.wb_ack_o_3(),
// Wishbone clock
initial
begin
#0 wbm_a_clk[i] = 1'b0;
forever
#(wb_clk_period/2) wbm_a_clk[i] = !wbm_a_clk[i];
end
 
// SDR SDRAM 16
`ifdef SDR_16
.ba_pad_o(ba),
.a_pad_o(a),
.cs_n_pad_o(cs_n),
.ras_pad_o(ras),
.cas_pad_o(cas),
.we_pad_o(we),
.dq_o(dq_o),
.dqm_pad_o(dqm),
.dq_i(dq_i),
.dq_oe(dq_oe),
.cke_pad_o(cke),
`endif
`ifdef DDR_16
// DDR2 SDRAM 16
.ck_pad_o(ck),
.ck_n_pad_o(ck_n),
.cke_pad_o(cke),
.ck_fb_pad_o(ck_fb_o),
.ck_fb_pad_i(ck_fb_i),
.cs_n_pad_o(cs_n),
.ras_pad_o(ras),
.cas_pad_o(cas),
.we_pad_o(we),
.dm_rdqs_pad_io(dm_rdqs),
.ba_pad_o(ba),
.addr_pad_o(a),
.dq_pad_io(dq_io),
.dqs_pad_io(dqs_io),
.dqs_oe(dqs_oe),
.dqs_n_pad_io(dqs_n_io),
.rdqs_n_pad_i(),
.odt_pad_o(),
`endif
// misc
.wb_clk({wb_clk,wb_clk}),
.wb_rst({wb_rst,wb_rst}),
.sdram_clk(sdram_clk),
.sdram_rst(wb_rst)
);
 
`ifdef SDR_16
assign #1 dq_io = dq_oe ? dq_o : {16{1'bz}};
assign #1 dq_i = dq_io;
assign #1 dqmd = dqm;
assign #1 dqs_io = dqs_oe ? dqs_o : {2{1'bz}};
assign #1 dqs_i = dqs_io;
assign #1 dqs_n_io = dqs_oe ? dqs_n_o : {2{1'bz}};
assign #1 dqs_n_i = dqs_n_io;
`endif
 
`ifdef DDR_16
assign #1 dqmd = dqm;
assign ck_fb_i = ck_fb_o;
`endif
 
assign #1 ad = a;
assign #1 bad = ba;
assign #1 cked = cke;
assign #1 cs_nd = cs_n;
assign #1 rasd = ras;
assign #1 casd = cas;
assign #1 wed = we;
`ifdef SDR_16 // SDR SDRAM Simulation model
mt48lc16m16a2 sdram
(
.Dq(dq_io),
.Addr(ad),
.Ba(bad),
.Clk(sdram_clk),
.Cke(cked),
.Cs_n(cs_nd),
.Ras_n(rasd),
.Cas_n(casd),
.We_n(wed),
.Dqm(dqmd)
);
`endif
`ifdef DDR_16 // DDR2 SDRAM Simulation model
ddr2 ddr2_sdram
(
.ck(ck),
.ck_n(ck_n),
.cke(cke),
.cs_n(cs_n),
.ras_n(ras),
.cas_n(cas),
.we_n(we),
.dm_rdqs(dm_rdqs),
.ba(ba),
.addr(a),
.dq(dq_io),
.dqs(dqs_io),
.dqs_n(dqs_n_io),
.rdqs_n(),
.odt()
);
`endif
 
// Wishbone reset
initial
begin
#0 wb_rst = 1'b1;
#200 wb_rst = 1'b1;
#200000 wb_rst = 1'b0;
end
endgenerate
 
// SDRAM reset
initial
begin
#0 sdram_rst = 1'b1;
#200 sdram_rst = 1'b1;
#200000 sdram_rst = 1'b0;
#0 wb_sdram_rst = 1'b1;
#200 wb_sdram_rst = 1'b0;
end
// Test bench reset
initial
begin
#0 tb_rst = 1'b1;
#200 tb_rst = 1'b1;
//#200000 tb_rst = 1'b0;
#300000 tb_rst = 1'b0; // hold reset to let initialization complete
end
 
// Wishbone clock
initial
begin
#0 wb_clk = 1'b0;
forever
#(wb0_clk_period/2) wb_clk = !wb_clk;
end
 
// SDRAM clock
initial
begin
#0 sdram_clk = 1'b0;
#0 wb_sdram_clk = 1'b0;
forever
#(sdram_clk_period/2) sdram_clk = !sdram_clk;
#(sdram_clk_period/2) wb_sdram_clk = !wb_sdram_clk;
end
endmodule // versatile_mem_ctrl_tb
/trunk/bench/wbm.v
1,3 → 1,4
`timescale 1ns/1ns
module wbm (
output [31:0] adr_o,
output [1:0] bte_o,
24,10 → 25,39
eob = 3'b111;
 
parameter instructions = 32;
 
// {adr_o,bte_o,cti_o,dat_o,sel_o,we_o,cyc_o,stb_o}
parameter [32+2+3+32+4+1+1+1:1] inst_rom [0:instructions-1]= {
{32'h0,linear,classic,32'h0,4'b1111,1'b0,1'b0,1'b0},
{32'h100,linear,classic,32'h12345678,4'b1111,1'b1,1'b1,1'b1},
{32'h100,linear,classic,32'h0,4'b1111,1'b0,1'b1,1'b1},
{32'h0,linear,classic,32'h0,4'b1111,1'b0,1'b0,1'b0},
{32'hA000,beat4,inc,32'h00010002,4'b1111,1'b1,1'b1,1'b1}, // write burst
{32'hA004,beat4,inc,32'h00030004,4'b1111,1'b1,1'b1,1'b1},
{32'hA008,beat4,inc,32'h00050006,4'b1111,1'b1,1'b1,1'b1},
{32'hA00C,beat4,eob,32'h00070008,4'b1111,1'b1,1'b1,1'b1},
{32'hA008,linear,classic,32'hA1FFFFFF,4'b1000,1'b1,1'b1,1'b1},// write byte
{32'hA000,beat4,inc,32'h0,4'b1111,1'b0,1'b1,1'b1}, // read burst
{32'hA004,beat4,inc,32'h0,4'b1111,1'b0,1'b1,1'b1},
{32'hA008,beat4,inc,32'h0,4'b1111,1'b0,1'b1,1'b1},
{32'hA00C,beat4,eob,32'h0,4'b1111,1'b0,1'b1,1'b1},
{32'h1000,linear,inc,32'hdeaddead,4'b1111,1'b1,1'b1,1'b1}, // write
{32'h1004,linear,eob,32'h55555555,4'b1111,1'b1,1'b1,1'b1}, //
{32'h1000,linear,inc,32'h0,4'b1111,1'b0,1'b1,1'b1}, // read
{32'h1004,linear,eob,32'h0,4'b1111,1'b0,1'b1,1'b1}, // read
{32'hA008,beat4,inc,32'h0,4'b1111,1'b0,1'b1,1'b1}, // read burst
{32'hA00C,beat4,inc,32'h0,4'b1111,1'b0,1'b1,1'b1},
{32'hA000,beat4,inc,32'h0,4'b1111,1'b0,1'b1,1'b1},
{32'hA004,beat4,eob,32'h0,4'b1111,1'b0,1'b1,1'b1},
{32'h0,linear,classic,32'h0,4'b1111,1'b0,1'b0,1'b0},
{32'h0,linear,classic,32'h0,4'b1111,1'b0,1'b0,1'b0},
{32'h0,linear,classic,32'h0,4'b1111,1'b0,1'b0,1'b0},
37,26 → 67,6
{32'h0,linear,classic,32'h0,4'b1111,1'b0,1'b0,1'b0},
{32'h0,linear,classic,32'h0,4'b1111,1'b0,1'b0,1'b0},
{32'h0,linear,classic,32'h0,4'b1111,1'b0,1'b0,1'b0},
{32'h0,linear,classic,32'h0,4'b1111,1'b0,1'b0,1'b0},
{32'h0,linear,classic,32'h0,4'b1111,1'b0,1'b0,1'b0},
{32'h0,linear,classic,32'h0,4'b1111,1'b0,1'b0,1'b0},
{32'h0,linear,classic,32'h0,4'b1111,1'b0,1'b0,1'b0},
{32'h0,linear,classic,32'h0,4'b1111,1'b0,1'b0,1'b0},
{32'h0,linear,classic,32'h0,4'b1111,1'b0,1'b0,1'b0},
{32'h0,linear,classic,32'h0,4'b1111,1'b0,1'b0,1'b0},
{32'h0,linear,classic,32'h0,4'b1111,1'b0,1'b0,1'b0},
{32'h0,linear,classic,32'h0,4'b1111,1'b0,1'b0,1'b0},
{32'h0,linear,classic,32'h0,4'b1111,1'b0,1'b0,1'b0},
{32'h0,linear,classic,32'h0,4'b1111,1'b0,1'b0,1'b0},
{32'h0,linear,classic,32'h0,4'b1111,1'b0,1'b0,1'b0},
{32'h0,linear,classic,32'h0,4'b1111,1'b0,1'b0,1'b0},
{32'h0,linear,classic,32'h0,4'b1111,1'b0,1'b0,1'b0},
{32'h0,linear,classic,32'h0,4'b1111,1'b0,1'b0,1'b0},
{32'h0,linear,classic,32'h0,4'b1111,1'b0,1'b0,1'b0},
{32'h0,linear,classic,32'h0,4'b1111,1'b0,1'b0,1'b0},
{32'h0,linear,classic,32'h0,4'b1111,1'b0,1'b0,1'b0},
{32'h0,linear,classic,32'h0,4'b1111,1'b0,1'b0,1'b0},
{32'h0,linear,classic,32'h0,4'b1111,1'b0,1'b0,1'b0},
{32'h0,linear,classic,32'h0,4'b1111,1'b0,1'b0,1'b0}};
parameter [31:0] dat [0:instructions-1] = {
63,6 → 73,7
32'h0,
32'h0,
32'h0,
32'h12345678,
32'h0,
32'h0,
32'h0,
69,8 → 80,18
32'h0,
32'h0,
32'h0,
32'h00010002,
32'h00030004,
32'ha1050006,
32'h00070008,
32'h0,
32'h0,
32'hdeaddead,
32'h55555555,
32'ha1050006,
32'h00070008,
32'h00010002,
32'h00030004,
32'h0,
32'h0,
32'h0,
81,16 → 102,6
32'h0,
32'h0,
32'h0,
32'h0,
32'h0,
32'h0,
32'h0,
32'h0,
32'h0,
32'h0,
32'h0,
32'h0,
32'h0,
32'h0};
// parameter idle = 1'b0;
106,7 → 117,7
if (reset)
i = 0;
else
if ((!stb_o | ack_i) & i < instructions)
if ((!stb_o | ack_i) & i < instructions - 1)
i = i + 1;
 
always @ (posedge clk or posedge reset)
113,9 → 124,10
if (reset)
OK <= 1'b1;
else
if (ack_i & !we_o & (dat_i != dat[i]))
if (ack_i & !we_o & (dat_i != dat[i])) begin
OK <= 1'b0;
//assert "Read error";
$display ("wrong read value %h at %t", dat_i, $time);
end
// always @ (posedge clk or posedge reset)
// if (reset)

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.