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
    /
    from Rev 110 to Rev 111
    Reverse comparison

Rev 110 → Rev 111

/versatile_mem_ctrl/trunk/rtl/verilog/versatile_mem_ctrl_defines.v
0,0 → 1,313
//=tab Main
 
// Number of WB groups
//=select
//`define WB_GRPS_1 // 1
//`define WB_GRPS_2 // 2
`define WB_GRPS_3 // 3
//`define WB_GRPS_4 // 4
//`define WB_GRPS_5 // 5
//`define WB_GRPS_6 // 6
//`define WB_GRPS_7 // 7
//`define WB_GRPS_8 // 8
//=end
 
`ifdef WB_GRPS_2
`define WB_GRPS_1
`define NR_OF_WB_GRPS 2
`define NR_OF_PORTS 2
`endif
`ifdef WB_GRPS_3
`define WB_GRPS_1
`define WB_GRPS_2
`define NR_OF_WB_GRPS 3
`define NR_OF_PORTS 3
`endif
`ifdef WB_GRPS_4
`define WB_GRPS_1
`define WB_GRPS_2
`define WB_GRPS_3
`define NR_OF_WB_GRPS 4
`define NR_OF_PORTS 4
`endif
`ifdef WB_GRPS_5
`define WB_GRPS_1
`define WB_GRPS_2
`define WB_GRPS_3
`define WB_GRPS_4
`define NR_OF_WB_GRPS 5
`define NR_OF_PORTS 5
`endif
`ifdef WB_GRPS_6
`define WB_GRPS_1
`define WB_GRPS_2
`define WB_GRPS_3
`define WB_GRPS_4
`define WB_GRPS_5
`define NR_OF_WB_GRPS 6
`define NR_OF_PORTS 6
`endif
`ifdef WB_GRPS_7
`define WB_GRPS_1
`define WB_GRPS_2
`define WB_GRPS_3
`define WB_GRPS_4
`define WB_GRPS_5
`define WB_GRPS_6
`define NR_OF_WB_GRPS 7
`define NR_OF_PORTS 7
`endif
`ifdef WB_GRPS_8
`define WB_GRPS_1
`define WB_GRPS_2
`define WB_GRPS_3
`define WB_GRPS_4
`define WB_GRPS_5
`define WB_GRPS_6
`define WB_GRPS_7
`define NR_OF_WB_GRPS 8
`define NR_OF_PORTS 8
`endif
 
// Clock domain crossing WB1
//=select
//`define WB1_MEM_CLK // mem clk domain
`define WB1_CLK // wb1 clk domain
//=end
// Clock domain crossing WB1
//=select
//`define WB2_MEM_CLK // mem clk domain
`define WB2_CLK // wb2 clk domain
//=end
// Clock domain crossing WB1
//=select
`define WB3_MEM_CLK // mem clk domain
//`define WB3_CLK // wb3 clk domain
//=end
// Clock domain crossing WB1
//=select
//`define WB4_MEM_CLK // mem clk domain
`define WB4_CLK // wb4 clk domain
//=end
// Clock domain crossing WB1
//=select
//`define WB5_MEM_CLK // mem clk domain
`define WB5_CLK // wb5 clk domain
//=end
// Clock domain crossing WB1
//=select
//`define WB6_MEM_CLK // mem clk domain
`define WB6_CLK // wb6 clk domain
//=end
// Clock domain crossing WB1
//=select
//`define WB7_MEM_CLK // mem clk domain
`define WB7_CLK // wb7 clk domain
//=end
// Clock domain crossing WB1
//=select
//`define WB8_MEM_CLK // mem clk domain
`define WB8_CLK // wb8 clk domain
//=end
 
// Module base name
`define BASE versatile_mem_ctrl_
 
// Memory type
//=select
//`define RAM // RAM
`define SDR // SDR
//`define DDR2 // DDR2
//`define DDR3 // DDR3
//=end
 
// Shadow RAM
`define SHADOW_RAM
 
//=tab RAM
// Number of bits in address
`define RAM_ADR_SIZE 16
// Capacity in KBytes
`define RAM_MEM_SIZE_KB 48
`ifdef RAM_MEM_SIZE_KB
`define RAM_MEM_SIZE `RAM_MEM_SIZE_KB*1024
`endif
 
// Memory init
`define RAM_MEM_INIT_DUMMY
`ifndef RAM_MEM_INIT_DUMMY
`define RAM_MEM_INIT 0
`else
`define RAM_MEM_INIT 1
`endif
 
// Memory init file
`define RAM_MEM_INIT_FILE "ram_init.v"
 
`ifdef RAM
`define WB_ADR_SIZE `RAM_ADR_SIZE
`endif
 
//=tab SDR SDRAM
 
// External data bus size
`define SDR_EXT_DAT_SIZE 16
 
// Memory part
//=select Memory part
//`define MT48LC4M16 // Micron 4M16, 8MB
`define MT48LC16M16 // Micron 16M16, 32MB
//`define MT48LC32M16 // Micron 32M16, 64MB
//=end
 
// SDRAM clock frequency
// set refresh counter timeout
// all rows should be refreshed every 64 ms
// SDRAM CLK frequency
//=select SDRAM CLK
`define SDR_SDRAM_CLK_64 // SDRAM_CLK_64
//`define SDR_SDRAM_CLK_75 // SDRAM_CLK_75
//`define SDR_SDRAM_CLK_125 // SDRAM_CLK_125
//`define SDR_SDRAM_CLK_133 // SDRAM_CLK_133
//`define SDR_SDRAM_CLK_154 // SDRAM_CLK_154
//=end
 
`ifdef MT48LC4M16
// using 1 of MT48LC4M16
// SDRAM data width is 16
`define SDR_SDRAM_DATA_WIDTH 16
`define SDR_SDRAM_DATA_WIDTH_16
`define SDR_COL_SIZE 8
`define SDR_ROW_SIZE 12
`define SDR_ROW_SIZE_12
`define SDR_BA_SIZE 2
`endif // `ifdef MT48LC4M16
 
`ifdef MT48LC16M16
// using 1 of MT48LC16M16
// SDRAM data width is 16
`define SDR_SDRAM_DATA_WIDTH 16
`define SDR_SDRAM_DATA_WIDTH_16
`define SDR_COL_SIZE 9
`define SDR_ROW_SIZE 13
`define SDR_ROW_SIZE_13
`define SDR_BA_SIZE 2
`endif // `ifdef MT48LC16M16
 
`ifdef MT48LC32M16
// using 1 of MT48LC32M16
// SDRAM data width is 16
`define SDR_SDRAM_DATA_WIDTH 16
`define SDR_SDRAM_DATA_WIDTH_16
`define SDR_COL_SIZE 10
`define SDR_ROW_SIZE 13
`define SDR_ROW_SIZE_13
`define SDR_BA_SIZE 2
`endif // `ifdef MT48LC16M16
 
// Refresh whole memory every 64 ms
// Refresh each row every 64 ms
// refresh timeout = 64 ms / Tperiod / number_of_rows
 
// 64 MHz, row_size=12
// 64ms / (1/64MHz) / 2^12 = 1000
// ./VersatileCounter.php 10 1000
// 0101100100
 
