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

Subversion Repositories xgate

[/] [xgate/] [trunk/] [bench/] [verilog/] [wb_master_model.v] - Diff between revs 35 and 89

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 35 Rev 89
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
////                                                               ////
////                                                               ////
////  WISHBONE rev.B2 Wishbone Master model                        ////
////  WISHBONE rev.B2 Wishbone Master model                        ////
////                                                               ////
////                                                               ////
////                                                               ////
////                                                               ////
////  Author: Richard Herveille                                    ////
////  Author: Richard Herveille                                    ////
////          richard@asics.ws                                     ////
////          richard@asics.ws                                     ////
////          www.asics.ws                                         ////
////          www.asics.ws                                         ////
////                                                               ////
////                                                               ////
////  Downloaded from: http://www.opencores.org/projects/mem_ctrl  ////
////  Downloaded from: http://www.opencores.org/projects/mem_ctrl  ////
////                                                               ////
////                                                               ////
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
////                                                               ////
////                                                               ////
//// Copyright (C) 2001 Richard Herveille                          ////
//// Copyright (C) 2001 Richard Herveille                          ////
////                    richard@asics.ws                           ////
////                    richard@asics.ws                           ////
////                                                               ////
////                                                               ////
//// 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 SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY       ////
////     THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY       ////
//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED     ////
//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED     ////
//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS     ////
//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS     ////
//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR        ////
//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR        ////
//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,           ////
//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,           ////
//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES      ////
//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES      ////
//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE     ////
//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE     ////
//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR          ////
//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR          ////
//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF    ////
//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF    ////
//// LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT    ////
//// LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT    ////
//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT    ////
//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT    ////
//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE           ////
//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE           ////
//// POSSIBILITY OF SUCH DAMAGE.                                   ////
//// POSSIBILITY OF SUCH DAMAGE.                                   ////
////                                                               ////
////                                                               ////
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
 
 
//  CVS Log
 
//
 
//  $Id$
 
//
 
//  $Date$
 
//  $Revision$
 
//  $Author$
 
//  $Locker$
 
//  $State$
 
//
 
// Change History:
 
//
//
`include "timescale.v"
`include "timescale.v"
 
 
module wb_master_model  #(parameter dwidth = 32,
module wb_master_model  #(parameter dwidth = 32,
                          parameter awidth = 32)
                          parameter awidth = 32)
