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

Subversion Repositories wbif_68k

[/] [wbif_68k/] [trunk/] [rtl/] [verilog/] [dragonball_wbmaster.v] - Blame information for rev 6

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 rherveille
/////////////////////////////////////////////////////////////////////
2
////                                                             ////
3
////  OpenCores/Dragonix    DragonBall/68K to WISHBONE Interface ////
4
////                                                             ////
5
////  Author: Richard Herveille                                  ////
6
////          richard@asics.ws                                   ////
7
////          www.asics.ws                                       ////
8
////                                                             ////
9
/////////////////////////////////////////////////////////////////////
10
////                                                             ////
11
//// Copyright (C) 2002 Richard Herveille                        ////
12
////                    richard@asics.ws                         ////
13
////                                                             ////
14
//// This source file may be used and distributed without        ////
15
//// restriction provided that this copyright statement is not   ////
16
//// removed from the file and that any derivative work contains ////
17
//// the original copyright notice and the associated disclaimer.////
18
////                                                             ////
19
////     THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY     ////
20
//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED   ////
21
//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS   ////
22
//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR      ////
23
//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,         ////
24
//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES    ////
25
//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE   ////
26
//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR        ////
27
//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  ////
28
//// LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT  ////
29
//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT  ////
30
//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE         ////
31
//// POSSIBILITY OF SUCH DAMAGE.                                 ////
32
////                                                             ////
33
/////////////////////////////////////////////////////////////////////
34
 
35
//  CVS Log
36
//
37 5 rherveille
//  $Id: dragonball_wbmaster.v,v 1.3 2003-01-09 16:46:14 rherveille Exp $
38 2 rherveille
//
39 5 rherveille
//  $Date: 2003-01-09 16:46:14 $
40
//  $Revision: 1.3 $
41 2 rherveille
//  $Author: rherveille $
42
//  $Locker:  $
43
//  $State: Exp $
44
//
45 4 rherveille
// Change History:
46
//               $Log: not supported by cvs2svn $
47 5 rherveille
//               Revision 1.2  2002/12/22 16:09:33  rherveille
48
//               Timing enhancement bug fixes
49 4 rherveille
//
50 5 rherveille
//
51 2 rherveille
 
52
 
53
 
54
//
55
// This core converts a 16bit DragonBall bus interface into a 16bit
56
// WISHBONE Master interface
57
//
58
 
59
// synopsys translate_off
60
`include "timescale.v"
61
// synopsys translate_on
62
 
63 4 rherveille
module dragonball_wbmaster(
64 2 rherveille
  clk, reset_n,
65
  a, cs_n, d, lwe_n, uwe_n, oe_n, dtack_n, berr,
66
  clk_o, rst_o, cyc_o, stb_o, adr_o, sel_o, we_o, dat_o, dat_i, ack_i, err_i
67
);
68
 
69
  //
70
  // Parameters
71
  //
72
  parameter adr_hi = 9;
73
 
74
 
75
  //
76
  // Inputs & outputs
77
  //
78
 
79
  // Motorola 68K bus
80
  input             clk;           // master clock
81
  input             reset_n;       // asynchronous active low reset
82
  input  [adr_hi:1] a;             // address inputs
83
  input             cs_n;          // active low wishbone range chip select
84
  inout  [    15:0] d;             // data in-out
85
  input             lwe_n, uwe_n;  // active low lower-write enable, upper write enable
86
  input             oe_n;          // active low output enable signal
87
  output            dtack_n;       // active low data acknowledge
88
  output            berr;          // bus error
89
 
90
  // 16bit, 8bit granular WISHBONE bus master
91
  output            clk_o;         // clock
92
  output            rst_o;         // reset (asynchronous active low)
93
  output            cyc_o;         // cycle
94
  output            stb_o;         // strobe  (cycle and strobe are the same signal)
95
  output [adr_hi:1] adr_o;         // address
96
  output [     1:0] sel_o;         // select line (16bit bus ==> 2 select lines)
97
  output            we_o;          // write enable
98
  output [    15:0] dat_o;         // data output
99
  input  [    15:0] dat_i;         // data input
100
  input             ack_i;         // normal bus termination
101
  input             err_i;         // abnormal bus termination (bus error)
102
 
103
  //
104
  //  Module body
105
  //
106
 
107
  reg            cyc_o, stb_o;
108
  reg [adr_hi:1] adr_o;
109
  reg [     1:0] sel_o;
110
  reg            we_o;
111
  reg            dtack;
112 4 rherveille
  reg [    15:0] sdat_i;
113 2 rherveille
 
114
  wire cs  = !cs_n & !(ack_i | err_i | dtack);   // generate active high chip select signal
115
  wire lwe = !lwe_n;                             // generate active high lo_write_enable signal
116
  wire uwe = !uwe_n;                             // generate active high hi_write_enable signal
117
  wire oe  = !oe_n;                              // generate active high output enable signal
118
 
119
  assign clk_o = clk;                            // wishbone clock == external clock
120
  assign rst_o = reset_n;                        // reset == external reset
121 4 rherveille
 
122 2 rherveille
  assign berr = err_i;
123
 
124
  always @(posedge clk or negedge reset_n)
125
    if (!reset_n)
126
      begin
127 4 rherveille
          cyc_o  <= #1 1'b0;
128
          stb_o  <= #1 1'b0;
129
          adr_o  <= #1 {{adr_hi-1}{1'b0}};
130
          sel_o  <= #1 2'b00;
131
          we_o   <= #1 1'b0;
132
          dtack  <= #1 1'b0;
133 5 rherveille
          sdat_i <= #1 16'h0;
134 2 rherveille
      end
135
    else
136
      begin
137 4 rherveille
          cyc_o  <= #1 cs;                       // assert cyc_o when CS asserted
138
          stb_o  <= #1 cs;                       // assert stb_o when CS asserted
139 2 rherveille
 
140 4 rherveille
          adr_o  <= #1 a;                        // address == external address
141
          sel_o  <= #1 oe ? 2'b11 : {uwe, lwe};  // generate select lines;
142 2 rherveille
                                                 // read (oe asserted): SEL[1:0] = '11'
143
                                                 // write (oe negated): SEL[1:0] = 'uwe, lwe'
144 4 rherveille
          we_o   <= #1 uwe | lwe;                // write == uwe OR lwe asserted
145 2 rherveille
 
146 4 rherveille
          dtack  <= #1 ack_i & !dtack;           // generate DTACK signal
147
 
148 5 rherveille
          sdat_i <= #1 dat_i;                    // synchronize dat_i
149 2 rherveille
      end
150
 
151 4 rherveille
  assign dat_o   = d;                            // dat_o==external databus (not synchronised!!)
152
 
153
  assign d       = (~cs_n & oe) ? sdat_i : 16'hzzzz; // generate databus tri-state buffers
154 2 rherveille
  assign dtack_n = !dtack;                       // generate active low DTACK signal
155
 
156
endmodule
157
 

powered by: WebSVN 2.1.0

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