`ifdef SDR_SDRAM_CLK_64
`ifdef SDR_ROW_SIZE_12
`define SDR_RFR_LENGTH 10
`define SDR_RFR_WRAP_VALUE 0101100100
`endif
`ifdef SDR_ROW_SIZE_13
`define SDR_RFR_LENGTH 9
`define SDR_RFR_WRAP_VALUE 001000011
`endif
`endif
`ifdef SDR_SDRAM_CLK_75
`ifdef SDR_ROW_SIZE_12
`define SDR_RFR_LENGTH 11
`define SDR_RFR_WRAP_VALUE 00110001101
`endif
`ifdef SDR_ROW_SIZE_13
`define SDR_RFR_LENGTH 10
`define SDR_RFR_WRAP_VALUE 0110111101
`endif
`endif
`ifdef SDR_SDRAM_CLK_125
`ifdef SDR_ROW_SIZE_12
`define SDR_RFR_LENGTH 11
`define SDR_RFR_WRAP_VALUE 10001000001
`endif
`ifdef SDR_ROW_SIZE_13
`define SDR_RFR_LENGTH 10
`define SDR_RFR_WRAP_VALUE 1010000111
`endif
`endif
`ifdef SDR_SDRAM_CLK_133
`ifdef SDR_ROW_SIZE_12
`define SDR_RFR_LENGTH 12
`define SDR_RFR_WRAP_VALUE 101100000111
`endif
`ifdef SDR_ROW_SIZE_13
`define SDR_RFR_LENGTH 11
`define SDR_RFR_WRAP_VALUE 11111111010
`endif
`endif
`ifdef SDR_SDRAM_CLK_154
`ifdef SDR_ROW_SIZE_12
`define SDR_RFR_LENGTH 12
`define SDR_RFR_WRAP_VALUE 000101011110
`endif
`ifdef SDR_ROW_SIZE_13
`define SDR_RFR_LENGTH 11
`define SDR_RFR_WRAP_VALUE 00111101010
`endif
`endif
 
 
// Disable burst
//`define SDR_NO_BURST
// Enable 4 beat wishbone busrt
`define SDR_BEAT4
// Enable 8 beat wishbone busrt
`define SDR_BEAT8
// Enable 16 beat wishbone busrt
`define SDR_BEAT16
 
// tRFC
`define SDR_TRFC 9
// tRP
`define SDR_TRP 2
// tRCD
`define SDR_TRCD 2
// tMRD
`define SDR_TMRD 2
 
// LMR
// [12:10] reserved
// [9] WB, write burst; 0 - programmed burst length, 1 - single location
// [8:7] OP Mode, 2'b00
// [6:4] CAS Latency; 3'b010 - 2, 3'b011 - 3
// [3] BT, Burst Type; 1'b0 - sequential, 1'b1 - interleaved
// [2:0] Burst length; 3'b000 - 1, 3'b001 - 2, 3'b010 - 4, 3'b011 - 8, 3'b111 - full page
// LMR: Write burst
`define SDR_INIT_WB 1'b0
// LMR: CAS latency
`define SDR_INIT_CL 3'b010
// LMR: Burst type
`define SDR_INIT_BT 1'b0
// LMR: Burst length
`define SDR_INIT_BL 3'b001
 
`ifdef SDR
`ifdef SDR_SDRAM_DATA_WIDTH_16
`define WB_ADR_SIZE `SDR_BA_SIZE+`SDR_COL_SIZE+`SDR_ROW_SIZE+1
`endif
`endif
//=tab DDR2 SDRAM
 
// Use existing Avalon compatible IP
`define DDR2_AVALON
// IP module name
`define DDR2_IP_NAME ALTERA_DDR2
/versatile_mem_ctrl/trunk/rtl/verilog/sdr_sdram_ctrl.v
0,0 → 1,364
//`include "versatile_mem_ctrl_defines.v"
`ifdef SDR
`timescale 1ns/1ns
`define MODULE sdr16
module `BASE`MODULE (
`undef MODULE
// wisbone i/f
`ifdef SDR_NO_BURST
dat_i, adr_i, sel_i, we_i, cyc_i, stb_i, dat_o, ack_o,
`else
dat_i, adr_i, sel_i, bte_i, we_i, cyc_i, stb_i, dat_o, ack_o,
`endif
// SDR SDRAM
ba, a, cmd, cke, cs_n, dqm, dq_i, dq_o, dq_oe,
// system
clk, rst);
 
// external data bus size
parameter dat_size = `SDR_SDRAM_DATA_WIDTH;
// memory geometry parameters
parameter ba_size = `SDR_BA_SIZE;
parameter row_size = `SDR_ROW_SIZE;
parameter col_size = `SDR_COL_SIZE;
parameter cl = `SDR_INIT_CL;
// memory timing parameters
parameter tRFC = `SDR_TRFC;
parameter tRP = `SDR_TRP;
parameter tRCD = `SDR_TRCD;
parameter tMRD = `SDR_TMRD;
// LMR
// [12:10] reserved
// [9] WB, write burst; 0 - programmed burst length, 1 - single location
// [8:7] OP Mode, 2'b00
// [6:4] CAS Latency; 3'b010 - 2, 3'b011 - 3
// [3] BT, Burst Type; 1'b0 - sequential, 1'b1 - interleaved
// [2:0] Burst length; 3'b000 - 1, 3'b001 - 2, 3'b010 - 4, 3'b011 - 8, 3'b111 - full page
parameter init_wb = `SDR_INIT_WB;
parameter init_cl = `SDR_INIT_CL;
parameter init_bt = `SDR_INIT_BT;
parameter init_bl = `SDR_INIT_BL;
input [31:0] dat_i;
input [ba_size+col_size+row_size:1] adr_i;
input [3:0] sel_i;
`ifndef SDR_NO_BURST
input [1:0] bte_i;
`endif
input we_i, cyc_i, stb_i;
output [31:0] dat_o;
output ack_o;
 
output [ba_size-1:0] ba;
output reg [12:0] a;
output reg [2:0] cmd; // {ras,cas,we}
output cke, cs_n;
output reg [1:0] dqm;
output [dat_size-1:0] dq_o;
output reg dq_oe;
input [dat_size-1:0] dq_i;
 
input clk, rst;
 
wire [ba_size-1:0] bank;
wire [row_size-1:0] row;
wire [col_size-1:0] col;
wire [12:0] col_a10_fix;
`ifdef SDR_BEAT16
parameter col_reg_width = 5;
reg [4:0] col_reg;
`else
`ifdef SDR_BEAT8
parameter col_reg_width = 4;
reg [3:0] col_reg;
`else
`ifdef SDR_BEAT4
parameter col_reg_width = 3;
reg [2:0] col_reg;
`endif
`endif
`endif
wire [0:31] shreg;
wire count0;
wire stall; // active if write burst need data
wire ref_cnt_zero;
reg refresh_req;
 
wire ack_rd, rd_ack_emptyflag;
wire ack_wr;
 
// to keep track of open rows per bank
reg [row_size-1:0] open_row[0:3];
reg [0:3] open_ba;
reg current_bank_closed, current_row_open;
 
`ifndef SDR_RFR_WRAP_VALUE
parameter rfr_length = 10;
parameter rfr_wrap_value = 1010;
`else
parameter rfr_length = `SDR_RFR_LENGTH;
parameter rfr_wrap_value = `SDR_RFR_WRAP_VALUE;
`endif
 
// cti
parameter [2:0] classic = 3'b000,
endofburst = 3'b111;
 
// bte
parameter [1:0] linear = 2'b00,
beat4 = 2'b01,
beat8 = 2'b10,
beat16 = 2'b11;
 
parameter [2:0] cmd_nop = 3'b111,
cmd_act = 3'b011,
cmd_rd = 3'b101,
cmd_wr = 3'b100,
cmd_pch = 3'b010,
cmd_rfr = 3'b001,
cmd_lmr = 3'b000;
 
// ctrl FSM
`define FSM_INIT 3'b000
`define FSM_IDLE 3'b001
`define FSM_RFR 3'b010
`define FSM_ADR 3'b011
`define FSM_PCH 3'b100
`define FSM_ACT 3'b101
`define FSM_RW 3'b111
 
assign cke = 1'b1;
assign cs_n = 1'b0;
reg [2:0] state, next;
 
function [12:0] a10_fix;
input [col_size-1:0] a;
integer i;
begin
for (i=0;i<13;i=i+1) begin
if (i<10)
if (i<col_size)
a10_fix[i] = a[i];
else
a10_fix[i] = 1'b0;
else if (i==10)
a10_fix[i] = 1'b0;
else
if (i<col_size)
a10_fix[i] = a[i-1];
else
a10_fix[i] = 1'b0;
end
end
endfunction
 
assign {bank,row,col} = adr_i;
 
