add wishbone 2 interface
This commit is contained in:
parent
29ef663d87
commit
4273a172f5
|
|
@ -74,6 +74,17 @@ module ddr3_dimm_micron_sim;
|
||||||
wire[$bits(ddr3_top.io_ddr3_dqs_n)-1:0] dqs_n;
|
wire[$bits(ddr3_top.io_ddr3_dqs_n)-1:0] dqs_n;
|
||||||
wire o_ddr3_clk_p, o_ddr3_clk_n;
|
wire o_ddr3_clk_p, o_ddr3_clk_n;
|
||||||
integer index;
|
integer index;
|
||||||
|
// Wishbone 2 (PHY) inputs
|
||||||
|
reg i_wb2_cyc; //bus cycle active (1 = normal operation, 0 = all ongoing transaction are to be cancelled)
|
||||||
|
reg i_wb2_stb; //request a transfer
|
||||||
|
reg i_wb2_we; //write-enable (1 = write, 0 = read)
|
||||||
|
reg[$bits(ddr3_top.i_wb2_addr)-1:0] i_wb2_addr; //memory-mapped register to be accessed
|
||||||
|
reg[$bits(ddr3_top.i_wb2_data)-1:0] i_wb2_data; //write data
|
||||||
|
reg[$bits(ddr3_top.i_wb2_sel)-1:0] i_wb2_sel; //byte strobe for write (1 = write the byte)
|
||||||
|
// Wishbone 2 (Controller) outputs
|
||||||
|
wire o_wb2_stall; //1 = busy, cannot accept requests
|
||||||
|
wire o_wb2_ack; //1 = read/write request has completed
|
||||||
|
wire[$bits(ddr3_top.o_wb2_data)-1:0] o_wb2_data; //read data
|
||||||
|
|
||||||
// DDR3 Controller
|
// DDR3 Controller
|
||||||
ddr3_top #(
|
ddr3_top #(
|
||||||
|
|
@ -107,6 +118,17 @@ ddr3_top #(
|
||||||
.o_wb_ack(o_wb_ack), //1 = read/write request has completed
|
.o_wb_ack(o_wb_ack), //1 = read/write request has completed
|
||||||
.o_wb_data(o_wb_data), //read data, for a 4:1 controller data width is 8 times the number of pins on the device
|
.o_wb_data(o_wb_data), //read data, for a 4:1 controller data width is 8 times the number of pins on the device
|
||||||
.o_aux(o_aux),
|
.o_aux(o_aux),
|
||||||
|
// Wishbone 2 (PHY) inputs
|
||||||
|
.i_wb2_cyc(i_wb2_cyc), //bus cycle active (1 = normal operation, 0 = all ongoing transaction are to be cancelled)
|
||||||
|
.i_wb2_stb(i_wb2_stb), //request a transfer
|
||||||
|
.i_wb2_we(i_wb2_we), //write-enable (1 = write, 0 = read)
|
||||||
|
.i_wb2_addr(i_wb2_addr), //burst-addressable {row,bank,col}
|
||||||
|
.i_wb2_data(i_wb2_data), //write data, for a 4:1 controller data width is 8 times the number of pins on the device
|
||||||
|
.i_wb2_sel(i_wb2_sel), //byte strobe for write (1 = write the byte)
|
||||||
|
// Wishbone 2 (Controller) outputs
|
||||||
|
.o_wb2_stall(o_wb2_stall), //1 = busy, cannot accept requests
|
||||||
|
.o_wb2_ack(o_wb2_ack), //1 = read/write request has completed
|
||||||
|
.o_wb2_data(o_wb2_data), //read data, for a 4:1 controller data width is 8 times the number of pins on the device
|
||||||
// PHY Interface (to be added later)
|
// PHY Interface (to be added later)
|
||||||
.o_ddr3_clk_p(o_ddr3_clk_p),
|
.o_ddr3_clk_p(o_ddr3_clk_p),
|
||||||
.o_ddr3_clk_n(o_ddr3_clk_n),
|
.o_ddr3_clk_n(o_ddr3_clk_n),
|
||||||
|
|
@ -188,6 +210,7 @@ ddr3_top #(
|
||||||
//toggle reset for 1 slow clk
|
//toggle reset for 1 slow clk
|
||||||
@(posedge i_controller_clk) begin
|
@(posedge i_controller_clk) begin
|
||||||
i_rst_n <= 0;
|
i_rst_n <= 0;
|
||||||
|
// Wishbone 1
|
||||||
i_wb_cyc <= 0;
|
i_wb_cyc <= 0;
|
||||||
i_wb_stb <= 0;
|
i_wb_stb <= 0;
|
||||||
i_wb_we <= 0;
|
i_wb_we <= 0;
|
||||||
|
|
@ -195,6 +218,13 @@ ddr3_top #(
|
||||||
i_aux <= 0;
|
i_aux <= 0;
|
||||||
i_wb_addr <= 0;
|
i_wb_addr <= 0;
|
||||||
i_wb_data <= 0;
|
i_wb_data <= 0;
|
||||||
|
// Wishbone 2
|
||||||
|
i_wb2_cyc <= 0; //bus cycle active (1 = normal operation, 0 = all ongoing transaction are to be cancelled)
|
||||||
|
i_wb2_stb <= 0; //request a transfer
|
||||||
|
i_wb2_we <= 0; //write-enable (1 = write, 0 = read)
|
||||||
|
i_wb2_addr <= 0; //memory-mapped register to be accessed
|
||||||
|
i_wb2_data <= 0; //write data
|
||||||
|
i_wb2_sel <= 0;
|
||||||
end
|
end
|
||||||
@(posedge i_controller_clk) begin
|
@(posedge i_controller_clk) begin
|
||||||
i_rst_n <= 1;
|
i_rst_n <= 1;
|
||||||
|
|
@ -254,7 +284,7 @@ ddr3_top #(
|
||||||
#1; //just to make sure the non-blocking are assignments are all over
|
#1; //just to make sure the non-blocking are assignments are all over
|
||||||
end
|
end
|
||||||
while(i_wb_stb) begin
|
while(i_wb_stb) begin
|
||||||
@(posedge clk) begin
|
@(posedge i_controller_clk) begin
|
||||||
if (!o_wb_stall) i_wb_stb <= 1'b0;
|
if (!o_wb_stall) i_wb_stb <= 1'b0;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -316,7 +346,7 @@ ddr3_top #(
|
||||||
#1; //just to make sure the non-blocking are assignments are all over
|
#1; //just to make sure the non-blocking are assignments are all over
|
||||||
end
|
end
|
||||||
while(i_wb_stb) begin
|
while(i_wb_stb) begin
|
||||||
@(posedge clk) begin
|
@(posedge i_controller_clk) begin
|
||||||
if (!o_wb_stall) i_wb_stb <= 1'b0;
|
if (!o_wb_stall) i_wb_stb <= 1'b0;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -376,7 +406,7 @@ ddr3_top #(
|
||||||
#1; //just to make sure the non-blocking are assignments are all over
|
#1; //just to make sure the non-blocking are assignments are all over
|
||||||
end
|
end
|
||||||
while(i_wb_stb) begin
|
while(i_wb_stb) begin
|
||||||
@(posedge clk) begin
|
@(posedge i_controller_clk) begin
|
||||||
if (!o_wb_stall) i_wb_stb <= 1'b0;
|
if (!o_wb_stall) i_wb_stb <= 1'b0;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -436,7 +466,7 @@ ddr3_top #(
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
while(i_wb_stb) begin
|
while(i_wb_stb) begin
|
||||||
@(posedge clk) begin
|
@(posedge i_controller_clk) begin
|
||||||
if (!o_wb_stall) i_wb_stb <= 1'b0;
|
if (!o_wb_stall) i_wb_stb <= 1'b0;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue