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

Subversion Repositories sport

[/] [sport/] [trunk/] [rtl/] [verilog/] [wb_interface.v] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 4 jeaander
//////////////////////////////////////////////////////////////////////
2
////                                                              ////
3
////  wb_interface.v                                              ////
4
////                                                              ////
5
////                                                              ////
6
////  This file is part of the SPORT Controller                   ////
7
////  http://www.opencores.org/projects/sport/                    ////
8
////                                                              ////
9
////                                                              ////
10
////  Author(s):                                                  ////
11
////       Jeff Anderson                                          ////
12
////       jeaander@opencores.org                                 ////
13
////                                                              ////
14
////                                                              ////
15
////  All additional information is available in the README.txt   ////
16
////  file.                                                       ////
17
////                                                              ////
18
//////////////////////////////////////////////////////////////////////
19
////                                                              ////
20
//// Copyright (C) 2013 Authors                                   ////
21
////                                                              ////
22
//// This source file may be used and distributed without         ////
23
//// restriction provided that this copyright statement is not    ////
24
//// removed from the file and that any derivative work contains  ////
25
//// the original copyright notice and the associated disclaimer. ////
26
////                                                              ////
27
//// This source file is free software; you can redistribute it   ////
28
//// and/or modify it under the terms of the GNU Lesser General   ////
29
//// Public License as published by the Free Software Foundation; ////
30
//// either version 2.1 of the License, or (at your option) any   ////
31
//// later version.                                               ////
32
////                                                              ////
33
//// This source is distributed in the hope that it will be       ////
34
//// useful, but WITHOUT ANY WARRANTY; without even the implied   ////
35
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      ////
36
//// PURPOSE.  See the GNU Lesser General Public License for more ////
37
//// details.                                                     ////
38
////                                                              ////
39
//// You should have received a copy of the GNU Lesser General    ////
40
//// Public License along with this source; if not, download it   ////
41
//// from http://www.opencores.org/lgpl.shtml                     ////
42
////                                                              ////
43
////                                                              ////
44
//////////////////////////////////////////////////////////////////////
45
//
46
//  Revisions at end of file
47
//
48
 
49
 
50
// synopsys translate_off
51
`include "timescale.v"
52
// synopsys translate_on
53
 
54
 //WB interface definitions imported from wiegand_defines
55
`include "sport_defines.v"
56
 
57
module wb_interface_sport (
58
      // WB bus
59
    wb_rst_i,
60
    wb_clk_i,
61
 
62
    wb_stb_i,
63
    wb_ack_o,
64
    wb_addr_i,
65
    wb_we_i,
66
    wb_dat_i,
67
    wb_sel_i,
68
    wb_dat_o,
69
    wb_cyc_i,
70
    wb_cti_i,
71
    wb_err_o,
72
    wb_rty_o,
73
 
74
    rxsampleCnt,
75
    rxpacketCnt,
76
    txsampleCnt,
77
    txpacketCnt,
78
    dat_i,
79
    dat_o,
80
    rxsecEn,
81
    rxlateFS_earlyFSn,
82
    txsecEn,
83
    txlateFS_earlyFSn,
84
    tx_actHi,
85
    rx_actHi,
86
    msbFirst,
87
    tx_start,
88
    rx_start,
89
    rx_int
90
 
91
 
92
);
93
 
