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

Subversion Repositories oms8051mini

[/] [oms8051mini/] [trunk/] [rtl/] [8051/] [oc8051_ram_256x8_two_bist.v] - Diff between revs 25 and 36

Only display areas with differences | Details | Blame | View Log

Rev 25 Rev 36
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
////                                                              ////
////                                                              ////
////  8051 internal ram                                           ////
////  8051 internal ram                                           ////
////                                                              ////
////                                                              ////
////  This file is part of the 8051 cores project                 ////
////  This file is part of the 8051 cores project                 ////
////  http://www.opencores.org/cores/oms8051mini/                 ////
////  http://www.opencores.org/cores/oms8051mini/                 ////
////                                                              ////
////                                                              ////
////  Description                                                 ////
////  Description                                                 ////
////   256 bytes two port ram                                     ////
////   256 bytes two port ram                                     ////
////                                                              ////
////                                                              ////
////  To Do:                                                      ////
////  To Do:                                                      ////
////   nothing                                                    ////
////   nothing                                                    ////
////                                                              ////
////                                                              ////
////  Author(s):                                                  ////
////  Author(s):                                                  ////
////      - Simon Teran, simont@opencores.org                     ////
////      - Simon Teran, simont@opencores.org                     ////
////      - Dinesh Annayya, dinesha@opencores.org                 ////
////      - Dinesh Annayya, dinesha@opencores.org                 ////
////                                                              ////
////                                                              ////
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
////   v0.0 - Dinesh A, 5th Jan 2017
////   v0.0 - Dinesh A, 5th Jan 2017
////        1. Active edge of reset changed from High to Low
////        1. Active edge of reset changed from High to Low
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
////                                                              ////
////                                                              ////
//// Copyright (C) 2000 Authors and OPENCORES.ORG                 ////
//// Copyright (C) 2000 Authors and OPENCORES.ORG                 ////
////                                                              ////
////                                                              ////
//// This source file may be used and distributed without         ////
//// This source file may be used and distributed without         ////
//// restriction provided that this copyright statement is not    ////
//// restriction provided that this copyright statement is not    ////
//// removed from the file and that any derivative work contains  ////
//// removed from the file and that any derivative work contains  ////
//// the original copyright notice and the associated disclaimer. ////
//// the original copyright notice and the associated disclaimer. ////
////                                                              ////
////                                                              ////
//// This source file is free software; you can redistribute it   ////
//// This source file is free software; you can redistribute it   ////
//// and/or modify it under the terms of the GNU Lesser General   ////
//// and/or modify it under the terms of the GNU Lesser General   ////
//// Public License as published by the Free Software Foundation; ////
//// Public License as published by the Free Software Foundation; ////
//// either version 2.1 of the License, or (at your option) any   ////
//// either version 2.1 of the License, or (at your option) any   ////
//// later version.                                               ////
//// later version.                                               ////
////                                                              ////
////                                                              ////
//// This source is distributed in the hope that it will be       ////
//// This source is distributed in the hope that it will be       ////
//// useful, but WITHOUT ANY WARRANTY; without even the implied   ////
//// useful, but WITHOUT ANY WARRANTY; without even the implied   ////
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      ////
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      ////
//// PURPOSE.  See the GNU Lesser General Public License for more ////
//// PURPOSE.  See the GNU Lesser General Public License for more ////
//// details.                                                     ////
//// details.                                                     ////
////                                                              ////
////                                                              ////
//// You should have received a copy of the GNU Lesser General    ////
//// You should have received a copy of the GNU Lesser General    ////
//// Public License along with this source; if not, download it   ////
//// Public License along with this source; if not, download it   ////
//// from http://www.opencores.org/lgpl.shtml                     ////
//// from http://www.opencores.org/lgpl.shtml                     ////
////                                                              ////
////                                                              ////
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//
//
// CVS Revision History
// CVS Revision History
//
//
// $Log: not supported by cvs2svn $
// $Log: not supported by cvs2svn $
//
//
//
//
 
 
 
 
`include "top_defines.v"
`include "top_defines.v"
 
 
//
//
// two port ram
// two port ram
//
//
module oc8051_ram_256x8_two_bist (
module oc8051_ram_256x8_two_bist (
                     clk,
                     clk,
                     resetn,
                     resetn,
                     rd_addr,
                     rd_addr,
                     rd_data,
                     rd_data,
                     rd_en,
                     rd_en,
                     wr_addr,
                     wr_addr,
                     wr_data,
                     wr_data,
                     wr_en,
                     wr_en,
                     wr
                     wr
`ifdef OC8051_BIST
`ifdef OC8051_BIST
         ,
         ,
         scanb_rst,
         scanb_rst,
         scanb_clk,
         scanb_clk,
         scanb_si,
         scanb_si,
         scanb_so,
         scanb_so,
         scanb_en
         scanb_en
`endif
`endif
                     );
                     );
 
 
 
 
input         clk,
input         clk,
              wr,
              wr,
              resetn,
              resetn,
              rd_en,
              rd_en,
              wr_en;
              wr_en;
input  [7:0]  wr_data;
input  [7:0]  wr_data;
input  [7:0]  rd_addr,
input  [7:0]  rd_addr,
              wr_addr;
              wr_addr;
