source: PlatformSupport/Deprecated/pcores/EEPROM_v1_01_a/hdl/verilog/user_logic.v

Last change on this file was 564, checked in by murphpo, 17 years ago

Updated EEPROM core with synthesis constraints to prevent unnecessary BUFG usage

File size: 11.7 KB
Line 
1//----------------------------------------------------------------------------
2// user_logic.v - module
3//----------------------------------------------------------------------------
4//
5// ***************************************************************************
6// ** Copyright (c) 1995-2006 Xilinx, Inc.  All rights reserved.            **
7// **                                                                       **
8// ** Xilinx, Inc.                                                          **
9// ** XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS"         **
10// ** AS A COURTESY TO YOU, SOLELY FOR USE IN DEVELOPING PROGRAMS AND       **
11// ** SOLUTIONS FOR XILINX DEVICES.  BY PROVIDING THIS DESIGN, CODE,        **
12// ** OR INFORMATION AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE,        **
13// ** APPLICATION OR STANDARD, XILINX IS MAKING NO REPRESENTATION           **
14// ** THAT THIS IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT,     **
15// ** AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE      **
16// ** FOR YOUR IMPLEMENTATION.  XILINX EXPRESSLY DISCLAIMS ANY              **
17// ** WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE               **
18// ** IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR        **
19// ** REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF       **
20// ** INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS       **
21// ** FOR A PARTICULAR PURPOSE.                                             **
22// **                                                                       **
23// ***************************************************************************
24//
25//----------------------------------------------------------------------------
26// Filename:          user_logic.v
27// Version:           1.00.a
28// Description:       User logic module.
29// Date:              Fri Jul 28 13:08:06 2006 (by Create and Import Peripheral Wizard)
30// Verilog Standard:  Verilog-2001
31//----------------------------------------------------------------------------
32// Naming Conventions:
33//   active low signals:                    "*_n"
34//   clock signals:                         "clk", "clk_div#", "clk_#x"
35//   reset signals:                         "rst", "rst_n"
36//   generics:                              "C_*"
37//   user defined types:                    "*_TYPE"
38//   state machine next state:              "*_ns"
39//   state machine current state:           "*_cs"
40//   combinatorial signals:                 "*_com"
41//   pipelined or register delay signals:   "*_d#"
42//   counter signals:                       "*cnt*"
43//   clock enable signals:                  "*_ce"
44//   internal version of output port:       "*_i"
45//   device pins:                           "*_pin"
46//   ports:                                 "- Names begin with Uppercase"
47//   processes:                             "*_PROCESS"
48//   component instantiations:              "<ENTITY_>I_<#|FUNC>"
49//----------------------------------------------------------------------------
50
51module user_logic
52(
53  // -- ADD USER PORTS BELOW THIS LINE ---------------
54  DQ0_T,                             // inout 1-Wire communication line ports
55  DQ0_O,
56  DQ0_I,
57 
58  DQ1_T,                             
59  DQ1_O,
60  DQ1_I,
61 
62  DQ2_T,                             
63  DQ2_O,
64  DQ2_I,
65 
66  DQ3_T,                             
67  DQ3_O,
68  DQ3_I,
69 
70  DQ4_T,                             
71  DQ4_O,
72  DQ4_I,
73 
74  DQ5_T,                             
75  DQ5_O,
76  DQ5_I,
77 
78  DQ6_T,                             
79  DQ6_O,
80  DQ6_I,
81 
82  DQ7_T,                             
83  DQ7_O,
84  DQ7_I,
85  // -- ADD USER PORTS ABOVE THIS LINE ---------------
86
87  // -- DO NOT EDIT BELOW THIS LINE ------------------
88  // -- Bus protocol ports, do not add to or delete
89  Bus2IP_Clk,                     // Bus to IP clock
90  Bus2IP_Reset,                   // Bus to IP reset
91  Bus2IP_Addr,                    // Bus to IP address bus
92  Bus2IP_Data,                    // Bus to IP data bus for user logic
93  Bus2IP_BE,                      // Bus to IP byte enables for user logic
94  Bus2IP_RNW,                     // Bus to IP read/not write
95  Bus2IP_CS,                      // Bus to IP chip select for user logic
96  Bus2IP_RdCE,                    // Bus to IP read chip enable for user logic
97  Bus2IP_WrCE,                    // Bus to IP write chip enable for user logic
98  IP2Bus_Data,                    // IP to Bus data bus for user logic
99  IP2Bus_Ack,                     // IP to Bus acknowledgement
100  IP2Bus_Retry,                   // IP to Bus retry response
101  IP2Bus_Error,                   // IP to Bus error response
102  IP2Bus_ToutSup,                 // IP to Bus timeout suppress
103  IP2Bus_PostedWrInh              // IP to Bus posted write inhibit
104  // -- DO NOT EDIT ABOVE THIS LINE ------------------
105); // user_logic
106
107// -- ADD USER PARAMETERS BELOW THIS LINE ------------
108// --USER parameters added here
109// -- ADD USER PARAMETERS ABOVE THIS LINE ------------
110
111// -- DO NOT EDIT BELOW THIS LINE --------------------
112// -- Bus protocol parameters, do not add to or delete
113parameter C_AWIDTH                       = 32;
114parameter C_DWIDTH                       = 32;
115parameter C_NUM_CS                       = 1;
116parameter C_NUM_CE                       = 1;
117// -- DO NOT EDIT ABOVE THIS LINE --------------------
118
119// -- ADD USER PORTS BELOW THIS LINE -----------------
120output                             DQ0_T;
121output                             DQ1_T;
122output                             DQ2_T;
123output                             DQ3_T;
124output                             DQ4_T;
125output                             DQ5_T;
126output                             DQ6_T;
127output                             DQ7_T;
128
129output                             DQ0_O;
130output                             DQ1_O;
131output                             DQ2_O;
132output                             DQ3_O;
133output                             DQ4_O;
134output                             DQ5_O;
135output                             DQ6_O;
136output                             DQ7_O;
137
138input                              DQ0_I;
139input                              DQ1_I;
140input                              DQ2_I;
141input                              DQ3_I;
142input                              DQ4_I;
143input                              DQ5_I;
144input                              DQ6_I;
145input                              DQ7_I;
146// -- ADD USER PORTS ABOVE THIS LINE -----------------
147
148// -- DO NOT EDIT BELOW THIS LINE --------------------
149// -- Bus protocol ports, do not add to or delete
150input                                     Bus2IP_Clk;
151input                                     Bus2IP_Reset;
152input      [0 : C_AWIDTH-1]               Bus2IP_Addr;
153input      [0 : C_DWIDTH-1]               Bus2IP_Data;
154input      [0 : C_DWIDTH/8-1]             Bus2IP_BE;
155input                                     Bus2IP_RNW;
156input      [0 : C_NUM_CS-1]               Bus2IP_CS;
157input      [0 : C_NUM_CE-1]               Bus2IP_RdCE;
158input      [0 : C_NUM_CE-1]               Bus2IP_WrCE;
159output     [0 : C_DWIDTH-1]               IP2Bus_Data;
160output                                    IP2Bus_Ack;
161output                                    IP2Bus_Retry;
162output                                    IP2Bus_Error;
163output                                    IP2Bus_ToutSup;
164output                                    IP2Bus_PostedWrInh;
165// -- DO NOT EDIT ABOVE THIS LINE --------------------
166
167//----------------------------------------------------------------------------
168// Implementation
169//----------------------------------------------------------------------------
170
171  // --USER nets declarations added here, as needed for user logic
172
173  // --USER logic implementation added here
174
175 // --USER logic implementation added here
176  wire [ 7:0] OWM_rd_data;
177  wire [31:0] OWM_wt_data;
178  wire [31:0] OWM_addr;
179 
180     assign OWM_wt_data = Bus2IP_Data;
181     assign OWM_addr    = Bus2IP_Addr;
182 
183  reg  [ 2:0] OWM_rdwt_cycle;
184  reg         OWM_wt_n;
185  reg         OWM_rd_n;
186  reg         OWM_rdwt_ack;
187  reg         OWM_toutsup;
188 
189     always @ (posedge Bus2IP_Clk or posedge Bus2IP_Reset)
190     begin
191 
192        if (Bus2IP_Reset)
193        begin
194 
195           OWM_rdwt_cycle <= 3'b000;
196           OWM_wt_n       <= 1'b1;
197           OWM_rd_n       <= 1'b1;
198           OWM_rdwt_ack   <= 1'b0;
199           OWM_toutsup    <= 1'b0;
200 
201        end
202 
203        else
204        begin
205 
206           if      (              ~Bus2IP_CS) OWM_rdwt_cycle <= 3'b000;
207           else if (OWM_rdwt_cycle == 3'b111) OWM_rdwt_cycle <= 3'b111;
208           else                               OWM_rdwt_cycle <= OWM_rdwt_cycle + 1;
209 
210           OWM_wt_n     <= ~(   Bus2IP_CS & ~Bus2IP_RNW & (OWM_rdwt_cycle == 1)
211                              | Bus2IP_CS & ~Bus2IP_RNW & (OWM_rdwt_cycle == 2)
212                            );
213 
214           OWM_rd_n     <= ~(   Bus2IP_CS &  Bus2IP_RNW & (OWM_rdwt_cycle == 1)
215                              | Bus2IP_CS &  Bus2IP_RNW & (OWM_rdwt_cycle == 2)
216                              | Bus2IP_CS &  Bus2IP_RNW & (OWM_rdwt_cycle == 3)
217                              | Bus2IP_CS &  Bus2IP_RNW & (OWM_rdwt_cycle == 4)
218                            );
219 
220           OWM_rdwt_ack <= Bus2IP_CS & (OWM_rdwt_cycle == 4);
221 
222           OWM_toutsup  <= ~OWM_toutsup & Bus2IP_CS & (OWM_rdwt_cycle == 0)
223                         |  OWM_toutsup & Bus2IP_CS & ~OWM_rdwt_ack;
224 
225        end
226 
227     end
228 
229  // ********** Instantiate the OWM core here... *****************************************
230 
231    OWM owm_instance
232     (
233       .ADDRESS(OWM_addr[4:2]),                   
234      .ADS_bar(1'b0),
235      .CLK(Bus2IP_Clk),
236      .EN_bar(1'b0),
237      .MR(Bus2IP_Reset),
238      .RD_bar(OWM_rd_n),
239      .WR_bar(OWM_wt_n),
240      .INTR(IP2Bus_IntrEvent), 
241       .STPZ(),
242      .DATA_IN(OWM_wt_data[7:0]),
243      .DATA_OUT(OWM_rd_data),
244      .DQ0_T(DQ0_T),
245      .DQ0_O(DQ0_O),
246      .DQ0_I(DQ0_I),
247
248      .DQ1_T(DQ1_T),
249      .DQ1_O(DQ1_O),
250      .DQ1_I(DQ1_I),
251
252      .DQ2_T(DQ2_T),
253      .DQ2_O(DQ2_O),
254      .DQ2_I(DQ2_I),
255
256      .DQ3_T(DQ3_T),
257      .DQ3_O(DQ3_O),
258      .DQ3_I(DQ3_I),
259
260      .DQ4_T(DQ4_T),
261      .DQ4_O(DQ4_O),
262      .DQ4_I(DQ4_I),
263
264      .DQ5_T(DQ5_T),
265      .DQ5_O(DQ5_O),
266      .DQ5_I(DQ5_I),
267
268      .DQ6_T(DQ6_T),
269      .DQ6_O(DQ6_O),
270      .DQ6_I(DQ6_I),
271
272      .DQ7_T(DQ7_T),
273      .DQ7_O(DQ7_O),
274      .DQ7_I(DQ7_I)
275     );
276   
277  // Now connect signals to the OWM peripheral using the following mapping
278  // (instantiate the OWM core)...
279  //
280  // INTR     -> IP2Bus_IntrEvent
281  // DATA_IN  -> OWM_wt_data [7:0]
282  // DATA_OUT -> OWM_rd_data [7:0]
283  // A        -> OWM_addr    [2:0]
284  // ADS      -> 1'b0;
285  // RD       -> OWM_rd_n
286  // WR       -> OWM_wt_n
287  // EN       -> 1'b0;
288  // MR       -> Bus2IP_Reset
289  // CLK      -> Bus2IP_Clk
290  //
291  // *************************************************************************************
292 
293  /*
294     reg [31:0] debug;
295 
296     always @ (posedge OWM_wt_n or posedge Bus2IP_Reset)
297    begin
298 
299        if (Bus2IP_Reset)
300        begin
301           debug <= 32'h00000000;
302        end
303 
304        else
305        begin
306           debug <= {Bus2IP_CS,Bus2IP_RNW,OWM_rd_n,13'h0000,OWM_addr [7:0],OWM_wt_data [7:0]}
307        end
308 
309     end
310  */
311 
312 
313     assign IP2Bus_Data    = {32{OWM_rdwt_ack}} & {24'h000000, OWM_rd_data};
314  // assign IP2Bus_Data    = {32{OWM_rdwt_ack}} & {16'hFEDC,IP2Bus_Ack,OWM_rdwt_cycle,Bus2IP_Reset,Bus2IP_CS,OWM_wt_n,OWM_rd_n,OWM_rd_data};
315     assign IP2Bus_Ack     = OWM_rdwt_ack;
316     assign IP2Bus_ToutSup = OWM_toutsup;
317
318  // ------------------------------------------------------------
319  // Example code to drive IP to Bus signals
320  // ------------------------------------------------------------
321
322
323  assign IP2Bus_Error       = 0;
324  assign IP2Bus_Retry       = 0;
325  assign IP2Bus_PostedWrInh = 1;
326
327  //synthesis attribute clock_signal of OWM_wt_n IS no
328  //synthesis attribute buffer_type of OWM_wt_n IS none
329
330
331endmodule
Note: See TracBrowser for help on using the repository browser.