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

Subversion Repositories s1_core

[/] [s1_core/] [trunk/] [hdl/] [rtl/] [sparc_core/] [bw_r_dcd.v] - Diff between revs 105 and 113

Show entire file | Details | Blame | View Log

Rev 105 Rev 113
Line 40... Line 40...
 
 
//`include "iop.h"
//`include "iop.h"
//`include "fabric.h"
//`include "fabric.h"
 
 
//FPGA_SYN enables all FPGA related modifications
//FPGA_SYN enables all FPGA related modifications
 
`ifdef FPGA_SYN
 
`define FPGA_SYN_DCD
 
`endif
 
 
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
// Local header file includes / local defines
// Local header file includes / local defines
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
 
 
Line 119... Line 119...
output [7:0]    dcd_fuse_repair_value;  //data out for redundancy register
output [7:0]    dcd_fuse_repair_value;  //data out for redundancy register
output [1:0]       dcd_fuse_repair_en;     //enable bits out 
output [1:0]       dcd_fuse_repair_en;     //enable bits out 
 
 
// Memory declaration.
// Memory declaration.
 
 
 
`ifdef DEFINE_0IN
 
wire [143:0]   temp_w0a;
 
wire [143:0]   temp_w1a;
 
wire [143:0]   temp_w2a;
 
wire [143:0]   temp_w3a;
 
`else
reg [143:0]   w0 [127:0]/* synthesis syn_ramstyle = block_ram  syn_ramstyle = no_rw_check */  ;   // way0, byte0. Data+Parity. 
reg [143:0]   w0 [127:0]/* synthesis syn_ramstyle = block_ram  syn_ramstyle = no_rw_check */  ;   // way0, byte0. Data+Parity. 
reg [143:0]   w1 [127:0]/* synthesis syn_ramstyle = block_ram  syn_ramstyle = no_rw_check */  ;   // way0, byte0. Data+Parity.
reg [143:0]   w1 [127:0]/* synthesis syn_ramstyle = block_ram  syn_ramstyle = no_rw_check */  ;   // way0, byte0. Data+Parity.
reg [143:0]   w2 [127:0]/* synthesis syn_ramstyle = block_ram  syn_ramstyle = no_rw_check */  ;   // way0, byte0. Data+Parity.
reg [143:0]   w2 [127:0]/* synthesis syn_ramstyle = block_ram  syn_ramstyle = no_rw_check */  ;   // way0, byte0. Data+Parity.
reg [143:0]   w3 [127:0]/* synthesis syn_ramstyle = block_ram  syn_ramstyle = no_rw_check */  ;   // way0, byte0. Data+Parity.
reg [143:0]   w3 [127:0]/* synthesis syn_ramstyle = block_ram  syn_ramstyle = no_rw_check */  ;   // way0, byte0. Data+Parity.
 
 
Line 144... Line 144...
 
 
reg [143:0]   temp_w0;
reg [143:0]   temp_w0;
reg [143:0]   temp_w1;
reg [143:0]   temp_w1;
reg [143:0]   temp_w2;
reg [143:0]   temp_w2;
reg [143:0]   temp_w3;
reg [143:0]   temp_w3;
 
`endif
reg [10:3]    dcache_rwaddr_m ;
reg [10:3]    dcache_rwaddr_m ;
reg [10:3]    dcache_raddr_m ;
reg [10:3]    dcache_raddr_m ;
reg           dcache_rvld_m ;
reg           dcache_rvld_m ;
reg           wvld_m ;
reg           wvld_m ;
reg [143:0]   dcache_wdata_m ;
reg [143:0]   dcache_wdata_m ;
Line 242... Line 242...
  end
  end
 
 
assign  dcache_wvld_m = wvld_m & ~rst_tri_en ;
assign  dcache_wvld_m = wvld_m & ~rst_tri_en ;
 
 
 
 
 
