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

Subversion Repositories apb_mstr

[/] [apb_mstr/] [trunk/] [src/] [base/] [apb_master.v] - Rev 12

Compare with Previous | Blame | View Log

<##//////////////////////////////////////////////////////////////////
////                                                             ////
////  Author: Eyal Hochberg                                      ////
////          eyal@provartec.com                                 ////
////                                                             ////
////  Downloaded from: http://www.opencores.org                  ////
/////////////////////////////////////////////////////////////////////
////                                                             ////
//// Copyright (C) 2010 Provartec LTD                            ////
//// www.provartec.com                                           ////
//// info@provartec.com                                          ////
////                                                             ////
//// This source file may be used and distributed without        ////
//// restriction provided that this copyright statement is not   ////
//// removed from the file and that any derivative work contains ////
//// the original copyright notice and the associated disclaimer.////
////                                                             ////
//// This source file is free software; you can redistribute it  ////
//// and/or modify it under the terms of the GNU Lesser General  ////
//// Public License as published by the Free Software Foundation.////
////                                                             ////
//// This source is distributed in the hope that it will be      ////
//// useful, but WITHOUT ANY WARRANTY; without even the implied  ////
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR     ////
//// PURPOSE.  See the GNU Lesser General Public License for more////
//// details. http://www.gnu.org/licenses/lgpl.html              ////
////                                                             ////
//////////////////////////////////////////////////////////////////##>
 
//////////////////////////////////////
//
// General:
//   The APB master is built of an AXI master and an AXI2APB bridge. 
//   The stub support APB (Amba2) and APB3 (Amba3) protocols, 
//   the define APB3 determines this (in def_apb_master.txt)
// 
//
// Tasks:
//
// write_single(input addr, input wdata)
//   Description: write a single APB burst
//   Parameters:
//               addr  - address
//               wdata - write data
// 
// read_single(input master_num, input addr, output rdata)
//   Description: read a single AB burst
//   Parameters:
//               addr  - address
//               rdata - return read data
//
// check_single(input master_num, input addr, input expected)
//   Description: read a single AB burst and give an error if the data read does not match expected
//   Parameters:
//               addr  - address
//               expected - expected read data
//
// write_and_check_single(input master_num, input addr, input data)
//   Description: write a single AB burst read it back and give an error if the write and read data don't match
//   Parameters:
//               addr  - address
//               data - data to write and expect on read
//
//
//////////////////////////////////////
 
 
OUTFILE PREFIX.v
 
INCLUDE def_apb_master.txt
 
module PREFIX(PORTS);
 
 
   input                    clk;
   input                    reset;
 
   output 		    psel;
   output 		    penable;
   output [ADDR_BITS-1:0]   paddr;
   output 		    pwrite;
   output [DATA_BITS-1:0]   pwdata;
   input [DATA_BITS-1:0]    prdata;
IFDEF APB3
   input 		    pslverr;
   input 		    pready;
ELSE APB3
 
   wire pslverr = 1'b0;
   wire pready = 1'b1;
ENDIF APB3
 
   wire                     GROUP_STUB_AXI;
 
 
   //set random tasks to be only 32 bit singles
   initial
     begin
        #1;
        PREFIX_axi_master.enable_all; 
        PREFIX_axi_master.use_addr_base=1;
        PREFIX_axi_master.len_min=0;
        PREFIX_axi_master.len_max=0;
        PREFIX_axi_master.size_min=2;
        PREFIX_axi_master.size_max=2;     
     end
 
 
   CREATE axi_master.v \\
DEFCMD(SWAP.GLOBAL CONST(PREFIX) PREFIX_axi_master) \\
DEFCMD(SWAP.GLOBAL CONST(ADDR_BITS) ADDR_BITS) \\
DEFCMD(SWAP.GLOBAL CONST(DATA_BITS) DATA_BITS) \\
   DEFCMD(GROUP.USER AXI_ID overrides {)  \\
   DEFCMD(0) \\ 
   DEFCMD(})
 
     PREFIX_axi_master PREFIX_axi_master(
                           .clk(clk),
                           .reset(reset),
                           .GROUP_STUB_AXI(GROUP_STUB_AXI),
                           .idle()
                           );
 
 
   CREATE axi2apb.v \\
DEFCMD(SWAP CONST(SLAVE_NUM) 1) \\ 
DEFCMD(SWAP.GLOBAL CONST(PREFIX) PREFIX_axi2apb) \\
DEFCMD(SWAP.GLOBAL CONST(ADDR_BITS) ADDR_BITS) \\
DEFCMD(SWAP.GLOBAL CONST(DATA_BITS) DATA_BITS)
 
   PREFIX_axi2apb PREFIX_axi2apb(
                           .clk(clk),
                           .reset(reset),
                           .GROUP_STUB_AXI(GROUP_STUB_AXI),
 
                           .penable(penable),
                           .pwrite(pwrite),
                           .paddr(paddr),
                           .pwdata(pwdata),
                           .psel(psel),
                           .prdata(prdata),
                           .pready(pready),
                           .pslverr(pslverr)
                           );
 
 
   task write_single;
      input [ADDR_BITS-1:0]  addr;
      input [DATA_BITS-1:0]  wdata;
      begin
         PREFIX_axi_master.write_single(0, addr, wdata);
      end
   endtask
 
   task read_single;
      input [ADDR_BITS-1:0]  addr;
      output [DATA_BITS-1:0]  rdata;
      begin
         PREFIX_axi_master.read_single(0, addr, rdata);
      end
   endtask
 
   task check_single;
      input [ADDR_BITS-1:0]  addr;
      input [DATA_BITS-1:0]  expected;
      begin
         PREFIX_axi_master.check_single(0, addr, expected);
      end
   endtask
 
   task write_and_check_single;
      input [ADDR_BITS-1:0]  addr;
      input [DATA_BITS-1:0]  data;
      begin
         PREFIX_axi_master.write_and_check_single(0, addr, data);
      end
   endtask
 
 
endmodule
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

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