(
(
output reg                 cyc,
output reg                 cyc,
output reg                 stb,
output reg                 stb,
output reg                 we,
output reg                 we,
output reg [dwidth/8 -1:0] sel,
output reg [dwidth/8 -1:0] sel,
output reg [awidth   -1:0] adr,
output reg [awidth   -1:0] adr,
output reg [dwidth   -1:0] dout,
output reg [dwidth   -1:0] dout,
input      [dwidth   -1:0] din,
input      [dwidth   -1:0] din,
input                      clk,
input                      clk,
input                      ack,
input                      ack,
input                      rst,  // No Connect
input                      rst,  // No Connect
input                      err,  // No Connect
input                      err,  // No Connect
input                      rty   // No Connect
input                      rty   // No Connect
);
);
 
 
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
//
//
// Local Wires
// Local Wires
//
//
 
 
reg [dwidth   -1:0] q;
reg [dwidth-1:0] q;
 
 
event test_command_start;
event test_command_start;
event test_command_mid;
event test_command_mid;
event test_command_end;
event test_command_end;
 
 
event cmp_error_detect;
event cmp_error_detect;
 
 
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
//
//
// Memory Logic
// Memory Logic
//
//
 
 
initial
initial
        begin
  begin
                adr  = {awidth{1'bx}};
    adr  = {awidth{1'bx}};
                dout = {dwidth{1'bx}};
    dout = {dwidth{1'bx}};
                cyc  = 1'b0;
    cyc  = 1'b0;
                stb  = 1'bx;
    stb  = 1'bx;
                we   = 1'hx;
    we   = 1'hx;
                sel  = {dwidth/8{1'bx}};
    sel  = {dwidth/8{1'bx}};
                #1;
    #1;
                $display("\nINFO: WISHBONE MASTER MODEL INSTANTIATED (%m)");
    $display("\nINFO: WISHBONE MASTER MODEL INSTANTIATED (%m)");
        end
  end
 
 
 
 
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
//
//
// Wishbone write cycle
// Wishbone write cycle
//
//
 
 
task wb_write;
task wb_write;
        input   delay;
  input   delay;
        integer delay;
  integer delay;
 
 
        input   [awidth   -1:0] a;
  input   [awidth   -1:0] a;
        input   [dwidth   -1:0] d;
  input   [dwidth   -1:0] d;
        input   [dwidth/8 -1:0] s;
  input   [dwidth/8 -1:0] s;
 
 
        begin
  begin
                -> test_command_start;
    -> test_command_start;
                // wait initial delay
    // wait initial delay
                repeat(delay) @(posedge clk);
    repeat(delay) @(posedge clk);
 
 
                // assert wishbone signal
    // assert wishbone signal
                #1;
    #1;
                adr  = a;
    adr  = a;
                dout = d;
    dout = d;
                cyc  = 1'b1;
    cyc  = 1'b1;
                stb  = 1'b1;
    stb  = 1'b1;
                we   = 1'b1;
    we   = 1'b1;
                sel  = s;
    sel  = s;
                @(posedge clk);
    @(posedge clk);
                -> test_command_mid;
    -> test_command_mid;
 
 
                // wait for acknowledge from slave
    // wait for acknowledge from slave
                while(~ack)     @(posedge clk);
    while(~ack)     @(posedge clk);
                -> test_command_mid;
    -> test_command_mid;
 
 
                // negate wishbone signals
    // negate wishbone signals
                #1;
    #1;
                cyc  = 1'b0;
    cyc  = 1'b0;
                stb  = 1'bx;
    stb  = 1'bx;
                adr  = {awidth{1'bx}};
    adr  = {awidth{1'bx}};
                dout = {dwidth{1'bx}};
    dout = {dwidth{1'bx}};
                we   = 1'hx;
    we   = 1'hx;
                sel  = {dwidth/8{1'bx}};
    sel  = {dwidth/8{1'bx}};
                -> test_command_end;
                -> test_command_end;
 
 
        end
        end
 
 
endtask
endtask
 
 
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
//
//
// Wishbone read cycle
// Wishbone read cycle
//
//
 
 
task wb_read;
task wb_read;
        input   delay;
  input   delay;
        integer delay;
  integer delay;
 
 
        input   [awidth   -1:0] a;
  input   [awidth   -1:0] a;
        output  [dwidth   -1:0] d;
  output  [dwidth   -1:0] d;
        input   [dwidth/8 -1:0] s;
  input   [dwidth/8 -1:0] s;
 
 
        begin
        begin
 
 
                // wait initial delay
                // wait initial delay
                repeat(delay) @(posedge clk);
    repeat(delay) @(posedge clk);
 
 
                // assert wishbone signals
    // assert wishbone signals
                #1;
    #1;
                adr  = a;
    adr  = a;
                dout = {dwidth{1'bx}};
    dout = {dwidth{1'bx}};
                cyc  = 1'b1;
    cyc  = 1'b1;
                stb  = 1'b1;
    stb  = 1'b1;
                we   = 1'b0;
    we   = 1'b0;
                sel  = s;
    sel  = s;
                @(posedge clk);
    @(posedge clk);
 
 
                // wait for acknowledge from slave
    // wait for acknowledge from slave
                while(~ack)     @(posedge clk);
    while(~ack)     @(posedge clk);
 
 
                // negate wishbone signals
    // negate wishbone signals
                d    = din; // Grab the data on the posedge of clock
    d    = din; // Grab the data on the posedge of clock
                #1;         // Delay the clearing (hold time of the control signals
    #1;         // Delay the clearing (hold time of the control signals
                cyc  = 1'b0;
    cyc  = 1'b0;
                stb  = 1'bx;
    stb  = 1'bx;
                adr  = {awidth{1'bx}};
    adr  = {awidth{1'bx}};
                dout = {dwidth{1'bx}};
    dout = {dwidth{1'bx}};
                we   = 1'hx;
    we   = 1'hx;
                sel  = {dwidth/8{1'bx}};
                sel  = {dwidth/8{1'bx}};
 
 
        end
        end
 
 
endtask
endtask
 
 
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
//
//
// Wishbone compare cycle (read data from location and compare with expected data)
// Wishbone compare cycle (read data from location and compare with expected data)
//
//
 
 
task wb_cmp;
task wb_cmp;
        input   delay;
  input   delay;
        integer delay;
  integer delay;
 
 
        input [awidth   -1:0] a;
  input [awidth   -1:0] a;
        input [dwidth   -1:0] d_exp;
  input [dwidth   -1:0] d_exp;
        input [dwidth/8 -1:0] s;
  input [dwidth/8 -1:0] s;
 
 
        begin
  begin
                wb_read (delay, a, q, s);
    wb_read (delay, a, q, s);
 
 
                if (d_exp !== q)
    if (d_exp !== q)
                  begin
      begin
                        -> cmp_error_detect;
        -> cmp_error_detect;
                        $display("Data compare error at address %h. Received %h, expected %h at time %t", a, q, d_exp, $time);
        $display("Data compare error at address %h. Received %h, expected %h at time %t", a, q, d_exp, $time);
                  end
      end
        end
        end
 
 
endtask
endtask
 
 
endmodule
endmodule
 
 
 
 
 
 

powered by: WebSVN 2.1.0

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