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

Subversion Repositories sdr_ctrl

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /sdr_ctrl/trunk/rtl/core
    from Rev 37 to Rev 44
    Reverse comparison

Rev 37 → Rev 44

/sdrc_bs_convert.v
15,7 → 15,9
Author(s):
- Dinesh Annayya, dinesha@opencores.org
Version : 1.0 - 8th Jan 2012
Version : 0.0 - 8th Jan 2012 - Initial structure
0.2 - 2nd Feb 2012
Improved the command pipe structure to accept up-to 4 command of different bank.
 
50,28 → 52,37
reset_n,
sdr_width,
 
/* Control Signal from xfr ctrl */
x2a_rdstart,
x2a_wrstart,
x2a_rdlast,
x2a_wrlast,
app_rd_data_int,
app_rd_valid_int,
app_wr_data_int,
app_wr_en_n_int,
app_wr_next_int,
 
/* Control Signal from request ctrl */
app_req_addr_int,
app_req_len_int,
app_req_ack_int,
app_sdr_req_int,
 
/* Control Signal from Bank Ctrl */
app_req_dma_last_int,
 
/* Control Signal from/to to application i/f */
app_req_addr,
app_req_addr_int,
app_req_len,
app_req_len_int,
app_sdr_req,
app_sdr_req_int,
app_req_dma_last,
app_req_dma_last_int,
app_req_wr_n,
app_req_ack,
app_req_ack_int,
 
app_wr_data,
app_wr_data_int,
app_wr_en_n,
app_wr_en_n_int,
app_wr_next_int,
app_wr_next,
 
app_rd_data_int,
app_rd_data,
app_rd_valid_int,
app_rd_valid
);
parameter APP_AW = 30; // Application Address Width
86,28 → 97,41
input reset_n ;
input [1:0] sdr_width ; // 2'b00 - 32 Bit SDR, 2'b01 - 16 Bit SDR, 2'b1x - 8 Bit
 
/* Control Signal from xfr ctrl */
input x2a_rdstart; // read start indication
input x2a_wrstart; // writ start indication
input x2a_rdlast; // read last burst access
input x2a_wrlast; // write last transfer
input [SDR_DW-1:0] app_rd_data_int;
input app_rd_valid_int;
output [SDR_DW-1:0] app_wr_data_int;
output [SDR_BW-1:0] app_wr_en_n_int;
input app_wr_next_int;
 
/* Control Signal from request ctrl */
output [APP_AW:0] app_req_addr_int;
output [APP_RW-1:0] app_req_len_int;
input app_req_ack_int;
output app_sdr_req_int;
 
/* Control Signal from Bank Ctrl */
output app_req_dma_last_int;
 
 
/* Control Signal from/to to application i/f */
input [APP_AW-1:0] app_req_addr;
output [APP_AW:0] app_req_addr_int;
input [APP_RW-1:0] app_req_len ;
output [APP_RW-1:0] app_req_len_int;
input app_req_wr_n;
input app_sdr_req;
output app_sdr_req_int;
input app_req_dma_last;
output app_req_dma_last_int;
input app_req_ack_int;
output app_req_ack;
 
input [APP_DW-1:0] app_wr_data;
output [SDR_DW-1:0] app_wr_data_int;
input [APP_BW-1:0] app_wr_en_n;
output [SDR_BW-1:0] app_wr_en_n_int;
input app_wr_next_int;
output app_wr_next;
 
input [SDR_DW-1:0] app_rd_data_int;
output [APP_DW-1:0] app_rd_data;
input app_rd_valid_int;
output app_rd_valid;
 
reg [APP_AW:0] app_req_addr_int;
124,8 → 148,8
reg app_wr_next;
 
