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

Subversion Repositories s1_core

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

Show entire file | Details | Blame | View Log

Rev 105 Rev 113
Line 44... Line 44...
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
// Local header file includes / local defines
// Local header file includes / local defines
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
 
 
//FPGA_SYN enables all FPGA related modifications
//FPGA_SYN enables all FPGA related modifications
 
`ifdef FPGA_SYN
 
`define FPGA_SYN_SCM
 
`endif
 
 
module bw_r_scm (/*AUTOARG*/
module bw_r_scm (/*AUTOARG*/
   // Outputs
   // Outputs
   stb_rdata_ramc, stb_ld_full_raw, stb_ld_partial_raw,
   stb_rdata_ramc, stb_ld_full_raw, stb_ld_partial_raw,
   stb_cam_hit_ptr, stb_cam_hit, stb_cam_mhit,
   stb_cam_hit_ptr, stb_cam_hit, stb_cam_mhit,
Line 126... Line 126...
wire    [7:0]    byte_match_mx ;
wire    [7:0]    byte_match_mx ;
wire    [7:0]    cam_hit ;
wire    [7:0]    cam_hit ;
wire    [44:0]   wdata_ramc ;
wire    [44:0]   wdata_ramc ;
wire    [44:0]   cam_data ;
wire    [44:0]   cam_data ;
wire    [44:15] wr_data ;
wire    [44:15] wr_data ;
 
`ifdef FPGA_SYN_SCM
reg     [4:0]    stb_addr;
reg     [4:0]    stb_addr;
 
`endif
 
 
 
 
integer i,j,k,l ;
integer i,j,k,l ;
 
 
 
 
Line 151... Line 151...
        begin
        begin
                cam_tid_tmp[1:0]        <= stb_cam_cm_tid[1:0] ;
                cam_tid_tmp[1:0]        <= stb_cam_cm_tid[1:0] ;
                cam_vld_tmp             <= stb_cam_vld ;
                cam_vld_tmp             <= stb_cam_vld ;
        end */
        end */
 
 
 
`ifdef FPGA_SYN_SCM
 
`else
 
// Wordlines need to be generated locally 
 
always @ (posedge rclk)
 
        begin
 
                for (i=0;i<32;i=i+1)
 
                        begin
 
                        if ({stb_cam_rw_tid[1:0],stb_cam_rw_ptr[2:0]} == i)
 
                                rw_wdline[i]  <= 1'b1;
 
                        else
 
                                rw_wdline[i]  <= 1'b0;
 
                        end
 
        end
 
`endif
 
 
always @(posedge rclk)
always @(posedge rclk)
        begin
        begin
                pipe_wr_data[44:15] <= stb_cam_data[44:15];
                pipe_wr_data[44:15] <= stb_cam_data[44:15];
                alt_wr_data[44:15] <= stb_alt_wr_data[44:15];
                alt_wr_data[44:15] <= stb_alt_wr_data[44:15];
Line 177... Line 177...
                rptr_vld_tmp    <= stb_cam_rptr_vld ;
                rptr_vld_tmp    <= stb_cam_rptr_vld ;
                cam_tid[1:0]     <= stb_cam_cm_tid[1:0] ;
                cam_tid[1:0]     <= stb_cam_cm_tid[1:0] ;
                //cam_tid[1:0]  <= cam_tid_tmp[1:0] ;
                //cam_tid[1:0]  <= cam_tid_tmp[1:0] ;
                //ldq           <=  stb_quad_ld_cam ; Bug 2870
                //ldq           <=  stb_quad_ld_cam ; Bug 2870
                alt_wsel        <= stb_alt_wsel ;
                alt_wsel        <= stb_alt_wsel ;
 
`ifdef FPGA_SYN_SCM
                stb_addr        <= {stb_cam_rw_tid[1:0],stb_cam_rw_ptr[2:0]};
                stb_addr        <= {stb_cam_rw_tid[1:0],stb_cam_rw_ptr[2:0]};
 
`endif
        end
        end
 
 
assign  ldq =  stb_quad_ld_cam ;
assign  ldq =  stb_quad_ld_cam ;
assign  rptr_vld = rptr_vld_tmp | rst_tri_en ;
assign  rptr_vld = rptr_vld_tmp | rst_tri_en ;
 
 
Line 198... Line 198...
assign  wdata_ramc[44:0] = {wr_data[44:15],camwr_data[14:0]};
assign  wdata_ramc[44:0] = {wr_data[44:15],camwr_data[14:0]};
 
 
// Write
// Write
always @ (negedge rclk)
always @ (negedge rclk)
        begin
        begin
 
`ifdef FPGA_SYN_SCM
        if(wptr_vld) begin
        if(wptr_vld) begin
                if(~rst_tri_en) begin
                if(~rst_tri_en) begin
                        stb_ramc[stb_addr] <= wdata_ramc[44:0];
                        stb_ramc[stb_addr] <= wdata_ramc[44:0];
                        stb_rdata_ramc[44:0] <=  wdata_ramc[44:0];
                        stb_rdata_ramc[44:0] <=  wdata_ramc[44:0];
                end else begin
                end else begin
                        stb_rdata_ramc[44:0] <=  stb_ramc[stb_addr];
                        stb_rdata_ramc[44:0] <=  stb_ramc[stb_addr];
                end
                end
        end
        end
 
`else
 
                for (j=0;j<NUMENTRIES;j=j+1)
 
                        begin
 
                        if (rw_wdline[j] & wptr_vld)
 
                                begin
 
                                if (~rst_tri_en)
 
                                        begin
 
                                        stb_ramc[j] <=  wdata_ramc[44:0];
 
                                        // write data is write-thru
 
                                        stb_rdata_ramc[44:0] <=  wdata_ramc[44:0];
 
                                        end
 
                                else
 
                                        begin
 
                                        // INNO - default rd if wr squashed by scan_ena.
 
                                        stb_rdata_ramc[44:0] <=  stb_ramc[j];
 
                                        end
 
                                end
 
                        end
 
`endif
// Read
// Read
 
`ifdef FPGA_SYN_SCM
                if(rptr_vld & ~scan_ena) begin
                if(rptr_vld & ~scan_ena) begin
                        if (rptr_vld & wptr_vld & ~rst_tri_en) begin
                        if (rptr_vld & wptr_vld & ~rst_tri_en) begin
                                stb_rdata_ramc[44:0] <=  wdata_ramc[44:0];
                                stb_rdata_ramc[44:0] <=  wdata_ramc[44:0];
                        end
                        end
                        else begin
                        else begin
                                stb_rdata_ramc[44:0] <=  stb_ramc[stb_addr];
                                stb_rdata_ramc[44:0] <=  stb_ramc[stb_addr];
                        end
                        end
                end
                end
 
`else
 
                for (k=0;k<NUMENTRIES;k=k+1)
 
                        begin
 
                        if (rw_wdline[k] & rptr_vld & ~scan_ena)
 
                                begin
 
                                if (rptr_vld & wptr_vld & ~rst_tri_en) // INNO - write-thru
 
                                        stb_rdata_ramc[44:0] <=  wdata_ramc[44:0];
 
                                else
 
                                        stb_rdata_ramc[44:0] <=  stb_ramc[k];
 
                                end
 
                        end
 
`endif
        end
        end
 
 
//=========================================================================================
//=========================================================================================
//      CAM contents of CAM RAM
//      CAM contents of CAM RAM
//=========================================================================================
//=========================================================================================

powered by: WebSVN 2.1.0

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