94
//--------------------------------------
95
// Wish Bone Interface
96
// -------------------------------------      
97
input                       wb_rst_i;
98
input                       wb_clk_i;
99
input                       wb_stb_i;
100
output                      wb_ack_o;
101
input [`WB_ADDR_WIDTH-1:0]  wb_addr_i;
102
input                       wb_we_i; // 1 - Write , 0 - Read
103
input [`WB_WIDTH-1:0]       wb_dat_i;
104
input [(`WB_WIDTH/8)-1:0]   wb_sel_i; // Byte enable
105
output [`WB_WIDTH-1:0]      dat_o;
106
input [`WB_WIDTH-1:0]       dat_i;    //data to and from WB interface, but not on WB
107
output [`WB_WIDTH-1:0]      wb_dat_o;
108
input                       wb_cyc_i;
109
input  [2:0]                wb_cti_i;
110
output                      wb_err_o;
111
output                      wb_rty_o;
112
 
113
//----------------------------------------
114
// interface to SPORT control logic
115
//----------------------------------------
116
 
117
output [4:0]                rxsampleCnt;
118
output [`SPORT_FIFODEPTH-1:0]                rxpacketCnt;
119
output [4:0]                txsampleCnt;
120
output [`SPORT_FIFODEPTH-1:0]                txpacketCnt;
121
output                      rxsecEn;
122
output                      rxlateFS_earlyFSn;
123
output                      txsecEn;
124
output                      txlateFS_earlyFSn;
125
output                      tx_actHi;
126
output                      rx_actHi;
127
output                      msbFirst;
128
output                      tx_start, rx_start;
129
output                      rx_int;
130
 
131
reg [`WB_WIDTH-1:0]       rxreg;
132
reg [`WB_WIDTH-1:0]       txreg;
133
wire                      err_int;
134
wire                      rty_int;
135
wire                      full;
136
 
137
 
138
/************************  standard WB stuff  ***************************/
139
reg ack,err,rty;
140
assign wb_ack_o = ack;
141
assign wb_err_o = err;
142
assign wb_rty_o = rty;
143
assign rst_o = wb_rst_i;
144
assign rst = wb_rst_i;
145
assign dat_o = wb_dat_i;
146
assign ack_o = ack;
147
assign stb_o = wb_stb_i;
148
assign cyc_o = wb_cyc_i;
149
assign we_o = wb_we_i;
150
 
151
//ACK logic
152
always @(posedge wb_clk_i or posedge rst) begin
153
  if (rst)  ack <= 1'b0;
154
  else      ack <= (~|(`SPORT_ADDR_MASK & wb_addr_i) & wb_stb_i & wb_cyc_i & ~err_int & ~rty_int);
155
end
156
 
157
//ERR logic if the FIFO is full
158
assign err_int = (~(wb_addr_i ^ `SPORT_ADDR) & wb_stb_i & wb_cyc_i & wb_we_i & full);
159
always @(posedge wb_clk_i or posedge rst) begin
160
  if (rst)      err <= 1'b0;
161
  else          err <= err_int;
162
end
163
 
164
//retry if we're in the middle of a write cycle
165
assign rty_int = (~|(`SPORT_ADDR_MASK & wb_addr_i) & wb_stb_i & wb_cyc_i & wb_we_i);
166
always @(posedge wb_clk_i or posedge rst) begin
167
  if (rst) rty <= 1'b0;
168
  else     rty <= rty_int;
169
end
170
 
171
//pass-thru clock
172
assign clk_o = wb_clk_i;
173
 
174
/************************  configuration registers  *************************/
175
 
176
assign lock_cfg_rx = rxreg[`SPORT_FIFODEPTH+10];
177
assign lock_cfg_tx = txreg[`SPORT_FIFODEPTH+10];
178
assign rxsecEn = rxreg[`SPORT_FIFODEPTH+9];
179
assign rxlateFS_earlyFSn = rxreg[`SPORT_FIFODEPTH+8];
180
assign txsecEn = txreg[`SPORT_FIFODEPTH+9];
181
assign txlateFS_earlyFSn = txreg[`SPORT_FIFODEPTH+8];
182
assign tx_actHi = txreg[`SPORT_FIFODEPTH+7];
183
assign rx_actHi = rxreg[`SPORT_FIFODEPTH+7];
184
assign tx_start = txreg[`SPORT_FIFODEPTH+6];
185
assign msbFirst = txreg[`SPORT_FIFODEPTH+5];
186
assign rx_start = rxreg[`SPORT_FIFODEPTH+6];
187
assign rx_int = rxreg[`SPORT_FIFODEPTH+5];
188
assign rxsampleCnt = rxreg[`SPORT_FIFODEPTH+4:`SPORT_FIFODEPTH];
189
assign rxpacketCnt = rxreg[`SPORT_FIFODEPTH-1:0];
190
assign txsampleCnt = txreg[`SPORT_FIFODEPTH+4:`SPORT_FIFODEPTH];
191
assign txpacketCnt = txreg[`SPORT_FIFODEPTH-1:0];
192
 
193
//defines the pulse width of the controller
194
always @(negedge wb_clk_i or posedge rst) begin
195
  if (rst)        rxreg <= `WB_WIDTH'hA;
196
  else if ((wb_addr_i == `WB_CNFG_RX) && (wb_stb_i & wb_cyc_i & wb_we_i & ~lock_cfg_rx)) rxreg <= wb_dat_i;
197
end
198
 
199
 
200
//defines the pulse to pulse delayof the controller
201
always @(negedge wb_clk_i or posedge rst) begin
202
  if (rst)                                                                              txreg <= `WB_WIDTH'h0;
203
  else if ((wb_addr_i == `WB_CNFG_TX) && (wb_stb_i & wb_cyc_i & wb_we_i & ~lock_cfg_tx))  txreg <= wb_dat_i;
204
end
205
 
206
//readback registers on valid WB read cycle
207
assign wb_dat_rdbk = ((wb_addr_i == `WB_CNFG_RX)? rxreg : txreg);
208
assign wb_dat_o = (wb_stb_i & wb_cyc_i & ~wb_we_i)? wb_dat_rdbk : `WB_WIDTH'hz;
209
 
210
/*******************************  DATA FIFO  ********************************************/
211
 
212
//fifo for TX data.
213
assign wb_wr_en = (wb_addr_i == `SPORT_ADDR) && (wb_stb_i & wb_cyc_i & wb_we_i & ~full);
214
assign wb_rd_en = (wb_addr_i == `SPORT_ADDR) && (wb_stb_i & wb_cyc_i & ~wb_we_i);
215
endmodule
216
 
217
//////////////////////////////////////////////////////////////////////
218
//
219
// CVS Revision History
220
//
221
// $Log: $
222
//

powered by: WebSVN 2.1.0

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