always @ (posedge clk or posedge rst)
if (rst)
state <= `FSM_INIT;
else
state <= next;
always @*
begin
next = state;
case (state)
`FSM_INIT:
if (shreg[3+tRP+tRFC+tRFC+tMRD]) next = `FSM_IDLE;
`FSM_IDLE:
if (refresh_req) next = `FSM_RFR;
else if (cyc_i & stb_i & rd_ack_emptyflag) next = `FSM_ADR;
`FSM_RFR:
if (shreg[tRP+tRFC-2]) next = `FSM_IDLE; // take away two cycles because no cmd will be issued in idle and adr
`FSM_ADR:
if (current_bank_closed) next = `FSM_ACT;
else if (current_row_open) next = `FSM_RW;
else next = `FSM_PCH;
`FSM_PCH:
if (shreg[tRP]) next = `FSM_ACT;
`FSM_ACT:
if (shreg[tRCD]) next = `FSM_RW;
`FSM_RW:
`ifdef SDR_NO_BURST
if (shreg[1]) next = `FSM_IDLE;
`else
if (bte_i==linear & shreg[1]) next = `FSM_IDLE;
`ifdef SDR_BEAT4
else if (bte_i==beat4 & shreg[7]) next = `FSM_IDLE;
`endif
`ifdef SDR_BEAT8
else if (bte_i==beat8 & shreg[15]) next = `FSM_IDLE;
`endif
`ifdef SDR_BEAT16
else if (bte_i==beat16 & shreg[31]) next = `FSM_IDLE;
`endif
`endif
endcase
end
 
// active if write burst need data
assign stall = state==`FSM_RW & next==`FSM_RW & ~stb_i & count0 & we_i;
// counter
`define MODULE cnt_shreg_ce_clear
`VLBASE`MODULE # ( .length(32))
`undef MODULE
cnt0 (
.cke(!stall),
.clear(state!=next),
.q(shreg),
.rst(rst),
.clk(clk));
 
`define MODULE dff_ce_clear
`VLBASE`MODULE
`undef MODULE
dff_count0 (
.d(!count0),
.ce(!stall),
.clear(state!=next),
.q(count0),
.rst(rst),
.clk(clk));
 
// ba, a, cmd
// col_reg_a10 has bit [10] set to zero to disable auto precharge
`ifdef SDR_NO_BURST
assign col_a10_fix = a10_fix(col);
`else
assign col_a10_fix = a10_fix({col[col_size-1:col_reg_width],col_reg});
`endif
 