`ifdef DEFINE_0IN
 
wire [3:0] dc_we = dcache_wvld_m ? dcache_wr_rway_m : 4'b0;
 
 
 
dc_data dc_data0 ( .nclk(~clk), .adr(dcache_rwaddr_m[10:4]),
 
                                 .we(dc_we           [0]  ), .wm(way_mask  [143:0]),
 
                                .din(dcache_wdata_m[143:0]), .dout(temp_w0a[143:0]) );
 
dc_data dc_data1 ( .nclk(~clk), .adr(dcache_rwaddr_m[10:4]),
 
                                 .we(dc_we           [1]  ), .wm(way_mask  [143:0]),
 
                                .din(dcache_wdata_m[143:0]), .dout(temp_w1a[143:0]) );
 
dc_data dc_data2 ( .nclk(~clk), .adr(dcache_rwaddr_m[10:4]),
 
                                 .we(dc_we           [2]  ), .wm(way_mask  [143:0]),
 
                                .din(dcache_wdata_m[143:0]), .dout(temp_w2a[143:0]) );
 
dc_data dc_data3 ( .nclk(~clk), .adr(dcache_rwaddr_m[10:4]),
 
                                 .we(dc_we           [3]  ), .wm(way_mask  [143:0]),
 
                                .din(dcache_wdata_m[143:0]), .dout(temp_w3a[143:0]) );
 
`else
 
 
 
 
//=========================================================================================
//=========================================================================================
//  generate wordlines
//  generate wordlines
//=========================================================================================
//=========================================================================================
 
 
// Generate at posedge of clk.
// Generate at posedge of clk.
Line 278... Line 278...
        rw_wdline[ctr]  = 1'b0;
        rw_wdline[ctr]  = 1'b0;
      end
      end
  end
  end
*/
*/
 
 
 
`ifdef FPGA_SYN_DCD
 
`else
 