output [7:0]  rd_data;
output [7:0]  rd_data;
 
 
`ifdef OC8051_BIST
`ifdef OC8051_BIST
input   scanb_rst;
input   scanb_rst;
input   scanb_clk;
input   scanb_clk;
input   scanb_si;
input   scanb_si;
output  scanb_so;
output  scanb_so;
input   scanb_en;
input   scanb_en;
`endif
`endif
 
 
 
 
`ifdef OC8051_RAM_XILINX
`ifdef OC8051_RAM_XILINX
  xilinx_ram_dp u_ram(
  xilinx_ram_dp u_ram(
        // read port
        // read port
        .CLKA(clk),
        .CLKA(clk),
        .RSTA(resetn),
        .RSTA(resetn),
        .ENA(rd_en),
        .ENA(rd_en),
        .ADDRA(rd_addr),
        .ADDRA(rd_addr),
        .DIA(8'h00),
        .DIA(8'h00),
        .WEA(1'b0),
        .WEA(1'b0),
        .DOA(rd_data),
        .DOA(rd_data),
 
 
        // write port
        // write port
        .CLKB(clk),
        .CLKB(clk),
        .RSTB(resetn),
        .RSTB(resetn),
        .ENB(wr_en),
        .ENB(wr_en),
        .ADDRB(wr_addr),
        .ADDRB(wr_addr),
        .DIB(wr_data),
        .DIB(wr_data),
        .WEB(wr),
        .WEB(wr),
        .DOB()
        .DOB()
  );
  );
 
 
  defparam
  defparam
        xilinx_ram.dwidth = 8,
        xilinx_ram.dwidth = 8,
        xilinx_ram.awidth = 8;
        xilinx_ram.awidth = 8;
 
 
`elsif OC8051_RAM_VIRTUALSILICON
`elsif OC8051_RAM_VIRTUALSILICON
 
 
`elsif  OC8051_RAM_ACTEL
`elsif  OC8051_RAM_ACTEL
 
 
      oc8051_actel_ram_256x8  u_ram(
      oc8051_actel_ram_256x8  u_ram(
        .RWCLK  ( clk            ),
        .RWCLK  ( clk            ),
        .RESET  ( resetn            ),
        .RESET  ( resetn            ),
        .REN   ( rd_en          ),
        .REN   ( rd_en          ),
        .RADDR ( rd_addr        ),
        .RADDR ( rd_addr        ),
        .RD    ( rd_data        ),
        .RD    ( rd_data        ),
 
 
        .WEN    ( wr             ),
        .WEN    ( wr             ),
        .WADDR ( wr_addr        ),
        .WADDR ( wr_addr        ),
        .WD    ( wr_data        )
        .WD    ( wr_data        )
      );
      );
 
 
 
 
`elsif  OC8051_RAM_GENERIC
`elsif  OC8051_RAM_GENERIC
 
 
      generic_dpram #(8, 8) u_ram(
      generic_dpram #(8, 8) u_ram(
        .rclk  ( clk            ),
        .rclk  ( clk            ),
        .rresetn( resetn            ),
        .rresetn( resetn            ),
        .rce   ( rd_en          ),
        .rce   ( rd_en          ),
        .oe    ( 1'b1           ),
        .oe    ( 1'b1           ),
        .raddr ( rd_addr        ),
        .raddr ( rd_addr        ),
        .do    ( rd_data        ),
        .do    ( rd_data        ),
 
 
        .wclk  ( clk            ),
        .wclk  ( clk            ),
        .wresetn  ( resetn            ),
        .wresetn  ( resetn            ),
        .wce   ( wr_en          ),
        .wce   ( wr_en          ),
        .we    ( wr             ),
        .we    ( wr             ),
        .waddr ( wr_addr        ),
        .waddr ( wr_addr        ),
        .di    ( wr_data        )
        .di    ( wr_data        )
      );
      );
 
 
`else
`else
 
 
      reg    [7:0]  rd_data;
      reg    [7:0]  rd_data;
      //
      //
      // buffer
      // buffer
      reg    [7:0]  buff [0:256];
      reg    [7:0]  buff [0:256];
 
 
 
 
      //
      //
      // writing to ram
      // writing to ram
      always @(posedge clk)
      always @(posedge clk)
      begin
      begin
       if (wr)
       if (wr)
          buff[wr_addr] <= #1 wr_data;
          buff[wr_addr] <= wr_data;
      end
      end
 
 
      //
      //
      // reading from ram
      // reading from ram
      always @(posedge clk or negedge resetn)
      always @(posedge clk or negedge resetn)
      begin
      begin
        if (resetn == 1'b0)
        if (resetn == 1'b0)
          rd_data <= #1 8'h0;
          rd_data <= 8'h0;
        else if ((wr_addr==rd_addr) & wr & rd_en)
        else if ((wr_addr==rd_addr) & wr & rd_en)
          rd_data <= #1 wr_data;
          rd_data <= wr_data;
        else if (rd_en)
        else if (rd_en)
          rd_data <= #1 buff[rd_addr];
          rd_data <= buff[rd_addr];
      end
      end
`endif      //OC8051_RAM_XILINX
`endif      //OC8051_RAM_XILINX
 
 
endmodule
endmodule
 
 

powered by: WebSVN 2.1.0

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