// outputs dependent on state vector
always @ (*)
begin
{a,cmd} = {13'd0,cmd_nop};
dqm = 2'b11;
dq_oe = 1'b0;
case (state)
`FSM_INIT:
if (shreg[3]) begin
{a,cmd} = {13'b0010000000000, cmd_pch};
end else if (shreg[3+tRP] | shreg[3+tRP+tRFC])
{a,cmd} = {13'd0, cmd_rfr};
else if (shreg[3+tRP+tRFC+tRFC])
{a,cmd} = {3'b000,init_wb,2'b00,init_cl,init_bt,init_bl,cmd_lmr};
`FSM_RFR:
if (shreg[0])
{a,cmd} = {13'b0010000000000, cmd_pch};
else if (shreg[tRP])
{a,cmd} = {13'd0, cmd_rfr};
`FSM_PCH:
if (shreg[0])
{a,cmd} = {13'd0,cmd_pch};
`FSM_ACT:
if (shreg[0])
{a[row_size-1:0],cmd} = {row,cmd_act};
`FSM_RW:
begin
if (we_i & !count0)
cmd = cmd_wr;
else if (!count0)
cmd = cmd_rd;
else
cmd = cmd_nop;
if (we_i & !count0)
dqm = ~sel_i[3:2];
else if (we_i & count0)
dqm = ~sel_i[1:0];
else
dqm = 2'b00;
if (we_i)
dq_oe = 1'b1;
if (~stall)
a = col_a10_fix;
end
endcase
end
 
assign ba = bank;
// precharge individual bank A10=0
// precharge all bank A10=1
genvar i;
generate
for (i=0;i<2<<ba_size-1;i=i+1) begin
always @ (posedge clk or posedge rst)
if (rst)
{open_ba[i],open_row[i]} <= {1'b0,{row_size{1'b0}}};
else
if (cmd==cmd_pch & (a[10] | bank==i))
open_ba[i] <= 1'b0;
else if (cmd==cmd_act & bank==i)
{open_ba[i],open_row[i]} <= {1'b1,row};
 
end
endgenerate
 
`ifndef SDR_NO_BURST
always @ (posedge clk or posedge rst)
if (rst)
col_reg <= {col_reg_width{1'b0}};
else
case (state)
`FSM_IDLE:
col_reg <= col[col_reg_width-1:0];
`FSM_RW:
if (~stall)
case (bte_i)
`ifdef SDR_BEAT4
beat4: col_reg[2:0] <= col_reg[2:0] + 3'd1;
`endif
`ifdef SDR_BEAT8
beat8: col_reg[3:0] <= col_reg[3:0] + 4'd1;
`endif
`ifdef SDR_BEAT16
beat16: col_reg[4:0] <= col_reg[4:0] + 5'd1;
`endif
endcase
endcase
`endif
 
// bank and row open ?
always @ (posedge clk or posedge rst)
if (rst)
{current_bank_closed, current_row_open} <= {1'b1, 1'b0};
else
{current_bank_closed, current_row_open} <= {!(open_ba[bank]), open_row[bank]==row};
 
// refresh counter
`define MODULE cnt_lfsr_zq
`VLBASE`MODULE # ( .length(rfr_length), .wrap_value (rfr_wrap_value)) ref_counter0( .zq(ref_cnt_zero), .rst(rst), .clk(clk));
`undef MODULE
 
always @ (posedge clk or posedge rst)
if (rst)
refresh_req <= 1'b0;
else
if (ref_cnt_zero)
refresh_req <= 1'b1;
else if (state==`FSM_RFR)
refresh_req <= 1'b0;
 
assign dat_o[15:0] = dq_i;
`define MODULE dff
`VLBASE`MODULE # ( .width(16)) wb_dat_dff ( .d(dat_o[15:0]), .q(dat_o[31:16]), .clk(clk), .rst(rst));
`undef MODULE
 
assign ack_wr = (state==`FSM_RW & count0 & we_i);
 
`define MODULE delay_emptyflag
`VLBASE`MODULE # ( .depth(cl+2)) delay0 ( .d(state==`FSM_RW & count0 & !we_i), .q(ack_rd), .emptyflag(rd_ack_emptyflag), .clk(clk), .rst(rst));
`undef MODULE
 
assign ack_o = ack_rd | ack_wr;
 
assign dq_o = (!count0) ? dat_i[31:16] : dat_i[15:0];
 
endmodule
`endif
/versatile_mem_ctrl/trunk/rtl/verilog/versatile_mem_ctrl_top.v
0,0 → 1,956
/*
module `BASE`MODULE (
`undef MODULE
// wishbone slave side
wbs_dat_i, wbs_adr_i, wbs_sel_i, wbs_bte_i, wbs_cti_i, wbs_we_i, wbs_cyc_i, wbs_stb_i, wbs_dat_o, wbs_ack_o, wbs_clk, wbs_rst,
// wishbone master side
wbm_dat_o, wbm_adr_o, wbm_sel_o, wbm_bte_o, wbm_cti_o, wbm_we_o, wbm_cyc_o, wbm_stb_o, wbm_dat_i, wbm_ack_i, wbm_clk, wbm_rst);
 
`ifdef WB3_ARBITER_TYPE1
`define MODULE wb3_arbiter_type1
module `BASE`MODULE (
`undef MODULE
wbm_dat_o, wbm_adr_o, wbm_sel_o, wbm_cti_o, wbm_bte_o, wbm_we_o, wbm_stb_o, wbm_cyc_o,
wbm_dat_i, wbm_ack_i, wbm_err_i, wbm_rty_i,
wbs_dat_i, wbs_adr_i, wbs_sel_i, wbs_cti_i, wbs_bte_i, wbs_we_i, wbs_stb_i, wbs_cyc_i,
wbs_dat_o, wbs_ack_o, wbs_err_o, wbs_rty_o,
wb_clk, wb_rst
);
*/
//`include "versatile_mem_ctrl_defines.v"
`define MODULE top
module `BASE`MODULE (
`undef MODULE
input [31:0] wbs_1_dat_i,
input [`WB_ADR_SIZE-1:2] wbs_1_adr_i,
input [3:0] wbs_1_sel_i,
input [2:0] wbs_1_cti_i,
input [1:0] wbs_1_bte_i,
input wbs_1_we_i,
input wbs_1_stb_i,
input wbs_1_cyc_i,
output [31:0] wbs_1_dat_o,
output wbs_1_ack_o,
input wbs_1_clk_i,
input wbs_1_rst_i,
`ifdef WB_GRPS_2
input [31:0] wbs_2_dat_i,
input [`WB_ADR_SIZE-1:2] wbs_2_adr_i,
input [3:0] wbs_2_sel_i,
input [2:0] wbs_2_cti_i,
input [1:0] wbs_2_bte_i,
input wbs_2_we_i,
input wbs_2_stb_i,
input wbs_2_cyc_i,
output [31:0] wbs_2_dat_o,
output wbs_2_ack_o,
input wbs_2_clk_i,
input wbs_2_rst_i,
`endif
`ifdef WB_GRPS_3
input [31:0] wbs_3_dat_i,
input [`WB_ADR_SIZE-1:2] wbs_3_adr_i,
input [3:0] wbs_3_sel_i,
input [2:0] wbs_3_cti_i,
input [1:0] wbs_3_bte_i,
input wbs_3_we_i,
input wbs_3_stb_i,
input wbs_3_cyc_i,
output [31:0] wbs_3_dat_o,
output wbs_3_ack_o,
input wbs_3_clk_i,
input wbs_3_rst_i,
`endif
`ifdef WB_GRPS_4
input [31:0] wbs_4_dat_i,
input [`WB_ADR_SIZE-1:2] wbs_4_adr_i,
input [3:0] wbs_4_sel_i,
input [2:0] wbs_4_cti_i,
input [1:0] wbs_4_bte_i,
input wbs_4_we_i,
input wbs_4_stb_i,
input wbs_4_cyc_i,
output [31:0] wbs_4_dat_o,
output wbs_4_ack_o,
input wbs_4_clk_i,
input wbs_4_rst_i,
`endif
`ifdef WB_GRPS_5
input [31:0] wbs_5_dat_i,
input [`WB_ADR_SIZE-1:2] wbs_5_adr_i,
input [3:0] wbs_5_sel_i,
input [2:0] wbs_5_cti_i,
input [1:0] wbs_5_bte_i,
input wbs_5_we_i,
input wbs_5_stb_i,
input wbs_5_cyc_i,
output [31:0] wbs_5_dat_o,
output wbs_5_ack_o,
input wbs_5_clk_i,
input wbs_5_rst_i,
`endif
`ifdef WB_GRPS_6
input [31:0] wbs_6_dat_i,
input [`WB_ADR_SIZE-1:2] wbs_6_adr_i,
input [3:0] wbs_6_sel_i,
input [2:0] wbs_6_cti_i,
input [1:0] wbs_6_bte_i,
input wbs_6_we_i,
input wbs_6_stb_i,
input wbs_6_cyc_i,
output [31:0] wbs_6_dat_o,
output wbs_6_ack_o,
input wbs_6_clk_i,
input wbs_6_rst_i,
`endif
`ifdef WB_GRPS_7
input [31:0] wbs_7_dat_i,
input [`WB_ADR_SIZE-1:2] wbs_7_adr_i,
input [3:0] wbs_7_sel_i,
input [2:0] wbs_7_cti_i,
input [1:0] wbs_7_bte_i,
input wbs_7_we_i,
input wbs_7_stb_i,
input wbs_7_cyc_i,
output [31:0] wbs_7_dat_o,
output wbs_7_ack_o,
input wbs_7_clk_i,
input wbs_7_rst_i,
`endif
`ifdef WB_GRPS_8
input [31:0] wbs_8_dat_i,
input [`WB_ADR_SIZE-1:2] wbs_8_adr_i,
input [3:0] wbs_8_sel_i,
input [2:0] wbs_8_cti_i,
input [1:0] wbs_8_bte_i,
input wbs_8_we_i,
input wbs_8_stb_i,
input wbs_8_cyc_i,
output [31:0] wbs_8_dat_o,
output wbs_8_ack_o,
input wbs_8_clk_i,
input wbs_8_rst_i,
`endif
`ifdef SDR
output [1:0] ba,
output [12:0] a,
output [2:0] cmd,
output cke,
output cs_n,
output [`SDR_SDRAM_DATA_WIDTH/8-1:0] dqm,
output [`SDR_SDRAM_DATA_WIDTH-1:0] dq_o,
input [`SDR_SDRAM_DATA_WIDTH-1:0] dq_i,
output dq_oe,
`endif
input mem_clk_i,
input mem_rst_i
);
 
wire [31:0] wbm_1_dat_o;
wire [`WB_ADR_SIZE-1:2] wbm_1_adr_o;
wire [3:0] wbm_1_sel_o;
wire [2:0] wbm_1_cti_o;
wire [1:0] wbm_1_bte_o;
wire wbm_1_we_o;
wire wbm_1_stb_o;
wire wbm_1_cyc_o;
wire [31:0] wbm_1_dat_i;
wire wbm_1_ack_i;
`ifdef WB_GRPS_2
wire [31:0] wbm_2_dat_o;
wire [`WB_ADR_SIZE-1:2] wbm_2_adr_o;
wire [3:0] wbm_2_sel_o;
wire [2:0] wbm_2_cti_o;
wire [1:0] wbm_2_bte_o;
wire wbm_2_we_o;
wire wbm_2_stb_o;
wire wbm_2_cyc_o;
wire [31:0] wbm_2_dat_i;
wire wbm_2_ack_i;
`endif
`ifdef WB_GRPS_3
wire [31:0] wbm_3_dat_o;
wire [`WB_ADR_SIZE-1:2] wbm_3_adr_o;
wire [3:0] wbm_3_sel_o;
wire [2:0] wbm_3_cti_o;
wire [1:0] wbm_3_bte_o;
wire wbm_3_we_o;
wire wbm_3_stb_o;
wire wbm_3_cyc_o;
wire [31:0] wbm_3_dat_i;
wire wbm_3_ack_i;
`endif
`ifdef WB_GRPS_4
wire [31:0] wbm_4_dat_o;
wire [`WB_ADR_SIZE-1:2] wbm_4_adr_o;
wire [3:0] wbm_4_sel_o;
wire [2:0] wbm_4_cti_o;
wire [1:0] wbm_4_bte_o;
wire wbm_4_we_o;
wire wbm_4_stb_o;
wire wbm_4_cyc_o;
wire [31:0] wbm_4_dat_i;
wire wbm_4_ack_i;
`endif
`ifdef WB_GRPS_5
wire [31:0] wbm_5_dat_o;
wire [`WB_ADR_SIZE-1:2] wbm_5_adr_o;
wire [3:0] wbm_5_sel_o;
wire [2:0] wbm_5_cti_o;
wire [1:0] wbm_5_bte_o;
wire wbm_5_we_o;
wire wbm_5_stb_o;
wire wbm_5_cyc_o;
wire [31:0] wbm_5_dat_i;
wire wbm_5_ack_i;
`endif
`ifdef WB_GRPS_6
wire [31:0] wbm_6_dat_o;
wire [`WB_ADR_SIZE-1:2] wbm_6_adr_o;
wire [3:0] wbm_6_sel_o;
wire [2:0] wbm_6_cti_o;
wire [1:0] wbm_6_bte_o;
wire wbm_6_we_o;
wire wbm_6_stb_o;
wire wbm_6_cyc_o;
wire [31:0] wbm_6_dat_i;
wire wbm_6_ack_i;
`endif
`ifdef WB_GRPS_7
wire [31:0] wbm_7_dat_o;
wire [`WB_ADR_SIZE-1:2] wbm_7_adr_o;
wire [3:0] wbm_7_sel_o;
wire [2:0] wbm_7_cti_o;
wire [1:0] wbm_7_bte_o;
wire wbm_7_we_o;
wire wbm_7_stb_o;
wire wbm_7_cyc_o;
wire [31:0] wbm_7_dat_i;
wire wbm_7_ack_i;
`endif
`ifdef WB_GRPS_8
wire [31:0] wbm_8_dat_o;
wire [`WB_ADR_SIZE-1:2] wbm_8_adr_o;
wire [3:0] wbm_8_sel_o;
wire [2:0] wbm_8_cti_o;
wire [1:0] wbm_8_bte_o;
wire wbm_8_we_o;
wire wbm_8_stb_o;
wire wbm_8_cyc_o;
wire [31:0] wbm_8_dat_i;
wire wbm_8_ack_i;
`endif
wire [31:0] wbs_dat_i;
wire [`WB_ADR_SIZE-1:2] wbs_adr_i;
wire [3:0] wbs_sel_i;
wire [2:0] wbs_cti_i;
wire [1:0] wbs_bte_i;
wire wbs_we_i;
wire wbs_stb_i;
wire wbs_cyc_i;
wire [31:0] wbs_dat_o;
wire wbs_ack_o;
 
`define MODULE wb3wb3_bridge
 
`ifdef WB1_CLK
wire [31-(`WB_ADR_SIZE):0] dummy1;
`VLBASE`MODULE wbwb1 (
// wishbone slave side
.wbs_dat_i(wbs_1_dat_i),
.wbs_adr_i({{32-(`WB_ADR_SIZE){1'b0}},wbs_1_adr_i}),
.wbs_sel_i(wbs_1_sel_i),
.wbs_bte_i(wbs_1_bte_i),
.wbs_cti_i(wbs_1_cti_i),
.wbs_we_i (wbs_1_we_i),
.wbs_cyc_i(wbs_1_cyc_i),
.wbs_stb_i(wbs_1_stb_i),
.wbs_dat_o(wbs_1_dat_o),
.wbs_ack_o(wbs_1_ack_o),
.wbs_clk(wbs_1_clk_i),
.wbs_rst(wbs_1_rst_i),
// wishbone master side
.wbm_dat_o(wbm_1_dat_o),
.wbm_adr_o({dummy1,wbm_1_adr_o}),
.wbm_sel_o(wbm_1_sel_o),
.wbm_bte_o(wbm_1_bte_o),
.wbm_cti_o(wbm_1_cti_o),
.wbm_we_o(wbm_1_we_o),
.wbm_cyc_o(wbm_1_cyc_o),
.wbm_stb_o(wbm_1_stb_o),
.wbm_dat_i(wbm_1_dat_i),
.wbm_ack_i(wbm_1_ack_i),
.wbm_clk(mem_clk_i),
.wbm_rst(mem_rst_i));
`endif
`ifdef WB1_MEM_CLK
assign wbm_1_dat_o = wbs_1_dat_i;
assign wbm_1_adr_o = wbs_1_adr_i;
assign wbm_1_sel_o = wbs_1_sel_i;
assign wbm_1_bte_o = wbs_1_bte_i;
assign wbm_1_cti_o = wbs_1_cti_i;
assign wbm_1_we_o = wbs_1_we_i;
assign wbm_1_cyc_o = wbs_1_cyc_i;
assign wbm_1_stb_o = wbs_1_stb_i;
assign wbs_1_dat_o = wbm_1_dat_i;
assign wbs_1_ack_o = wbm_1_ack_i;
`endif
 
`ifdef WB_GRPS_2
`ifdef WB2_CLK
wire [31-(`WB_ADR_SIZE):0] dummy2;
`VLBASE`MODULE wbwb2 (
// wishbone slave side
.wbs_dat_i(wbs_2_dat_i),
.wbs_adr_i({{32-(`WB_ADR_SIZE){1'b0}},wbs_2_adr_i}),
.wbs_sel_i(wbs_2_sel_i),
.wbs_bte_i(wbs_2_bte_i),
.wbs_cti_i(wbs_2_cti_i),
.wbs_we_i (wbs_2_we_i),
.wbs_cyc_i(wbs_2_cyc_i),
.wbs_stb_i(wbs_2_stb_i),
.wbs_dat_o(wbs_2_dat_o),
.wbs_ack_o(wbs_2_ack_o),
.wbs_clk(wbs_2_clk_i),
.wbs_rst(wbs_2_rst_i),
// wishbone master side
.wbm_dat_o(wbm_2_dat_o),
.wbm_adr_o({dummy2,wbm_2_adr_o}),
.wbm_sel_o(wbm_2_sel_o),
.wbm_bte_o(wbm_2_bte_o),
.wbm_cti_o(wbm_2_cti_o),
.wbm_we_o(wbm_2_we_o),
.wbm_cyc_o(wbm_2_cyc_o),
.wbm_stb_o(wbm_2_stb_o),
.wbm_dat_i(wbm_2_dat_i),
.wbm_ack_i(wbm_2_ack_i),
.wbm_clk(mem_clk_i),
.wbm_rst(mem_rst_i));
`endif
`ifdef WB2_MEM_CLK
assign wbm_2_dat_o = wbs_2_dat_i;
assign wbm_2_adr_o = wbs_2_adr_i;
assign wbm_2_sel_o = wbs_2_sel_i;
assign wbm_2_bte_o = wbs_2_bte_i;
assign wbm_2_cti_o = wbs_2_cti_i;
assign wbm_2_we_o = wbs_2_we_i;
assign wbm_2_cyc_o = wbs_2_cyc_i;
assign wbm_2_stb_o = wbs_2_stb_i;
assign wbs_2_dat_o = wbm_2_dat_i;
assign wbs_2_ack_o = wbm_2_ack_i;
`endif
`endif
 
`ifdef WB_GRPS_3
`ifdef WB3_CLK
wire [31-(`WB_ADR_SIZE):0] dummy3;
`VLBASE`MODULE wbwb3 (
// wishbone slave side
.wbs_dat_i(wbs_3_dat_i),
.wbs_adr_i({{32-(`WB_ADR_SIZE){1'b0}},wbs_3_adr_i}),
.wbs_sel_i(wbs_3_sel_i),
.wbs_bte_i(wbs_3_bte_i),
.wbs_cti_i(wbs_3_cti_i),
.wbs_we_i (wbs_3_we_i),
.wbs_cyc_i(wbs_3_cyc_i),
.wbs_stb_i(wbs_3_stb_i),
.wbs_dat_o(wbs_3_dat_o),
.wbs_ack_o(wbs_3_ack_o),
.wbs_clk(wbs_3_clk_i),
.wbs_rst(wbs_3_rst_i),
// wishbone master side
.wbm_dat_o(wbm_3_dat_o),
.wbm_adr_o({dummy3,wbm_3_adr_o}),
.wbm_sel_o(wbm_3_sel_o),
.wbm_bte_o(wbm_3_bte_o),
.wbm_cti_o(wbm_3_cti_o),
.wbm_we_o(wbm_3_we_o),
.wbm_cyc_o(wbm_3_cyc_o),
.wbm_stb_o(wbm_3_stb_o),
.wbm_dat_i(wbm_3_dat_i),
.wbm_ack_i(wbm_3_ack_i),
.wbm_clk(mem_clk_i),
.wbm_rst(mem_rst_i));
`endif
`ifdef WB3_MEM_CLK
assign wbm_3_dat_o = wbs_3_dat_i;
assign wbm_3_adr_o = wbs_3_adr_i;
assign wbm_3_sel_o = wbs_3_sel_i;
assign wbm_3_bte_o = wbs_3_bte_i;
assign wbm_3_cti_o = wbs_3_cti_i;
assign wbm_3_we_o = wbs_3_we_i;
assign wbm_3_cyc_o = wbs_3_cyc_i;
assign wbm_3_stb_o = wbs_3_stb_i;
assign wbs_3_dat_o = wbm_3_dat_i;
assign wbs_3_ack_o = wbm_3_ack_i;
`endif
`endif
 
`ifdef WB_GRPS_4
`ifdef WB4_CLK
wire [31-(`WB_ADR_SIZE):0] dummy4;
`VLBASE`MODULE wbwb4 (
// wishbone slave side
.wbs_dat_i(wbs_4_dat_i),
.wbs_adr_i({{32-(`WB_ADR_SIZE){1'b0}},wbs_4_adr_i}),
.wbs_sel_i(wbs_4_sel_i),
.wbs_bte_i(wbs_4_bte_i),
.wbs_cti_i(wbs_4_cti_i),
.wbs_we_i (wbs_4_we_i),
.wbs_cyc_i(wbs_4_cyc_i),
.wbs_stb_i(wbs_4_stb_i),
.wbs_dat_o(wbs_4_dat_o),
.wbs_ack_o(wbs_4_ack_o),
.wbs_clk(wbs_4_clk_i),
.wbs_rst(wbs_4_rst_i),
// wishbone master side
.wbm_dat_o(wbm_4_dat_o),
.wbm_adr_o({dummy4,wbm_4_adr_o}),
.wbm_sel_o(wbm_4_sel_o),
.wbm_bte_o(wbm_4_bte_o),
.wbm_cti_o(wbm_4_cti_o),
.wbm_we_o(wbm_4_we_o),
.wbm_cyc_o(wbm_4_cyc_o),
.wbm_stb_o(wbm_4_stb_o),
.wbm_dat_i(wbm_4_dat_i),
.wbm_ack_i(wbm_4_ack_i),
.wbm_clk(mem_clk_i),
.wbm_rst(mem_rst_i));
`endif
`ifdef WB4_MEM_CLK
assign wbm_4_dat_o = wbs_4_dat_i;
assign wbm_4_adr_o = wbs_4_adr_i;
assign wbm_4_sel_o = wbs_4_sel_i;
assign wbm_4_bte_o = wbs_4_bte_i;
assign wbm_4_cti_o = wbs_4_cti_i;
assign wbm_4_we_o = wbs_4_we_i;
assign wbm_4_cyc_o = wbs_4_cyc_i;
assign wbm_4_stb_o = wbs_4_stb_i;
assign wbs_4_dat_o = wbm_4_dat_i;
assign wbs_4_ack_o = wbm_4_ack_i;
`endif
`endif
 
`ifdef WB_GRPS_5
`ifdef WB5_CLK
wire [31-(`WB_ADR_SIZE):0] dummy5;
`VLBASE`MODULE wbwb5 (
// wishbone slave side
.wbs_dat_i(wbs_5_dat_i),
.wbs_adr_i({{32-(`WB_ADR_SIZE){1'b0}},wbs_5_adr_i}),
.wbs_sel_i(wbs_5_sel_i),
.wbs_bte_i(wbs_5_bte_i),
.wbs_cti_i(wbs_5_cti_i),
.wbs_we_i (wbs_5_we_i),
.wbs_cyc_i(wbs_5_cyc_i),
.wbs_stb_i(wbs_5_stb_i),
.wbs_dat_o(wbs_5_dat_o),
.wbs_ack_o(wbs_5_ack_o),
.wbs_clk(wbs_5_clk_i),
.wbs_rst(wbs_5_rst_i),
// wishbone master side
.wbm_dat_o(wbm_5_dat_o),
.wbm_adr_o({dummy5,wbm_5_adr_o}),
.wbm_sel_o(wbm_5_sel_o),
.wbm_bte_o(wbm_5_bte_o),
.wbm_cti_o(wbm_5_cti_o),
.wbm_we_o(wbm_5_we_o),
.wbm_cyc_o(wbm_5_cyc_o),
.wbm_stb_o(wbm_5_stb_o),
.wbm_dat_i(wbm_5_dat_i),
.wbm_ack_i(wbm_5_ack_i),
.wbm_clk(mem_clk_i),
.wbm_rst(mem_rst_i));
`endif
`ifdef WB5_MEM_CLK
assign wbm_5_dat_o = wbs_5_dat_i;
assign wbm_5_adr_o = wbs_5_adr_i;
assign wbm_5_sel_o = wbs_5_sel_i;
assign wbm_5_bte_o = wbs_5_bte_i;
assign wbm_5_cti_o = wbs_5_cti_i;
assign wbm_5_we_o = wbs_5_we_i;
assign wbm_5_cyc_o = wbs_5_cyc_i;
assign wbm_5_stb_o = wbs_5_stb_i;
assign wbs_5_dat_o = wbm_5_dat_i;
assign wbs_5_ack_o = wbm_5_ack_i;
`endif
`endif
 
`ifdef WB_GRPS_6
`ifdef WB6_CLK
wire [31-(`WB_ADR_SIZE):0] dummy6;
`VLBASE`MODULE wbwb6 (
// wishbone slave side
.wbs_dat_i(wbs_6_dat_i),
.wbs_adr_i({{32-(`WB_ADR_SIZE){1'b0}},wbs_6_adr_i}),
.wbs_sel_i(wbs_6_sel_i),
.wbs_bte_i(wbs_6_bte_i),
.wbs_cti_i(wbs_6_cti_i),
.wbs_we_i (wbs_6_we_i),
.wbs_cyc_i(wbs_6_cyc_i),
.wbs_stb_i(wbs_6_stb_i),
.wbs_dat_o(wbs_6_dat_o),
.wbs_ack_o(wbs_6_ack_o),
.wbs_clk(wbs_6_clk_i),
.wbs_rst(wbs_6_rst_i),
// wishbone master side
.wbm_dat_o(wbm_6_dat_o),
.wbm_adr_o({dummy6,wbm_6_adr_o}),
.wbm_sel_o(wbm_6_sel_o),
.wbm_bte_o(wbm_6_bte_o),
.wbm_cti_o(wbm_6_cti_o),
.wbm_we_o(wbm_6_we_o),
.wbm_cyc_o(wbm_6_cyc_o),
.wbm_stb_o(wbm_6_stb_o),
.wbm_dat_i(wbm_6_dat_i),
.wbm_ack_i(wbm_6_ack_i),
.wbm_clk(mem_clk_i),
.wbm_rst(mem_rst_i));
`endif
`ifdef WB6_MEM_CLK
assign wbm_6_dat_o = wbs_6_dat_i;
assign wbm_6_adr_o = wbs_6_adr_i;
assign wbm_6_sel_o = wbs_6_sel_i;
assign wbm_6_bte_o = wbs_6_bte_i;
assign wbm_6_cti_o = wbs_6_cti_i;
assign wbm_6_we_o = wbs_6_we_i;
assign wbm_6_cyc_o = wbs_6_cyc_i;
assign wbm_6_stb_o = wbs_6_stb_i;
assign wbs_6_dat_o = wbm_6_dat_i;
assign wbs_6_ack_o = wbm_6_ack_i;
`endif
`endif
 
`ifdef WB_GRPS_7
`ifdef WB7_CLK
wire [31-(`WB_ADR_SIZE):0] dummy7;
`VLBASE`MODULE wbwb7 (
// wishbone slave side
.wbs_dat_i(wbs_7_dat_i),
.wbs_adr_i({{32-(`WB_ADR_SIZE){1'b0}},wbs_7_adr_i}),
.wbs_sel_i(wbs_7_sel_i),
.wbs_bte_i(wbs_7_bte_i),
.wbs_cti_i(wbs_7_cti_i),
.wbs_we_i (wbs_7_we_i),
.wbs_cyc_i(wbs_7_cyc_i),
.wbs_stb_i(wbs_7_stb_i),
.wbs_dat_o(wbs_7_dat_o),
.wbs_ack_o(wbs_7_ack_o),
.wbs_clk(wbs_7_clk_i),
.wbs_rst(wbs_7_rst_i),
// wishbone master side
.wbm_dat_o(wbm_7_dat_o),
.wbm_adr_o({dummy7,wbm_7_adr_o}),
.wbm_sel_o(wbm_7_sel_o),
.wbm_bte_o(wbm_7_bte_o),
.wbm_cti_o(wbm_7_cti_o),
.wbm_we_o(wbm_7_we_o),
.wbm_cyc_o(wbm_7_cyc_o),
.wbm_stb_o(wbm_7_stb_o),
.wbm_dat_i(wbm_7_dat_i),
.wbm_ack_i(wbm_7_ack_i),
.wbm_clk(mem_clk_i),
.wbm_rst(mem_rst_i));
`endif
`ifdef WB7_MEM_CLK
assign wbm_7_dat_o = wbs_7_dat_i;
assign wbm_7_adr_o = wbs_7_adr_i;
assign wbm_7_sel_o = wbs_7_sel_i;
assign wbm_7_bte_o = wbs_7_bte_i;
assign wbm_7_cti_o = wbs_7_cti_i;
assign wbm_7_we_o = wbs_7_we_i;
assign wbm_7_cyc_o = wbs_7_cyc_i;
assign wbm_7_stb_o = wbs_7_stb_i;
assign wbs_7_dat_o = wbm_7_dat_i;
assign wbs_7_ack_o = wbm_7_ack_i;
`endif
`endif
 
`ifdef WB_GRPS_8
`ifdef WB8_CLK
wire [31-(`WB_ADR_SIZE):0] dummy8;
`VLBASE`MODULE wbwb8 (
// wishbone slave side
.wbs_dat_i(wbs_8_dat_i),
.wbs_adr_i({{32-(`WB_ADR_SIZE){1'b0}},wbs_8_adr_i}),
.wbs_sel_i(wbs_8_sel_i),
.wbs_bte_i(wbs_8_bte_i),
.wbs_cti_i(wbs_8_cti_i),
.wbs_we_i (wbs_8_we_i),
.wbs_cyc_i(wbs_8_cyc_i),
.wbs_stb_i(wbs_8_stb_i),
.wbs_dat_o(wbs_8_dat_o),
.wbs_ack_o(wbs_8_ack_o),
.wbs_clk(wbs_8_clk_i),
.wbs_rst(wbs_8_rst_i),
// wishbone master side
.wbm_dat_o(wbm_8_dat_o),
.wbm_adr_o({dummy8,wbm_8_adr_o}),
.wbm_sel_o(wbm_8_sel_o),
.wbm_bte_o(wbm_8_bte_o),
.wbm_cti_o(wbm_8_cti_o),
.wbm_we_o(wbm_8_we_o),
.wbm_cyc_o(wbm_8_cyc_o),
.wbm_stb_o(wbm_8_stb_o),
.wbm_dat_i(wbm_8_dat_i),
.wbm_ack_i(wbm_8_ack_i),
.wbm_clk(mem_clk_i),
.wbm_rst(mem_rst_i));
`endif
`ifdef WB8_MEM_CLK
assign wbm_8_dat_o = wbs_8_dat_i;
assign wbm_8_adr_o = wbs_8_adr_i;
assign wbm_8_sel_o = wbs_8_sel_i;
assign wbm_8_bte_o = wbs_8_bte_i;
assign wbm_8_cti_o = wbs_8_cti_i;
assign wbm_8_we_o = wbs_8_we_i;
assign wbm_8_cyc_o = wbs_8_cyc_i;
assign wbm_8_stb_o = wbs_8_stb_i;
assign wbs_8_dat_o = wbm_8_dat_i;
assign wbs_8_ack_o = wbm_8_ack_i;
`endif
`endif
 
`undef MODULE
 
`ifdef WB_GRPS_2
// we have at least two ports and need an arbiter
`define MODULE wb3_arbiter_type1
`VLBASE`MODULE
# (.nr_of_ports(`NR_OF_PORTS), .adr_size(`WB_ADR_SIZE))
wb0(
`undef MODULE
.wbm_dat_o({wbm_1_dat_o,wbm_2_dat_o
`ifdef WB_GRPS_3
,wbm_3_dat_o
`endif
`ifdef WB_GRPS_4
,wbm_4_dat_o
`endif
`ifdef WB_GRPS_5
,wbm_5_dat_o
`endif
`ifdef WB_GRPS_6
,wbm_6_dat_o
`endif
`ifdef WB_GRPS_7
,wbm_7_dat_o
`endif
`ifdef WB_GRPS_8
,wbm_8_dat_o
`endif
}),
.wbm_adr_o({wbm_1_adr_o,wbm_2_adr_o
`ifdef WB_GRPS_3
,wbm_3_adr_o
`endif
`ifdef WB_GRPS_4
,wbm_4_adr_o
`endif
`ifdef WB_GRPS_5
,wbm_5_adr_o
`endif
`ifdef WB_GRPS_6
,wbm_6_adr_o
`endif
`ifdef WB_GRPS_7
,wbm_7_adr_o
`endif
`ifdef WB_GRPS_8
,wbm_8_adr_o
`endif
}),
.wbm_sel_o({wbm_1_sel_o,wbm_2_sel_o
`ifdef WB_GRPS_3
,wbm_3_sel_o
`endif
`ifdef WB_GRPS_4
,wbm_4_sel_o
`endif
`ifdef WB_GRPS_5
,wbm_5_sel_o
`endif
`ifdef WB_GRPS_6
,wbm_6_sel_o
`endif
`ifdef WB_GRPS_7
,wbm_7_sel_o
`endif
`ifdef WB_GRPS_8
,wbm_8_sel_o
`endif
}),
.wbm_cti_o({wbm_1_cti_o,wbm_2_cti_o
`ifdef WB_GRPS_3
,wbm_3_cti_o
`endif
`ifdef WB_GRPS_4
,wbm_4_cti_o
`endif
`ifdef WB_GRPS_5
,wbm_5_cti_o
`endif
`ifdef WB_GRPS_6
,wbm_6_cti_o
`endif
`ifdef WB_GRPS_7
,wbm_7_cti_o
`endif
`ifdef WB_GRPS_8
,wbm_8_cti_o
`endif
}),
.wbm_bte_o({wbm_1_bte_o,wbm_2_bte_o
`ifdef WB_GRPS_3
,wbm_3_bte_o
`endif
`ifdef WB_GRPS_4
,wbm_4_bte_o
`endif
`ifdef WB_GRPS_5
,wbm_5_bte_o
`endif
`ifdef WB_GRPS_6
,wbm_6_bte_o
`endif
`ifdef WB_GRPS_7
,wbm_7_bte_o
`endif
`ifdef WB_GRPS_8
,wbm_8_bte_o
`endif
}),
.wbm_we_o({wbm_1_we_o,wbm_2_we_o
`ifdef WB_GRPS_3
,wbm_3_we_o
`endif
`ifdef WB_GRPS_4
,wbm_4_we_o
`endif
`ifdef WB_GRPS_5
,wbm_5_we_o
`endif
`ifdef WB_GRPS_6
,wbm_6_we_o
`endif
`ifdef WB_GRPS_7
,wbm_7_we_o
`endif
`ifdef WB_GRPS_8
,wbm_8_we_o
`endif
}),
.wbm_stb_o({wbm_1_stb_o,wbm_2_stb_o
`ifdef WB_GRPS_3
,wbm_3_stb_o
`endif
`ifdef WB_GRPS_4
,wbm_4_stb_o
`endif
`ifdef WB_GRPS_5
,wbm_5_stb_o
`endif
`ifdef WB_GRPS_6
,wbm_6_stb_o
`endif
`ifdef WB_GRPS_7
,wbm_7_stb_o
`endif
`ifdef WB_GRPS_8
,wbm_8_stb_o
`endif
}),
.wbm_cyc_o({wbm_1_cyc_o,wbm_2_cyc_o
`ifdef WB_GRPS_3
,wbm_3_cyc_o
`endif
`ifdef WB_GRPS_4
,wbm_4_cyc_o
`endif
`ifdef WB_GRPS_5
,wbm_5_cyc_o
`endif
`ifdef WB_GRPS_6
,wbm_6_cyc_o
`endif
`ifdef WB_GRPS_7
,wbm_7_cyc_o
`endif
`ifdef WB_GRPS_8
,wbm_8_cyc_o
`endif
}),
.wbm_dat_i({wbm_1_dat_i,wbm_2_dat_i
`ifdef WB_GRPS_3
,wbm_3_dat_i
`endif
`ifdef WB_GRPS_4
,wbm_4_dat_i
`endif
`ifdef WB_GRPS_5
,wbm_5_dat_i
`endif
`ifdef WB_GRPS_6
,wbm_6_dat_i
`endif
`ifdef WB_GRPS_7
,wbm_7_dat_i
`endif
`ifdef WB_GRPS_8
,wbm_8_dat_i
`endif
}),
.wbm_ack_i({wbm_1_ack_i,wbm_2_ack_i
`ifdef WB_GRPS_3
,wbm_3_ack_i
`endif
`ifdef WB_GRPS_4
,wbm_4_ack_i
`endif
`ifdef WB_GRPS_5
,wbm_5_ack_i
`endif
`ifdef WB_GRPS_6
,wbm_6_ack_i
`endif
`ifdef WB_GRPS_7
,wbm_7_ack_i
`endif
`ifdef WB_GRPS_8
,wbm_8_ack_i
`endif
}),
.wbm_err_i({wbm_1_err_i,wbm_2_err_i
`ifdef WB_GRPS_3
,wbm_3_err_i
`endif
`ifdef WB_GRPS_4
,wbm_4_err_i
`endif
`ifdef WB_GRPS_5
,wbm_5_err_i
`endif
`ifdef WB_GRPS_6
,wbm_6_err_i
`endif
`ifdef WB_GRPS_7
,wbm_7_err_i
`endif
`ifdef WB_GRPS_8
,wbm_8_err_i
`endif
}),
.wbm_rty_i({wbm_1_rty_i,wbm_2_rty_i
`ifdef WB_GRPS_3
,wbm_3_rty_i
`endif
`ifdef WB_GRPS_4
,wbm_4_rty_i
`endif
`ifdef WB_GRPS_5
,wbm_5_rty_i
`endif
`ifdef WB_GRPS_6
,wbm_6_rty_i
`endif
`ifdef WB_GRPS_7
,wbm_7_rty_i
`endif
`ifdef WB_GRPS_8
,wbm_8_rty_i
`endif
}),
.wbs_dat_i(wbs_dat_i),
.wbs_adr_i(wbs_adr_i),
.wbs_sel_i(wbs_sel_i),
.wbs_cti_i(wbs_cti_i),
.wbs_bte_i(wbs_bte_i),
.wbs_we_i(wbs_we_i),
.wbs_stb_i(wbs_stb_i),
.wbs_cyc_i(wbs_cyc_i),
.wbs_dat_o(wbs_dat_o),
.wbs_ack_o(wbs_ack_o),
.wbs_err_o(wbs_err_o),
.wbs_rty_o(wbs_rty_o),
.wb_clk(mem_clk),
.wb_rst(mem_clk)
);
 
`else
// only one external port an no need for arbiter
assign wbs_dat_i = wbm_dat_i;
assign wbs_adr_i = wbm_adr_i;
assign wbs_sel_i = wbm_sel_i;
assign wbs_cti_i = wbm_cti_i;
assign wbs_bte_i = wbm_bte_i;
assign wbs_we_i = wbm_we_i;
assign wbs_stb_i = wbm_stb_i;
assign wbs_cyc_i = wbm_cyc_i;
assign wbm_dat_o = wbs_dat_o;
assign wbm_ack_o = wbs_ack_o;
`endif
 
`ifdef RAM
`define MODULE wb_b3_ram_be
`VLBASE`MODULE
`undef MODULE
# (
.adr_size(`RAM_ADR_SIZE),
.mem_size(`RAM_MEM_SIZE),
.memory_init(`RAM_MEM_INIT),
.memory_file(`RAM_MEM_INIT_FILE)
)
ram0 (
.wbs_dat_i(wbs_dat_i),
.wbs_adr_i(wbs_adr_i),
.wbs_cti_i(wbs_cti_i),
.wbs_bte_i(wbs_bte_i),
.wbs_sel_i(wbs_sel_i),
.wbs_we_i(wbs_we_i),
.wbs_stb_i(wbs_stb_i),
.wbs_cyc_i(wbs_cyc_i),
.wbs_dat_o(wbs_dat_o),
.wbs_ack_o(wbs_ack_o),
.wb_clk(mem_clk),
.wb_rst(mem_rst));
 
`endif
 
`ifdef SDR
`define MODULE sdr16
`BASE`MODULE sdr16_0(
`undef MODULE
// wisbone i/f
.dat_i(wbs_dat_i),
.adr_i({wbs_adr_i,1'b0}),
.sel_i(wbs_sel_i),
`ifndef SDR_NO_BURST
.bte_i(wbs_bte_i),
`endif
.we_i(wbs_we_i),
.cyc_i(wbs_cyc_i),
.stb_i(wbs_stb_i),
.dat_o(wbs_dat_o),
.ack_o(wbs_ack_o),
// SDR SDRAM
.ba(ba),
.a(a),
.cmd(cmd),
.cke(cke),
.cs_n(cs_n),
.dqm(dqm),
.dq_i(dq_i),
.dq_o(dq_o),
.dq_oe(dq_oe),
// system
.clk(mem_clk),
.rst(mem_rst));
`endif
 
`ifdef DDR2
`endif
 
`ifdef DDR3
`endif
 
endmodule
/versatile_mem_ctrl/trunk/rtl/verilog/copyright.v
15,7 → 15,7
//// ////
//////////////////////////////////////////////////////////////////////
//// ////
//// Copyright (C) 2009 Authors and OPENCORES.ORG ////
//// Copyright (C) 2011 Authors and OPENCORES.ORG ////
//// ////
//// This source file may be used and distributed without ////
//// restriction provided that this copyright statement is not ////
/versatile_mem_ctrl/trunk/rtl/verilog/Makefile
1,17 → 1,57
sdr_sdram_16_ctrl_actel.v:
vppreproc --noline --noblank +define+RFR_LENGTH+10 +define+RFR_WRAP_VALUE+1001 +define+ACTEL sdr_sdram_16_ctrl.v > sdr_sdram_16_ctrl_actel.v
VLIB_BASE = vmemctrl_vl_
VLIB_DEFINES = +define+BASE+$(VLIB_BASE)
VLIB_DEFINES += +define+WB3WB3_BRIDGE
VLIB_DEFINES += +define+WB3_ARBITER_TYPE1
VLIB_DEFINES += +define+CNT_LFSR_ZQ
VLIB_DEFINES += +define+DELAY_EMPTYFLAG
VLIB_DEFINES += +define+DFF_CE_CLEAR
VLIB_DEFINES += +define+WB_B3_RAM_BE
#VLIB_DEFINES += +define+SYSTEMVERILOG
VLIB_ALTERA = vmemctrl_vl_altera.v
VLIB_ACTEL = vmemctrl_vl_actel.v
VLIB = versatile_library.v
VLIB += $(VLIB_ALTERA)
VLIB += $(VLIB_ACTEL)
RTL_FILES = versatile_mem_ctrl_defines.v
RTL_FILES += sdr_sdram_ctrl.v
RTL_FILES += versatile_mem_ctrl_top.v
OUT_FILE = vmemctrl.v
 
VCOUNT_FILES = VersatileCounter.class.php
VCOUNT_FILES += VersatileCounter.php
$(VCOUNT_FILES):
for file in $(VCOUNT_FILES) ; do \
svn export http://opencores.org/ocsvn/versatile_library/versatile_library/trunk/misc/$$file ; \
done
refresh: $(VCOUNT_FILES)
./VersatileCounter.php 10 1000
./VersatileCounter.php 9 500
./VersatileCounter.php 11 1172
./VersatileCounter.php 10 586
./VersatileCounter.php 11 1954
./VersatileCounter.php 10 977
./VersatileCounter.php 12 2079
./VersatileCounter.php 11 1040
./VersatileCounter.php 12 2407
./VersatileCounter.php 11 1204
export:
svn export http://opencores.org/ocsvn/versatile_library/versatile_library/trunk/rtl/verilog/versatile_library.v
vppreproc --noline --noblank +define+ALTERA $(VLIB_DEFINES) versatile_library.v | sed -r -e 's/\/\/E2_([a-z]+)/`\1/' > $(VLIB_ALTERA)
vppreproc --noline --noblank +define+ACTEL $(VLIB_DEFINES) versatile_library.v | sed -r -e 's/\/\/E2_([a-z]+)/`\1/' > $(VLIB_ACTEL)
 
config:
configurator versatile_mem_ctrl_defines.v
 
versatile_mem_ctrl: config
vppreproc --simple +define+VLBASE+$(VLIB_BASE) $(RTL_FILES) | cat copyright.v - > $(OUT_FILE)
 
test: versatile_mem_ctrl
iverilog -tnull lpm_ff.v $(VLIB_ALTERA) $(OUT_FILE)
iverilog -tnull $(VLIB_ACTEL) $(OUT_FILE)
 
# the single all rule
all: sdr_sdram_16_ctrl_actel.v
all: export versatile_mem_ctrl test
 
clean:
rm -rf $(VERSATILE_FIFO_PROJECT_FILES) $(VERSATILE_COUNTER_PROJECT_FILES)
rm -rf fifo_fill.v sdr_16.v ddr_16.v
rm -f versatile_fifo_dual_port_ram_dc_dw.v ddr_16_generated.v
rm -rf *_counter.v
rm -rf *.csv
rm -rf *~
rm -rf sdr_sdram_16_ctrl_actel.v
rm -rf $(VLIB) $(OUT_FILE) $(VCOUNT_FILES)

powered by: WebSVN 2.1.0

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