w11 - vhd 0.794
W11 CPU core and support modules
Loading...
Searching...
No Matches
fx2_2fifoctl_ic.vhd
Go to the documentation of this file.
1-- $Id: fx2_2fifoctl_ic.vhd 1181 2019-07-08 17:00:50Z mueller $
2-- SPDX-License-Identifier: GPL-3.0-or-later
3-- Copyright 2012-2017 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
4--
5------------------------------------------------------------------------------
6-- Module Name: fx2_2fifoctl_ic - syn
7-- Description: Cypress EZ-USB FX2 controller (2 fifo; int clk)
8--
9-- Dependencies: vlib/xlib/iob_reg_o
10-- vlib/xlib/iob_reg_i_gen
11-- vlib/xlib/iob_reg_o_gen
12-- vlib/xlib/iob_reg_io_gen
13-- memlib/fifo_2c_dram
14--
15-- Test bench: -
16-- Target Devices: generic
17-- Tool versions: xst 13.3-14.7; ghdl 0.29-0.34
18--
19-- Synthesized (xst):
20-- Date Rev ise Target flop lutl lutm slic t peri
21-- 2017-04-30 888 14.7 131013 xc6slx16-2 145 147 32 75 s 5.5/5.1
22-- 2013-01-04 469 13.3 O76x xc3s1200e-4 112 172 64 169 s 7.4/7.4
23-- 2012-01-14 453 13.3 O76x xc3s1200e-4 101? 173 64 159 s 8.3/7.4
24-- 2012-01-08 451 13.3 O76x xc3s1200e-4 110 166 64 163 s 7.5
25--
26-- Revision History:
27-- Date Rev Version Comment
28-- 2017-04-30 888 1.3 BUGFIX: resolve rx fifo threshold deadlock
29-- add fsm_* monitor lines
30-- 2013-01-04 469 1.2 BUGFIX: redo rx logic, now properly pipelined
31-- 2012-01-15 453 1.1 use aempty/afull logic; collapse tx and pe flows
32-- 2012-01-09 451 1.0 Initial version
33-- 2012-01-01 448 0.5 First draft
34--
35------------------------------------------------------------------------------
36
37library ieee;
38use ieee.std_logic_1164.all;
39use ieee.numeric_std.all;
40
41use work.slvtypes.all;
42use work.xlib.all;
43use work.memlib.all;
44use work.fx2lib.all;
45
46entity fx2_2fifoctl_ic is -- EZ-USB FX2 controller(2 fifo; int clk)
47 generic (
48 RXFAWIDTH : positive := 5; -- receive fifo address width
49 TXFAWIDTH : positive := 5; -- transmit fifo address width
50 PETOWIDTH : positive := 7; -- packet end time-out counter width
51 CCWIDTH : positive := 5; -- chunk counter width
52 RXAEMPTY_THRES : natural := 1; -- threshold for rx aempty flag
53 TXAFULL_THRES : natural := 1); -- threshold for tx afull flag
54 port (
55 CLK : in slbit; -- clock
56 RESET : in slbit := '0'; -- reset
57 RXDATA : out slv8; -- receive data out
58 RXVAL : out slbit; -- receive data valid
59 RXHOLD : in slbit; -- receive data hold
60 RXAEMPTY : out slbit; -- receive almost empty flag
61 TXDATA : in slv8; -- transmit data in
62 TXENA : in slbit; -- transmit data enable
63 TXBUSY : out slbit; -- transmit data busy
64 TXAFULL : out slbit; -- transmit almost full flag
65 MONI : out fx2ctl_moni_type; -- monitor port data
66 I_FX2_IFCLK : in slbit; -- fx2: interface clock
67 O_FX2_FIFO : out slv2; -- fx2: fifo address
68 I_FX2_FLAG : in slv4; -- fx2: fifo flags
69 O_FX2_SLRD_N : out slbit; -- fx2: read enable (act.low)
70 O_FX2_SLWR_N : out slbit; -- fx2: write enable (act.low)
71 O_FX2_SLOE_N : out slbit; -- fx2: output enable (act.low)
72 O_FX2_PKTEND_N : out slbit; -- fx2: packet end (act.low)
73 IO_FX2_DATA : inout slv8 -- fx2: data lines
74 );
76
77
78architecture syn of fx2_2fifoctl_ic is
79
80 constant c_rxfifo : slv2 := c_fifo_ep4;
81 constant c_txfifo : slv2 := c_fifo_ep6;
82
83 constant c_flag_prog : integer := 0;
84 constant c_flag_tx_ff : integer := 1;
85 constant c_flag_rx_ef : integer := 2;
86 constant c_flag_tx2_ff : integer := 3;
87
88 type state_type is (
89 s_idle, -- s_idle: idle state
90 s_rxprep0, -- s_rxprep0: switch to rx-fifo
91 s_rxprep1, -- s_rxprep1: fifo addr setup
92 s_rxprep2, -- s_rxprep2: wait for flags
93 s_rxdisp, -- s_rxdisp: read, dispatch
94 s_rxpipe, -- s_rxpipe: read, pipe wait
95 s_txprep0, -- s_txprep0: switch to tx-fifo
96 s_txprep1, -- s_txprep1: fifo addr setup
97 s_txprep2, -- s_txprep2: wait for flags
98 s_txdisp -- s_txdisp: write, dispatch
99 );
100
101 type regs_type is record
102 state : state_type; -- state
103 petocnt : slv(PETOWIDTH-1 downto 0); -- pktend time out counter
104 pepend : slbit; -- pktend pending
105 rxpipe1 : slbit; -- read pipe 1: iob capture stage
106 rxpipe2 : slbit; -- read pipe 2: fifo write stage
107 ccnt : slv(CCWIDTH-1 downto 0); -- chunk counter
108 moni_ep4_sel : slbit; -- ep4 (rx) select
109 moni_ep6_sel : slbit; -- ep6 (tx) select
110 moni_ep4_pf : slbit; -- ep4 (rx) prog flag
111 moni_ep6_pf : slbit; -- ep6 (tx) prog flag
112 end record regs_type;
113
114 constant petocnt_init : slv(PETOWIDTH-1 downto 0) := (others=>'0');
115 constant ccnt_init : slv(CCWIDTH-1 downto 0) := (others=>'0');
116
117 constant regs_init : regs_type := (
118 s_idle, -- state
119 petocnt_init, -- petocnt
120 '0', -- pepend
121 '0','0', -- rxpipe1, rxpipe2
122 ccnt_init, -- ccnt
123 '0','0', -- moni_ep(4|6)_sel
124 '0','0' -- moni_ep(4|6)_pf
125 );
126
127 constant rxfifo_thres : natural := 3; -- required free space in rx fifo to
128 -- start rx pipeline
129
130 signal R_REGS : regs_type := regs_init; -- state registers
131 signal N_REGS : regs_type := regs_init; -- next value state regs
132
133 signal FX2_FIFO : slv2 := (others=>'0');
134 signal FX2_FIFO_CE : slbit := '0';
135 signal FX2_FLAG_N : slv4 := (others=>'0');
136 signal FX2_SLRD_N : slbit := '1';
137 signal FX2_SLWR_N : slbit := '1';
138 signal FX2_SLOE_N : slbit := '1';
139 signal FX2_PKTEND_N : slbit := '1';
140 signal FX2_DATA_CEI : slbit := '0';
141 signal FX2_DATA_CEO : slbit := '0';
142 signal FX2_DATA_OE : slbit := '0';
143
144 signal RXFIFO_DI : slv8 := (others=>'0');
145 signal RXFIFO_ENA : slbit := '0';
146 signal RXFIFO_BUSY : slbit := '0';
147 signal RXSIZE_FX2 : slv(RXFAWIDTH-1 downto 0) := (others=>'0');
148 signal RXSIZE_USR : slv(RXFAWIDTH-1 downto 0) := (others=>'0');
149 signal TXFIFO_DO : slv8 := (others=>'0');
150 signal TXFIFO_VAL : slbit := '0';
151 signal TXFIFO_HOLD : slbit := '0';
152 signal TXSIZE_FX2 : slv(TXFAWIDTH-1 downto 0) := (others=>'0');
153 signal TXSIZE_USR : slv(TXFAWIDTH-1 downto 0) := (others=>'0');
154
155 signal TXBUSY_L : slbit := '0';
156
157 signal R_MONI_C : fx2ctl_moni_type := fx2ctl_moni_init;
158 signal R_MONI_S : fx2ctl_moni_type := fx2ctl_moni_init;
159
160begin
161
162 assert RXAEMPTY_THRES<=2**RXFAWIDTH-1 and
164 report "assert((RXAEMPTY|TXAFULL)_THRES <= 2**(RX|TX)FAWIDTH)-1"
165 severity failure;
166
167
168 IOB_FX2_FIFO : iob_reg_o_gen
169 generic map (
170 DWIDTH => 2,
171 INIT => '0')
172 port map (
173 CLK => I_FX2_IFCLK,
174 CE => FX2_FIFO_CE,
175 DO => FX2_FIFO,
176 PAD => O_FX2_FIFO
177 );
178
179 IOB_FX2_FLAG : iob_reg_i_gen
180 generic map (
181 DWIDTH => 4,
182 INIT => '0')
183 port map (
184 CLK => I_FX2_IFCLK,
185 CE => '1',
186 DI => FX2_FLAG_N,
187 PAD => I_FX2_FLAG
188 );
189
190 IOB_FX2_SLRD : iob_reg_o
191 generic map (
192 INIT => '1')
193 port map (
194 CLK => I_FX2_IFCLK,
195 CE => '1',
196 DO => FX2_SLRD_N,
198 );
199
200 IOB_FX2_SLWR : iob_reg_o
201 generic map (
202 INIT => '1')
203 port map (
204 CLK => I_FX2_IFCLK,
205 CE => '1',
206 DO => FX2_SLWR_N,
208 );
209
210 IOB_FX2_SLOE : iob_reg_o
211 generic map (
212 INIT => '1')
213 port map (
214 CLK => I_FX2_IFCLK,
215 CE => '1',
216 DO => FX2_SLOE_N,
218 );
219
220 IOB_FX2_PKTEND : iob_reg_o
221 generic map (
222 INIT => '1')
223 port map (
224 CLK => I_FX2_IFCLK,
225 CE => '1',
226 DO => FX2_PKTEND_N,
228 );
229
230 IOB_FX2_DATA : iob_reg_io_gen
231 generic map (
232 DWIDTH => 8,
233 PULL => "KEEP")
234 port map (
235 CLK => I_FX2_IFCLK,
236 CEI => FX2_DATA_CEI,
237 CEO => FX2_DATA_CEO,
238 OE => FX2_DATA_OE,
239 DI => RXFIFO_DI, -- input data (read from pad)
240 DO => TXFIFO_DO, -- output data (write to pad)
242 );
243
244 RXFIFO : fifo_2c_dram -- input fifo, 2 clock, dram based
245 generic map (
246 AWIDTH => RXFAWIDTH,
247 DWIDTH => 8)
248 port map (
249 CLKW => I_FX2_IFCLK,
250 CLKR => CLK,
251 RESETW => '0',
252 RESETR => RESET,
253 DI => RXFIFO_DI,
254 ENA => RXFIFO_ENA,
255 BUSY => RXFIFO_BUSY,
256 DO => RXDATA,
257 VAL => RXVAL,
258 HOLD => RXHOLD,
259 SIZEW => RXSIZE_FX2,
260 SIZER => RXSIZE_USR
261 );
262
263 TXFIFO : fifo_2c_dram -- output fifo, 2 clock, dram based
264 generic map (
265 AWIDTH => TXFAWIDTH,
266 DWIDTH => 8)
267 port map (
268 CLKW => CLK,
269 CLKR => I_FX2_IFCLK,
270 RESETW => RESET,
271 RESETR => '0',
272 DI => TXDATA,
273 ENA => TXENA,
274 BUSY => TXBUSY_L,
275 DO => TXFIFO_DO,
276 VAL => TXFIFO_VAL,
277 HOLD => TXFIFO_HOLD,
278 SIZEW => TXSIZE_USR,
279 SIZER => TXSIZE_FX2
280 );
281
282 proc_regs: process (I_FX2_IFCLK)
283 begin
284
285 if rising_edge(I_FX2_IFCLK) then
286 if RESET = '1' then
287 R_REGS <= regs_init;
288 else
289 R_REGS <= N_REGS;
290 end if;
291 end if;
292
293 end process proc_regs;
294
296
297 variable r : regs_type := regs_init;
298 variable n : regs_type := regs_init;
299
300 variable ififo_ce : slbit := '0';
301 variable ififo : slv2 := "00";
302
303 variable irxfifo_ena : slbit := '0';
304 variable itxfifo_hold : slbit := '0';
305
306 variable islrd : slbit := '0';
307 variable islwr : slbit := '0';
308 variable isloe : slbit := '0';
309 variable ipktend : slbit := '0';
310
311 variable idata_cei : slbit := '0';
312 variable idata_ceo : slbit := '0';
313 variable idata_oe : slbit := '0';
314
315 variable slrxok : slbit := '0';
316 variable sltxok : slbit := '0';
317 variable pipeok : slbit := '0';
318 variable rxfifook : slbit := '0';
319
320 variable cc_clr : slbit := '0';
321 variable cc_cnt : slbit := '0';
322 variable cc_done : slbit := '0';
323
324 begin
325
326 r := R_REGS;
327 n := R_REGS;
328
329 ififo_ce := '0';
330 ififo := "00";
331
332 irxfifo_ena := '0';
333 itxfifo_hold := '1';
334
335 islrd := '0';
336 islwr := '0';
337 isloe := '0';
338 ipktend := '0';
339
340 idata_cei := '0';
341 idata_ceo := '0';
342 idata_oe := '0';
343
344 slrxok := FX2_FLAG_N(c_flag_rx_ef); -- empty flag is act.low!
345 sltxok := FX2_FLAG_N(c_flag_tx_ff); -- full flag is act.low!
346 pipeok := FX2_FLAG_N(c_flag_prog); -- almost flag is act.low!
347
348 rxfifook := '0';
349 if unsigned(RXSIZE_FX2)>rxfifo_thres then -- enough space in rx fifo ?
350 rxfifook := '1';
351 end if;
352
353 cc_clr := '0';
354 cc_cnt := '0';
355 if unsigned(r.ccnt) = 0 then
356 cc_done := '1';
357 else
358 cc_done := '0';
359 end if;
360
361 n.rxpipe1 := '0';
362
363 case r.state is
364 when s_idle => -- s_idle:
365 if slrxok='1' and rxfifook='1' then -- rx data and space in fifo
366 ififo_ce := '1';
367 ififo := c_rxfifo;
368 n.state := s_rxprep1;
369 elsif sltxok='1' and (TXFIFO_VAL='1' or r.pepend='1')then
370 ififo_ce := '1';
371 ififo := c_txfifo;
372 n.state := s_txprep1;
373 end if;
374
375 when s_rxprep0 => -- s_rxprep0: switch to rx-fifo
376 ififo_ce := '1';
377 ififo := c_rxfifo;
378 n.state := s_rxprep1;
379
380 when s_rxprep1 => -- s_rxprep1: fifo addr setup
381 cc_clr := '1';
382 n.state := s_rxprep2;
383
384 when s_rxprep2 => -- s_rxprep2: wait for flags
385 isloe := '1';
386 n.state := s_rxdisp;
387
388 when s_rxdisp => -- s_rxdisp: read, dispatch
389 isloe := '1';
390 -- if chunk done and tx or pe pending and possible
391 if cc_done='1' and sltxok='1' and (TXFIFO_VAL='1' or r.pepend='1') then
392 if r.rxpipe1='1' or r.rxpipe2='1' then -- rx pipe busy ?
393 n.state := s_rxdisp; -- wait
394 else
395 n.state := s_txprep0; -- otherwise switch to tx flow
396 end if;
397 -- if more rx to do and possible
398 elsif slrxok='1' and rxfifook='1' then
399 islrd := '1';
400 cc_cnt := '1';
401 n.rxpipe1 := '1';
402 if pipeok='1' then
403 n.state := s_rxdisp; -- 1 cycle read
404 --n.state := s_rxprep2; -- 2 cycle read
405 else
406 n.state := s_rxpipe;
407 end if;
408 -- otherwise back to idle
409 else
410 if r.rxpipe1='1' or r.rxpipe2='1' then -- rx pipe busy ?
411 n.state := s_rxdisp; -- wait
412 else
413 n.state := s_idle; -- to idle
414 end if;
415 end if;
416
417 when s_rxpipe => -- s_rxpipe: read, pipe wait
418 isloe := '1';
419 n.state := s_rxprep2;
420
421 when s_txprep0 => -- s_txprep0: switch to tx-fifo
422 ififo_ce := '1';
423 ififo := c_txfifo;
424 n.state := s_txprep1;
425
426 when s_txprep1 => -- s_txprep1: fifo addr setup
427 cc_clr := '1';
428 n.state := s_txprep2;
429
430 when s_txprep2 => -- s_txprep2: wait for flags
431 n.state := s_txdisp;
432
433 when s_txdisp => -- s_txdisp: write, dispatch
434 -- if chunk done and rx pending and possible
435 if cc_done='1' and slrxok='1' and rxfifook='1' then
436 n.state := s_rxprep0;
437 -- if pktend to do and possible
438 elsif sltxok = '1' and r.pepend = '1' then
439 ipktend := '1';
440 n.pepend := '0';
441 n.state := s_idle;
442 -- if more tx to do and possible
443 elsif sltxok = '1' and TXFIFO_VAL = '1' then
444 cc_cnt := '1'; -- inc chunk count
445 n.pepend := '0'; -- cancel pe (avoid back-2-back tx+pe)
446 itxfifo_hold := '0';
447 idata_ceo := '1';
448 idata_oe := '1';
449 islwr := '1';
450 if pipeok = '1' then -- if not almost full
451 n.state := s_txdisp; -- stream
452 else
453 n.state := s_txprep1; -- wait for full flag
454 end if;
455 -- otherwise back to idle
456 else
457 n.state := s_idle;
458 end if;
459
460 when others => null;
461 end case;
462
463 -- rx pipe handling
464 idata_cei := r.rxpipe1;
465 n.rxpipe2 := r.rxpipe1;
466 irxfifo_ena := r.rxpipe2;
467
468 -- chunk counter handling
469 if cc_clr = '1' then
470 n.ccnt := (others=>'1');
471 elsif cc_cnt='1' and unsigned(r.ccnt) > 0 then
472 n.ccnt := slv(unsigned(r.ccnt) - 1);
473 end if;
474
475 -- pktend time-out handling:
476 -- if tx fifo is non-empty, set counter to max
477 -- if tx fifo is empty, count down every ifclk cycle
478 -- on 1->0 transition queue pktend request
479 if TXFIFO_VAL = '1' then
480 n.petocnt := (others=>'1');
481 else
482 if unsigned(r.petocnt) /= 0 then
483 n.petocnt := slv(unsigned(r.petocnt) - 1);
484 if unsigned(r.petocnt) = 1 then
485 n.pepend := '1';
486 end if;
487 end if;
488 end if;
489
490 n.moni_ep4_sel := '0';
491 n.moni_ep6_sel := '0';
492 if r.state = s_rxdisp or r.state = s_rxpipe then
493 n.moni_ep4_sel := '1';
494 n.moni_ep4_pf := not FX2_FLAG_N(c_flag_prog);
495 elsif r.state = s_txdisp then
496 n.moni_ep6_sel := '1';
497 n.moni_ep6_pf := not FX2_FLAG_N(c_flag_prog);
498 end if;
499
500 N_REGS <= n;
501
502 FX2_FIFO_CE <= ififo_ce;
503 FX2_FIFO <= ififo;
504
505 FX2_SLRD_N <= not islrd;
506 FX2_SLWR_N <= not islwr;
507 FX2_SLOE_N <= not isloe;
508 FX2_PKTEND_N <= not ipktend;
509
510 FX2_DATA_CEI <= idata_cei;
511 FX2_DATA_CEO <= idata_ceo;
512 FX2_DATA_OE <= idata_oe;
513
514 RXFIFO_ENA <= irxfifo_ena;
515 TXFIFO_HOLD <= itxfifo_hold;
516
517 end process proc_next;
518
519 proc_moni: process (CLK)
520 begin
521
522 if rising_edge(CLK) then
523 if RESET = '1' then
524 R_MONI_C <= fx2ctl_moni_init;
525 R_MONI_S <= fx2ctl_moni_init;
526 else
527 R_MONI_C <= fx2ctl_moni_init;
528 R_MONI_C.fifo_ep4 <= R_REGS.moni_ep4_sel;
529 R_MONI_C.fifo_ep6 <= R_REGS.moni_ep6_sel;
530 R_MONI_C.flag_ep4_empty <= not FX2_FLAG_N(c_flag_rx_ef);
531 R_MONI_C.flag_ep4_almost <= R_REGS.moni_ep4_pf;
532 R_MONI_C.flag_ep6_full <= not FX2_FLAG_N(c_flag_tx_ff);
533 R_MONI_C.flag_ep6_almost <= R_REGS.moni_ep6_pf;
534 R_MONI_C.slrd <= not FX2_SLRD_N;
535 R_MONI_C.slwr <= not FX2_SLWR_N;
536 R_MONI_C.pktend <= not FX2_PKTEND_N;
537 case R_REGS.state is
538 when s_idle => R_MONI_C.fsm_idle <= '1';
539 when s_rxprep0 => R_MONI_C.fsm_prep <= '1'; R_MONI_C.fsm_rx <= '1';
540 when s_rxprep1 => R_MONI_C.fsm_prep <= '1'; R_MONI_C.fsm_rx <= '1';
541 when s_rxprep2 => R_MONI_C.fsm_prep <= '1'; R_MONI_C.fsm_rx <= '1';
542 when s_rxdisp => R_MONI_C.fsm_disp <= '1'; R_MONI_C.fsm_rx <= '1';
543 when s_rxpipe => R_MONI_C.fsm_pipe <= '1'; R_MONI_C.fsm_rx <= '1';
544 when s_txprep0 => R_MONI_C.fsm_prep <= '1'; R_MONI_C.fsm_tx <= '1';
545 when s_txprep1 => R_MONI_C.fsm_prep <= '1'; R_MONI_C.fsm_tx <= '1';
546 when s_txprep2 => R_MONI_C.fsm_prep <= '1'; R_MONI_C.fsm_tx <= '1';
547 when s_txdisp => R_MONI_C.fsm_disp <= '1'; R_MONI_C.fsm_tx <= '1';
548 when others => null;
549 end case;
550
552 end if;
553 end if;
554
555 end process proc_moni;
556
557 proc_almost: process (RXSIZE_USR, TXSIZE_USR)
558 begin
559
560 -- rxsize_usr is the number of bytes to read
561 -- txsize_usr is the number of bytes to write
562
563 if unsigned(RXSIZE_USR) <= RXAEMPTY_THRES then
564 RXAEMPTY <= '1';
565 else
566 RXAEMPTY <= '0';
567 end if;
568
569 if unsigned(TXSIZE_USR) <= TXAFULL_THRES then
570 TXAFULL <= '1';
571 else
572 TXAFULL <= '0';
573 end if;
574
575 end process proc_almost;
576
577 TXBUSY <= TXBUSY_L;
578
579 MONI <= R_MONI_S;
580
581end syn;
slbit := '0' TXFIFO_HOLD
(s_idle,s_rxprep0,s_rxprep1,s_rxprep2,s_rxdisp,s_rxpipe,s_txprep0,s_txprep1,s_txprep2,s_txdisp) state_type
slv2 := c_fifo_ep4 c_rxfifo
slv( RXFAWIDTH- 1 downto 0) :=( others => '0') RXSIZE_USR
slv( TXFAWIDTH- 1 downto 0) :=( others => '0') TXSIZE_FX2
integer := 1 c_flag_tx_ff
slv( CCWIDTH- 1 downto 0) :=( others => '0') ccnt_init
integer := 3 c_flag_tx2_ff
regs_type := regs_init N_REGS
slv8 :=( others => '0') TXFIFO_DO
slbit := '0' FX2_FIFO_CE
regs_type :=( s_idle, petocnt_init, '0', '0', '0', ccnt_init, '0', '0', '0', '0') regs_init
slbit := '1' FX2_PKTEND_N
fx2ctl_moni_type := fx2ctl_moni_init R_MONI_C
integer := 0 c_flag_prog
slv( TXFAWIDTH- 1 downto 0) :=( others => '0') TXSIZE_USR
slbit := '0' FX2_DATA_OE
regs_type := regs_init R_REGS
slbit := '0' RXFIFO_BUSY
fx2ctl_moni_type := fx2ctl_moni_init R_MONI_S
slv2 :=( others => '0') FX2_FIFO
slv2 := c_fifo_ep6 c_txfifo
natural := 3 rxfifo_thres
integer := 2 c_flag_rx_ef
slbit := '0' FX2_DATA_CEO
slv( PETOWIDTH- 1 downto 0) :=( others => '0') petocnt_init
slv8 :=( others => '0') RXFIFO_DI
slv( RXFAWIDTH- 1 downto 0) :=( others => '0') RXSIZE_FX2
slv4 :=( others => '0') FX2_FLAG_N
slbit := '0' FX2_DATA_CEI
inout IO_FX2_DATA slv8
in I_FX2_IFCLK slbit
out O_FX2_PKTEND_N slbit
out TXAFULL slbit
RXAEMPTY_THRES natural := 1
CCWIDTH positive := 5
out O_FX2_SLWR_N slbit
out O_FX2_FIFO slv2
PETOWIDTH positive := 7
TXFAWIDTH positive := 5
RXFAWIDTH positive := 5
out MONI fx2ctl_moni_type
out RXAEMPTY slbit
in RESET slbit := '0'
TXAFULL_THRES natural := 1
out O_FX2_SLRD_N slbit
out O_FX2_SLOE_N slbit
in CE slbit := '1'
in PAD slv( DWIDTH- 1 downto 0)
INIT slbit := '0'
in CLK slbit
out DI slv( DWIDTH- 1 downto 0)
DWIDTH positive := 16
in CEO slbit := '1'
in CEI slbit := '1'
PULL string := "NONE"
inout PAD slv( DWIDTH- 1 downto 0)
in DO slv( DWIDTH- 1 downto 0)
out DI slv( DWIDTH- 1 downto 0)
DWIDTH positive := 16
in CE slbit := '1'
out PAD slv( DWIDTH- 1 downto 0)
INIT slbit := '0'
in CLK slbit
in DO slv( DWIDTH- 1 downto 0)
DWIDTH positive := 16
in CE slbit := '1'
Definition: iob_reg_o.vhd:30
out PAD slbit
Definition: iob_reg_o.vhd:33
INIT slbit := '0'
Definition: iob_reg_o.vhd:27
in CLK slbit
Definition: iob_reg_o.vhd:29
in DO slbit
Definition: iob_reg_o.vhd:31
std_logic_vector( 3 downto 0) slv4
Definition: slvtypes.vhd:36
std_logic slbit
Definition: slvtypes.vhd:30
std_logic_vector( 7 downto 0) slv8
Definition: slvtypes.vhd:40
std_logic_vector( 1 downto 0) slv2
Definition: slvtypes.vhd:34
std_logic_vector slv
Definition: slvtypes.vhd:31
Definition: xlib.vhd:35