reg [23:0] saved_rd_data;
reg [7:0] rd_xfr_count;
reg [7:0] wr_xfr_count;
reg [1:0] rd_xfr_count;
reg [1:0] wr_xfr_count;
 
 
wire ok_to_req;
152,7 → 176,8
app_req_addr_int = {app_req_addr,1'b0};
app_req_len_int = {app_req_len,1'b0};
app_req_dma_last_int = app_req_dma_last;
app_sdr_req_int = app_sdr_req && ok_to_req;
//app_sdr_req_int = app_sdr_req && ok_to_req;
app_sdr_req_int = app_sdr_req ;
app_req_ack = app_req_ack_int;
app_wr_next = (app_wr_next_int & wr_xfr_count[0]);
app_rd_valid = (rd_xfr_count & rd_xfr_count[0]);
176,10 → 201,9
app_req_dma_last_int = app_req_dma_last;
app_sdr_req_int = app_sdr_req && ok_to_req;
app_req_ack = app_req_ack_int;
app_wr_next = (app_wr_next_int & (wr_xfr_count[1:0]== 2'b01));
app_rd_valid = (rd_xfr_count & (rd_xfr_count[1:0]== 2'b01));
// Note: counter is down counter from 00 -> 11 -> 10 -> 01 --> 00
if(wr_xfr_count[1:0] == 2'b01)
app_wr_next = (app_wr_next_int & (wr_xfr_count[1:0]== 2'b11));
app_rd_valid = (rd_xfr_count & (rd_xfr_count[1:0]== 2'b11));
if(wr_xfr_count[1:0] == 2'b11)
begin
app_wr_en_n_int = app_wr_en_n[3];
app_wr_data_int = app_wr_data[31:24];
189,7 → 213,7
app_wr_en_n_int = app_wr_en_n[2];
app_wr_data_int = app_wr_data[23:16];
end
else if(wr_xfr_count[1:0] == 2'b11)
else if(wr_xfr_count[1:0] == 2'b01)
begin
app_wr_en_n_int = app_wr_en_n[1];
app_wr_data_int = app_wr_data[15:8];
204,7 → 228,6
end
 
 
reg lcl_mc_req_wr_n;
 
always @(posedge clk)
begin
212,33 → 235,33
begin
rd_xfr_count <= 8'b0;
wr_xfr_count <= 8'b0;
lcl_mc_req_wr_n <= 1'b1;
saved_rd_data <= 24'h0;
end
else begin
if(app_req_ack)
lcl_mc_req_wr_n <= app_req_wr_n;
 
// During Write Phase
if(app_req_ack && (app_req_wr_n == 0)) begin
wr_xfr_count <= app_req_len_int;
if(x2a_wrlast) begin
wr_xfr_count <= 0;
end
else if(app_wr_next_int & !lcl_mc_req_wr_n) begin
wr_xfr_count <= wr_xfr_count - 1'b1;
else if(app_wr_next_int) begin
wr_xfr_count <= wr_xfr_count + 1'b1;
end
 
// During Read Phase
if(app_req_ack && app_req_wr_n) begin
rd_xfr_count <= app_req_len_int;
if(x2a_rdlast) begin
rd_xfr_count <= 0;
end
else if(app_rd_valid_int & lcl_mc_req_wr_n) begin
rd_xfr_count <= rd_xfr_count - 1'b1;
else if(app_rd_valid_int) begin
rd_xfr_count <= rd_xfr_count + 1'b1;
end
 
// Save Previous Data
if(app_rd_valid_int) begin
if(sdr_width == 2'b01) // 16 Bit SDR Mode
saved_rd_data[15:0] <= app_rd_data_int;
else begin// 8 bit SDR Mode -
// Note: counter is down counter from 00 -> 11 -> 10 -> 01 --> 00
if(rd_xfr_count[1:0] == 2'b00) saved_rd_data[7:0] <= app_rd_data_int[7:0];
else if(rd_xfr_count[1:0] == 2'b11) saved_rd_data[15:8] <= app_rd_data_int[7:0];
else if(rd_xfr_count[1:0] == 2'b01) saved_rd_data[15:8] <= app_rd_data_int[7:0];
else if(rd_xfr_count[1:0] == 2'b10) saved_rd_data[23:16] <= app_rd_data_int[7:0];
end
end
/sdrc_core.v
34,10 → 34,12
Author(s):
- Dinesh Annayya, dinesha@opencores.org
Version : 1.0 - 8th Jan 2012
Version : 0.0 - 8th Jan 2012
Initial version with 16/32 Bit SDRAM Support
: 1.1 - 24th Jan 2012
: 0.1 - 24th Jan 2012
8 Bit SDRAM Support is added
0.2 - 2nd Feb 2012
Improved the command pipe structure to accept up-to 4 command of different bank.
 
Copyright (C) 2000 Authors and OPENCORES.ORG
253,7 → 255,9
wire b2x_wrap;
wire app_wr_next_int;
wire app_rd_valid_int;
wire x2a_rdlast;
 
 
// synopsys translate_off
wire [3:0] sdr_cmd;
assign sdr_cmd = {sdr_cs_n, sdr_ras_n, sdr_cas_n, sdr_we_n};
262,6 → 266,7
assign sdr_den_n = sdr_den_n_int ;
assign sdr_dout = sdr_dout_int ;
 
assign app_last_rd = x2a_rdlast;
 
// To meet the timing at read path, read data is registered w.r.t pad_sdram_clock and register back to sdram_clk
// assumption, pad_sdram_clk is synhronous and delayed clock of sdram_clk.
416,12 → 421,11
.sdr_din (pad_sdr_din2 ),
.sdr_dout (sdr_dout_int ),
.sdr_den_n (sdr_den_n_int ),
/* Data Flow to the app */
.x2a_rdstart (xfr_rdstart ),
.x2a_wrstart (xfr_wrstart ),
.x2a_id (xfr_id ),
.x2a_rdlast (app_last_rd ),
.x2a_rdlast (x2a_rdlast ),
.x2a_wrlast (xfr_wrlast ),
.app_wrdt (add_wr_data_int ),
.app_wren_n (app_wr_en_n_int ),
459,29 → 463,39
.reset_n (reset_n ),
.sdr_width (sdr_width ),
 
/* Control Signal from xfr ctrl */
.x2a_rdstart (xfr_rdstart ),
.x2a_wrstart (xfr_wrstart ),
.x2a_rdlast (x2a_rdlast ),
.x2a_wrlast (xfr_wrlast ),
.app_rd_data_int (app_rd_data_int ),
.app_rd_valid_int (app_rd_valid_int ),
.app_wr_data_int (add_wr_data_int ),
.app_wr_en_n_int (app_wr_en_n_int ),
.app_wr_next_int (app_wr_next_int ),
 
/* Control Signal from request ctrl */
.app_req_addr_int (app_req_addr_int ),
.app_req_len_int (app_req_len_int ),
.app_req_ack_int (app_req_ack_int ),
.app_sdr_req_int (app_req_int ),
 
/* Control Signal from Bank Ctrl */
.app_req_dma_last_int(app_req_dma_last_int),
 
/* Control Signal from/to to application i/f */
.app_req_addr (app_req_addr ),
.app_req_addr_int (app_req_addr_int ),
.app_req_len (app_req_len ),
.app_req_len_int (app_req_len_int ),
.app_sdr_req (app_req ),
.app_sdr_req_int (app_req_int ),
.app_req_dma_last (app_req_dma_last ),
.app_req_dma_last_int(app_req_dma_last_int),
.app_req_wr_n (app_req_wr_n ),
.app_req_ack_int (app_req_ack_int ),
.app_req_ack (app_req_ack ),
 
.app_wr_data (app_wr_data ),
.app_wr_data_int (add_wr_data_int ),
.app_wr_en_n (app_wr_en_n ),
.app_wr_en_n_int (app_wr_en_n_int ),
.app_wr_next_int (app_wr_next_int ),
.app_wr_next (app_wr_next_req ),
 
.app_rd_data_int (app_rd_data_int ),
.app_rd_data (app_rd_data ),
.app_rd_valid_int (app_rd_valid_int ),
.app_rd_valid (app_rd_valid )
 
);
endmodule // sdrc_core

powered by: WebSVN 2.1.0

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