always @ (clk or dcache_rwaddr_m or dcache_wvld_m or dcache_rvld_m)
 
  begin
 
   if (clk) begin
 
    for (ctr=8'h00;ctr<128;ctr=ctr+1)
 
      begin
 
      if (({1'b0,dcache_rwaddr_m[10:4]} == ctr) &
 
         (dcache_rvld_m | dcache_wvld_m))
 
        rw_wdline[ctr]  = 1'b1;
 
      else
 
        rw_wdline[ctr]  = 1'b0;
 
      end
 
   end
 
  end
 
// JC modified end
 
`endif
 
 
 
 
//=========================================================================================
//=========================================================================================
//  Read from Memory.
//  Read from Memory.
//=========================================================================================
//=========================================================================================
 
 
 
`ifdef FPGA_SYN_DCD
always @(posedge clk) begin
always @(posedge clk) begin
  temp_w0a_reg[143:0] = w0[dcache_raddr_e[10:4]];
  temp_w0a_reg[143:0] = w0[dcache_raddr_e[10:4]];
  temp_w1a_reg[143:0] = w1[dcache_raddr_e[10:4]];
  temp_w1a_reg[143:0] = w1[dcache_raddr_e[10:4]];
  temp_w2a_reg[143:0] = w2[dcache_raddr_e[10:4]];
  temp_w2a_reg[143:0] = w2[dcache_raddr_e[10:4]];
  temp_w3a_reg[143:0] = w3[dcache_raddr_e[10:4]];
  temp_w3a_reg[143:0] = w3[dcache_raddr_e[10:4]];
end
end
 
`else
 
// Read
 
always @ (negedge clk)
 
  begin
 
    for (i=0;i<128;i=i+1)
 
      begin
 
        if (rw_wdline[i] & dcache_rvld_m)
 
          begin
 
            temp_w0a_reg[143:0] <= w0[i];
 
            temp_w1a_reg[143:0] <= w1[i];
 
            temp_w2a_reg[143:0] <= w2[i];
 
            temp_w3a_reg[143:0] <= w3[i];
 
          end
 
      end
 
  end
 
`endif
 
 
//removed stablizer, zero out without read
//removed stablizer, zero out without read
assign  temp_w0a[143:0] = dcache_rvld_m? temp_w0a_reg[143:0]: 144'b0;
assign  temp_w0a[143:0] = dcache_rvld_m? temp_w0a_reg[143:0]: 144'b0;
assign  temp_w1a[143:0] = dcache_rvld_m? temp_w1a_reg[143:0]: 144'b0;
assign  temp_w1a[143:0] = dcache_rvld_m? temp_w1a_reg[143:0]: 144'b0;
assign  temp_w2a[143:0] = dcache_rvld_m? temp_w2a_reg[143:0]: 144'b0;
assign  temp_w2a[143:0] = dcache_rvld_m? temp_w2a_reg[143:0]: 144'b0;
assign  temp_w3a[143:0] = dcache_rvld_m? temp_w3a_reg[143:0]: 144'b0;
assign  temp_w3a[143:0] = dcache_rvld_m? temp_w3a_reg[143:0]: 144'b0;
 
 
 
`endif
 
 
// Prior to SA, column mux (64(D)+8(P))x4 bits. Assume parity is
// Prior to SA, column mux (64(D)+8(P))x4 bits. Assume parity is
// at the end of the 144b line. Entry is wX||Parity
// at the end of the 144b line. Entry is wX||Parity
 
 
// Select either upper or lower 64b from each of the 4 ways.
// Select either upper or lower 64b from each of the 4 ways.
Line 569... Line 569...
 
 
 
 
always @ (negedge clk)
always @ (negedge clk)
  begin
  begin
 
 
 
`ifdef FPGA_SYN_DCD
 
 
        if(dcache_wvld_m & dcache_wr_rway_m[0]) begin
        if(dcache_wvld_m & dcache_wr_rway_m[0]) begin
                w0[dcache_rwaddr_m[10:4]] = (temp_w0a_reg[143:0] & way_mask_inv[143:0]) |
                w0[dcache_rwaddr_m[10:4]] = (temp_w0a_reg[143:0] & way_mask_inv[143:0]) |
                                           (dcache_wdata_m[143:0] & way_mask[143:0]) ;
                                           (dcache_wdata_m[143:0] & way_mask[143:0]) ;
        end
        end
Line 588... Line 588...
        if(dcache_wvld_m & dcache_wr_rway_m[3]) begin
        if(dcache_wvld_m & dcache_wr_rway_m[3]) begin
                w3[dcache_rwaddr_m[10:4]] = (temp_w3a_reg[143:0] & way_mask_inv[143:0]) |
                w3[dcache_rwaddr_m[10:4]] = (temp_w3a_reg[143:0] & way_mask_inv[143:0]) |
                                           (dcache_wdata_m[143:0] & way_mask[143:0]) ;
                                           (dcache_wdata_m[143:0] & way_mask[143:0]) ;
        end
        end
 
 
 
`else // !`ifdef FPGA_SYN_DCD
 
 
 
    for (j=0;j<128;j=j+1)
 
      begin
 
      if (rw_wdline[j] & dcache_wvld_m & dcache_wr_rway_m[0])
 
        begin
 
        // read 
 
        temp_w0[143:0] = w0[j];
 
        // modify & write
 
        w0[j] = (temp_w0[143:0] & way_mask_inv[143:0]) |
 
            (dcache_wdata_m[143:0] & way_mask[143:0]) ;
 
        end
 
      if (rw_wdline[j] & dcache_wvld_m & dcache_wr_rway_m[1])
 
        begin
 
        // read
 
                   temp_w1[143:0] = w1[j];
 
        // modify & write
 
        w1[j] = (temp_w1[143:0] & way_mask_inv[143:0]) |
 
            (dcache_wdata_m[143:0] & way_mask[143:0]) ;
 
        end
 
      if (rw_wdline[j] & dcache_wvld_m & dcache_wr_rway_m[2])
 
        begin
 
        // read 
 
        temp_w2[143:0] = w2[j];
 
        // modify & write
 
        w2[j] = (temp_w2[143:0] & way_mask_inv[143:0]) |
 
            (dcache_wdata_m[143:0] & way_mask[143:0]) ;
 
        end
 
      if (rw_wdline[j] & dcache_wvld_m & dcache_wr_rway_m[3])
 
        begin
 
        // read 
 
        temp_w3[143:0] = w3[j];
 
        // modify & write.
 
        w3[j] = (temp_w3[143:0] & way_mask_inv[143:0])  |
 
                            (dcache_wdata_m[143:0] & way_mask[143:0]) ;
 
        end
 
      end
 
`endif // !`ifdef FPGA_SYN_DCD
 // !`ifdef FPGA_SYN_DCD
 
 
 
  end // always @ (negedge clk)
  end // always @ (negedge clk)
 
 
endmodule
endmodule
 
 

powered by: WebSVN 2.1.0

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