Changeset 23 in XOpenSparcT1 for trunk/WB2ALTDDR3/dram_wb.v


Ignore:
Timestamp:
04/01/11 10:30:46 (14 years ago)
Author:
pntsvt00
Message:

supera il test di write e read dalla DDR

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/WB2ALTDDR3/dram_wb.v

    r22 r23  
    4040   input             wb_cab_i,  
    4141 
    42    inout      [63:0] ddr3_dq, 
    43    inout      [ 7:0] ddr3_dqs, 
    44    inout      [ 7:0] ddr3_dqs_n, 
    45    inout             ddr3_ck, 
    46    inout             ddr3_ck_n, 
     42   inout      [63:0] ddr2_dq, 
     43   inout      [ 7:0] ddr2_dqs, 
     44   inout      [ 7:0] ddr2_dqs_n, 
     45   inout             ddr2_ck, 
     46   inout             ddr2_ck_n, 
    4747   //output            ddr3_reset, 
    48    output     [12:0] ddr3_a, 
    49    output     [ 1:0] ddr3_ba, 
    50    output            ddr3_ras_n, 
    51    output            ddr3_cas_n, 
    52    output            ddr3_we_n, 
    53    output            ddr3_cs_n, 
    54    output            ddr3_odt, 
    55    output            ddr3_ce, 
    56    output     [ 7:0] ddr3_dm, 
     48   output     [12:0] ddr2_a, 
     49   output     [ 1:0] ddr2_ba, 
     50   output            ddr2_ras_n, 
     51   output            ddr2_cas_n, 
     52   output            ddr2_we_n, 
     53   output            ddr2_cs_n, 
     54   output            ddr2_odt, 
     55   output            ddr2_ce, 
     56   output     [ 7:0] ddr2_dm, 
    5757 
    5858   output            phy_init_done, 
     
    7474wire dram_ready; 
    7575wire fifo_empty; 
    76 reg       push_tran; 
     76reg  push_tran_wdf; 
     77reg  push_tran; 
    7778 
    7879//wire [13:0] parallelterminationcontrol; 
     
    8586     //synthesis traslate on 
    8687      ) 
    87     dram_ctrl( 
     88    // cmd_out[31] è il WE, CMD_OUT[30:0] corrisponde ad wb_addr[33:3] 
     89     dram_ctrl( 
    8890    .sys_clk(clk200), 
    8991    .sys_rst_n(sysrst),  // Resets all 
     
    9395    .app_af_addr(cmd_out[30:0]), 
    9496    .app_af_wren(push_tran), //write enable for address fifo 
    95     .app_wdf_wren(cmd_out[31] & push_tran), // write enable for write data fifo 
     97    .app_wdf_wren(push_tran_wdf), // write enable for write data fifo 
    9698    .app_wdf_data({wr_dout[63:0],wr_dout[63:0]}), 
    9799    .app_wdf_mask_data(mask_data), 
     
    106108    .idly_clk_200(clk200), 
    107109 
    108     .ddr2_ck(ddr3_ck), 
    109     .ddr2_ck_n(ddr3_ck_n), 
    110     .ddr2_dq(ddr3_dq), 
    111     .ddr2_dqs(ddr3_dqs), 
    112     .ddr2_dqs_n(ddr3_dqs_n), 
    113     .ddr2_ras_n(ddr3_ras_n), 
    114     .ddr2_cas_n(ddr3_cas_n), 
    115     .ddr2_odt(ddr3_odt), 
    116     .ddr2_cs_n(ddr3_cs_n), 
    117     .ddr2_cke(ddr3_ce), 
    118     .ddr2_we_n(ddr3_we_n), 
    119     .ddr2_ba(ddr3_ba), 
    120     .ddr2_a(ddr3_a), 
    121     .ddr2_dm(ddr3_dm) 
     110    .ddr2_ck(ddr2_ck), 
     111    .ddr2_ck_n(ddr2_ck_n), 
     112    .ddr2_dq(ddr2_dq), 
     113    .ddr2_dqs(ddr2_dqs), 
     114    .ddr2_dqs_n(ddr2_dqs_n), 
     115    .ddr2_ras_n(ddr2_ras_n), 
     116    .ddr2_cas_n(ddr2_cas_n), 
     117    .ddr2_odt(ddr2_odt), 
     118    .ddr2_cs_n(ddr2_cs_n), 
     119    .ddr2_cke(ddr2_ce), 
     120    .ddr2_we_n(ddr2_we_n), 
     121    .ddr2_ba(ddr2_ba), 
     122    .ddr2_a(ddr2_a), 
     123    .ddr2_dm(ddr2_dm) 
    122124); 
    123125 
     
    189191 
    190192always @( * ) 
    191    case(cmd_out[0]) 
    192       1'b0:mask_data<={8'h00,wr_dout[71:64]}; 
    193       1'b1:mask_data<={wr_dout[71:64],8'h00}; 
     193     case(push_tran & cmd_out[31]) 
     194      1'b1:mask_data<=16'hffff; 
     195      1'b0:mask_data<={wr_dout[71:64],8'h00}; 
     196      //1'b1:mask_data<={wr_dout[71:64] ^ 8'hff,8'hff}; FIXME il sel e' in logica negata 
    194197   endcase 
     198 
     199//always @( * ) 
     200//   case(cmd_out[0]) 
     201//      1'b0:mask_data<={8'h00,wr_dout[71:64]}; 
     202//      1'b1:mask_data<={wr_dout[71:64],8'h00}; 
     203//   endcase 
    195204 
    196205//wire [254:0] trig0; 
     
    217226reg fifo_full_d; 
    218227reg written; 
    219 reg       fifo_read; 
    220  
    221 dram_fifo fifo( 
     228reg fifo_read; 
     229 
     230dram_fifo_fall fifo( 
    222231   .rst(ddr_rst), 
    223232   .wr_clk(wb_clk_i), 
     
    235244`define DDR_WRITE_1 3'b001 
    236245`define DDR_WRITE_2 3'b010 
     246`define DDR_WRITE_3 3'b110 
    237247`define DDR_READ_1  3'b011 
    238248`define DDR_READ_2  3'b100 
     
    242252reg wb_ack_d1; 
    243253 
     254//FIXME si perde il primo comando di scrittura  
    244255always @(posedge ddr_clk or posedge ddr_rst) 
    245256   if(ddr_rst) 
     
    247258         ddr_state<=`DDR_IDLE; 
    248259         fifo_read<=0; 
     260         push_tran_wdf<=0; 
    249261         push_tran<=0; 
    250262         rd_data_valid_stb<=0; 
     
    255267            if(!fifo_empty && dram_ready) 
    256268               begin 
    257                   push_tran<=1; 
    258269                  if(cmd_out[31]) 
    259270                     begin 
     271                        push_tran_wdf<=1; 
    260272                        ddr_state<=`DDR_WRITE_1; 
    261                         fifo_read<=1; 
    262273                     end 
    263274                  else 
     275                     begin 
     276                     push_tran<=1; 
    264277                     ddr_state<=`DDR_READ_1; 
    265                end 
     278                  end 
     279                end 
    266280         `DDR_WRITE_1: 
    267281            begin 
    268                push_tran<=0; 
    269                fifo_read<=0; 
     282               fifo_read<=1; 
     283               push_tran_wdf<=1; 
     284               push_tran<=1; 
    270285               ddr_state<=`DDR_WRITE_2; // Protect against FIFO empty signal latency 
    271286            end 
    272287         `DDR_WRITE_2: 
    273             ddr_state<=`DDR_IDLE; 
     288               begin 
     289                fifo_read<=0; 
     290                push_tran_wdf<=0; 
     291                push_tran<=0; 
     292                ddr_state<=`DDR_WRITE_3; 
     293               end 
     294         `DDR_WRITE_3: 
     295               ddr_state<=`DDR_IDLE; 
    274296         `DDR_READ_1: 
    275297            begin 
     
    297319reg rd_data_valid_stb_d3; 
    298320reg rd_data_valid_stb_d4; 
    299 reg [127:0] rd_data_fifo_out_d; 
     321reg [127:0] rd_data_fifo_out_dH; 
     322reg [127:0] rd_data_fifo_out_dL; 
    300323reg wb_ack_d; 
    301324 
    302325always @( * ) 
    303    case(wb_adr_i[3]) 
    304       1'b0:wb_dat_o<=rd_data_fifo_out_d[63:0]; 
    305       1'b1:wb_dat_o<=rd_data_fifo_out_d[127:64]; 
     326   case(wb_adr_i[4:3]) 
     327      2'b00:wb_dat_o<=rd_data_fifo_out_dL[63:0]; 
     328      2'b01:wb_dat_o<=rd_data_fifo_out_dL[127:64]; 
     329      2'b10:wb_dat_o<=rd_data_fifo_out_dH[63:0]; 
     330      2'b11:wb_dat_o<=rd_data_fifo_out_dH[127:64]; 
    306331   endcase 
    307332 
     
    340365      wb_ack_d1<=wb_ack_d; 
    341366      if(rd_data_valid) 
    342          rd_data_fifo_out_d<=rd_data_fifo_out; 
     367         rd_data_fifo_out_dH<=rd_data_fifo_out; 
     368      if(rd_data_valid && !rd_data_valid_stb) 
     369         rd_data_fifo_out_dL<=rd_data_fifo_out; 
     370         
    343371   end 
    344372     
    345373endmodule 
     374 
Note: See TracChangeset for help on using the changeset viewer.