Line 1... |
Line 1... |
|
module ram_wb ( dat_i, dat_o, adr_i, we_i, sel_i, cyc_i, stb_i, ack_o, cti_i, clk_i, rst_i);
|
|
|
|
parameter dat_width = `RAM_WB_DAT_WIDTH;
|
module RAM_wb ( dat_i, dat_o, adr_i, we_i, sel_i, cyc_i, stb_i, ack_o, cti_i, clk_i, rst_i);
|
parameter adr_width = `RAM_WB_ADR_WIDTH;
|
|
parameter mem_size = `RAM_WB_MEM_SIZE;
|
parameter ram_wb_adr_width = `RAM_WB_ADR_WIDTH;
|
|
parameter ram_wb_mem_size = `RAM_WB_MEM_SIZE;
|
|
parameter ram_wb_dat_width = `RAM_WB_DAT_WIDTH;
|
|
|
|
// wishbone signals
|
// wishbone signals
|
input [31:0] dat_i;
|
input [31:0] dat_i;
|
output [31:0] dat_o;
|
output [31:0] dat_o;
|
input [ram_wb_adr_width-1:2] adr_i;
|
input [adr_width-1:2] adr_i;
|
input we_i;
|
input we_i;
|
input [3:0] sel_i;
|
input [3:0] sel_i;
|
input cyc_i;
|
input cyc_i;
|
input stb_i;
|
input stb_i;
|
output reg ack_o;
|
output reg ack_o;
|
Line 28... |
Line 26... |
assign wr_data[31:24] = sel_i[3] ? dat_i[31:24] : dat_o[31:24];
|
assign wr_data[31:24] = sel_i[3] ? dat_i[31:24] : dat_o[31:24];
|
assign wr_data[23:16] = sel_i[2] ? dat_i[23:16] : dat_o[23:16];
|
assign wr_data[23:16] = sel_i[2] ? dat_i[23:16] : dat_o[23:16];
|
assign wr_data[15: 8] = sel_i[1] ? dat_i[15: 8] : dat_o[15: 8];
|
assign wr_data[15: 8] = sel_i[1] ? dat_i[15: 8] : dat_o[15: 8];
|
assign wr_data[ 7: 0] = sel_i[0] ? dat_i[ 7: 0] : dat_o[ 7: 0];
|
assign wr_data[ 7: 0] = sel_i[0] ? dat_i[ 7: 0] : dat_o[ 7: 0];
|
|
|
|
|
//vfifo_dual_port_ram_sc_dw
|
|
ram_wb_sc_dw
|
|
/* #
|
|
(
|
|
.DATA_WIDTH(32),
|
|
.ADDR_WIDTH(11)
|
|
)*/
|
|
ram
|
ram
|
|
#
|
(
|
(
|
.d_a(wr_data),
|
.DATA_WIDTH(dat_width),
|
.q_a(),
|
.ADDR_WIDTH(adr_width),
|
.adr_a(adr_i),
|
.MEM_SIZE(mem_size)
|
.we_a(we_i & ack_o),
|
)
|
.q_b(dat_o),
|
ram0
|
.adr_b(adr_i),
|
(
|
.d_b(32'h0),
|
.dat_i(wr_data),
|
.we_b(1'b0),
|
.dat_o(dat_o),
|
|
.adr_i(adr_i),
|
|
.we_i(we_i & ack_o),
|
.clk(clk_i)
|
.clk(clk_i)
|
);
|
);
|
|
|
|
|
// ack_o
|
// ack_o
|
always @ (posedge clk_i or posedge rst_i)
|
always @ (posedge clk_i or posedge rst_i)
|
if (rst_i)
|
if (rst_i)
|
ack_o <= 1'b0;
|
ack_o <= 1'b0;
|
else
|
else
|
if (!ack_o)
|
if (!ack_o) begin
|
if (cyc_i & stb_i)
|
if (cyc_i & stb_i)
|
ack_o <= 1'b1;
|
ack_o <= 1'b1; end
|
else
|
else
|
if ((sel_i != 4'b1111) | (ct_i == 3'b000) | (cti_i == 3'b111))
|
if ((sel_i != 4'b1111) | (cti_i == 3'b000) | (cti_i == 3'b111))
|
ack_o <= 1'b0;
|
ack_o <= 1'b0;
|
|
|
endmodule
|
endmodule
|
|
|
|
|
No newline at end of file
|
No newline at end of file
|