w11 - vhd 0.794
W11 CPU core and support modules
Loading...
Searching...
No Matches
ibd_ibmon.vhd
Go to the documentation of this file.
1-- $Id: ibd_ibmon.vhd 1181 2019-07-08 17:00:50Z mueller $
2-- SPDX-License-Identifier: GPL-3.0-or-later
3-- Copyright 2015-2019 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
4--
5------------------------------------------------------------------------------
6-- Module Name: ibd_ibmon - syn
7-- Description: ibus dev: ibus monitor
8--
9-- Dependencies: memlib/ram_1swsr_wfirst_gen
10--
11-- Test bench: -
12--
13-- Target Devices: generic
14-- Tool versions: xst 14.7; viv 2014.4-2018.3; ghdl 0.31-0.35
15--
16-- Synthesized (xst):
17-- Date Rev ise Target flop lutl lutm slic t peri
18-- 2017-04-14 873 14.7 131013 xc6slx16-2 121 205 0 77 s 5.5
19-- 2015-04-24 668 14.7 131013 xc6slx16-2 112 235 0 83 s 5.6
20--
21-- Revision History:
22-- Date Rev Version Comment
23-- 2019-03-01 1116 2.1.1 track ack properly
24-- 2019-02-23 1115 2.1 revised iface, busy 10->8, delay 14->16 bits
25-- 2017-04-16 879 2.0 revised interface, add suspend and repeat collapse
26-- 2017-03-04 858 1.0.2 BUGFIX: wrap set when go=0 due to wena=0
27-- 2015-05-02 672 1.0.1 use natural for AWIDTH to work around a ghdl issue
28-- 2015-04-24 668 1.0 Initial version (derived from rbd_rbmon)
29------------------------------------------------------------------------------
30--
31-- Addr Bits Name r/w/f Function
32-- 000 cntl r/w/f Control register
33-- 08 rcolw r/w/- repeat collapse writes
34-- 07 rcolr r/w/- repeat collapse reads
35-- 06 wstop r/w/- stop on wrap
36-- 05 conena r/w/- con enable
37-- 04 remena r/w/- rem enable
38-- 03 locena r/w/- loc enable
39-- 02:00 func 0/-/f change run status if != noop
40-- 0xx noop
41-- 100 sto stop
42-- 101 sta start and latch all options
43-- 110 sus suspend (noop if not started)
44-- 111 res resume (noop if not started)
45-- 001 stat r/w/- Status register
46-- 15:13 bsize r/-/- buffer size (AWIDTH-9)
47-- 02 wrap r/-/- line address wrapped (cleared on start)
48-- 01 susp r/-/- suspended
49-- 00 run r/-/- running (can be suspended)
50-- 010 12:01 hilim r/w/- upper address limit, inclusive (def: 177776)
51-- 011 12:01 lolim r/w/- lower address limit, inclusive (def: 160000)
52-- 100 addr r/w/- Address register
53-- *:02 laddr r/w/- line address
54-- 01:00 waddr r/w/- word address
55-- 101 data r/w/- Data register
56--
57-- data format:
58-- word 3 15 : burst (2nd re/we in a aval sequence)
59-- 14 : tout (busy in last re-we cycle)
60-- 13 : nak (no ack in last non-busy cycle)
61-- 12 : ack (ack seen)
62-- 11 : busy (busy seen)
63-- 10 : -- (reserved)
64-- 09 : we (write cycle)
65-- 08 : rmw (read-modify-write)
66-- 07:00 : nbusy (number of busy cycles)
67-- word 2 : ndly (delay to previous request)
68-- word 1 : data
69-- word 0 15 : be1 (byte enable low)
70-- 14 : be0 (byte enable high)
71-- 13 : racc (remote access)
72-- 12:01 : addr (word address)
73-- 0 : cacc (console access)
74--
75
76
77library ieee;
78use ieee.std_logic_1164.all;
79use ieee.numeric_std.all;
80
81use work.slvtypes.all;
82use work.memlib.all;
83use work.iblib.all;
84
85-- Note: AWIDTH has type natural to allow AWIDTH=0 can be used in if generates
86-- to control the instantiation. ghdl checks even for not instantiated
87-- entities the validity of generics, that's why natural needed here ....
88
89entity ibd_ibmon is -- ibus dev: ibus monitor
90 generic (
91 IB_ADDR : slv16 := slv(to_unsigned(8#160000#,16)); -- base address
92 AWIDTH : natural := 9); -- buffer size
93 port (
94 CLK : in slbit; -- clock
95 RESET : in slbit; -- reset
96 IB_MREQ : in ib_mreq_type; -- ibus: request
97 IB_SRES : out ib_sres_type; -- ibus: response
98 IB_SRES_SUM : in ib_sres_type -- ibus: response (sum for monitor)
99 );
100end entity ibd_ibmon;
101
102
103architecture syn of ibd_ibmon is
104
105 constant ibaddr_cntl : slv3 := "000"; -- cntl address offset
106 constant ibaddr_stat : slv3 := "001"; -- stat address offset
107 constant ibaddr_hilim : slv3 := "010"; -- hilim address offset
108 constant ibaddr_lolim : slv3 := "011"; -- lolim address offset
109 constant ibaddr_addr : slv3 := "100"; -- addr address offset
110 constant ibaddr_data : slv3 := "101"; -- data address offset
111
112 constant cntl_ibf_rcolw : integer := 8;
113 constant cntl_ibf_rcolr : integer := 7;
114 constant cntl_ibf_wstop : integer := 6;
115 constant cntl_ibf_conena : integer := 5;
116 constant cntl_ibf_remena : integer := 4;
117 constant cntl_ibf_locena : integer := 3;
118 subtype cntl_ibf_func is integer range 2 downto 0;
119
120 subtype stat_ibf_bsize is integer range 15 downto 13;
121 constant stat_ibf_wrap : integer := 2;
122 constant stat_ibf_susp : integer := 1;
123 constant stat_ibf_run : integer := 0;
124
125 subtype addr_ibf_laddr is integer range 2+AWIDTH-1 downto 2;
126 subtype addr_ibf_waddr is integer range 1 downto 0;
127
128 subtype iba_ibf_pref is integer range 15 downto 13;
129 subtype iba_ibf_addr is integer range 12 downto 1;
130
131 constant dat3_ibf_burst : integer := 15;
132 constant dat3_ibf_tout : integer := 14;
133 constant dat3_ibf_nak : integer := 13;
134 constant dat3_ibf_ack : integer := 12;
135 constant dat3_ibf_busy : integer := 11;
136 constant dat3_ibf_we : integer := 9;
137 constant dat3_ibf_rmw : integer := 8;
138 subtype dat3_ibf_nbusy is integer range 7 downto 0;
139 constant dat0_ibf_be1 : integer := 15;
140 constant dat0_ibf_be0 : integer := 14;
141 constant dat0_ibf_racc : integer := 13;
142 subtype dat0_ibf_addr is integer range 12 downto 1;
143 constant dat0_ibf_cacc : integer := 0;
144
145 constant func_sto : slv3 := "100"; -- func: stop
146 constant func_sta : slv3 := "101"; -- func: start
147 constant func_sus : slv3 := "110"; -- func: suspend
148 constant func_res : slv3 := "111"; -- func: resume
149
150 type regs_type is record -- state registers
151 ibsel : slbit; -- ibus select
152 rcolw : slbit; -- rcolw flag (repeat collect writes)
153 rcolr : slbit; -- rcolr flag (repeat collect reads)
154 wstop : slbit; -- wstop flag (stop on wrap)
155 conena : slbit; -- conena flag (record console access)
156 remena : slbit; -- remena flag (record remote access)
157 locena : slbit; -- locena flag (record local access)
158 susp : slbit; -- suspended flag
159 go : slbit; -- go flag (actively running)
160 hilim : slv13_1; -- upper address limit
161 lolim : slv13_1; -- lower address limit
162 wrap : slbit; -- laddr wrap flag
163 laddr : slv(AWIDTH-1 downto 0); -- line address
164 waddr : slv2; -- word address
165 addrsame: slbit; -- curr ib addr equal last ib addr
166 addrwind: slbit; -- curr ib addr in [lolim,hilim] window
167 aval_1 : slbit; -- last cycle aval
168 arm1r : slbit; -- 1st level arm for read
169 arm2r : slbit; -- 2nd level arm for read
170 arm1w : slbit; -- 1st level arm for write
171 arm2w : slbit; -- 2nd level arm for write
172 rcol : slbit; -- repeat collaps
173 ibtake_1: slbit; -- ib capture active in last cycle
174 ibaddr : slv13_1; -- ibus trace: addr
175 ibwe : slbit; -- ibus trace: we
176 ibrmw : slbit; -- ibus trace: rmw
177 ibbe0 : slbit; -- ibus trace: be0
178 ibbe1 : slbit; -- ibus trace: be1
179 ibcacc : slbit; -- ibus trace: cacc
180 ibracc : slbit; -- ibus trace: racc
181 iback : slbit; -- ibus trace: ack seen
182 ibbusy : slbit; -- ibus trace: busy seen
183 ibnak : slbit; -- ibus trace: nak detected
184 ibtout : slbit; -- ibus trace: tout detected
185 ibburst : slbit; -- ibus trace: burst detected
186 ibdata : slv16; -- ibus trace: data
187 ibnbusy : slv8; -- ibus number of busy cycles
188 ibndly : slv16; -- ibus delay to prev. access
189 end record regs_type;
190
191 constant laddrzero : slv(AWIDTH-1 downto 0) := (others=>'0');
192 constant laddrlast : slv(AWIDTH-1 downto 0) := (others=>'1');
193
194 constant regs_init : regs_type := (
195 '0', -- ibsel
196 '0','0','0', -- rcolw,rcolr,wstop
197 '1','1','1', -- conena,remena,locena
198 '0','1', -- susp,go
199 (others=>'1'), -- hilim (def: 177776)
200 (others=>'0'), -- lolim (def: 160000)
201 '0', -- wrap
202 laddrzero, -- laddr
203 "00", -- waddr
204 '0','0','0', -- addrsame,addrwind,aval_1
205 '0','0','0','0','0', -- arm1r,arm2r,arm1w,arm2w,rcol
206 '0', -- ibtake_1
207 (others=>'0'), -- ibaddr (startup: 160000)
208 '0','0','0','0','0','0', -- ibwe,ibrmw,ibbe0,ibbe1,ibcacc,ibracc
209 '0','0', -- iback,ibbusy
210 '0','0','0', -- ibnak,ibtout,ibburst
211 (others=>'0'), -- ibdata
212 (others=>'0'), -- ibnbusy
213 (others=>'0') -- ibndly
214 );
215
216 constant ibnbusylast : slv8 := (others=>'1');
217 constant ibndlylast : slv16 := (others=>'1');
218
221
222 signal BRAM_EN : slbit := '0';
223 signal BRAM_WE : slbit := '0';
224 signal BRAM0_DI : slv32 := (others=>'0');
225 signal BRAM1_DI : slv32 := (others=>'0');
226 signal BRAM0_DO : slv32 := (others=>'0');
227 signal BRAM1_DO : slv32 := (others=>'0');
228 signal BRAM_ADDR : slv(AWIDTH-1 downto 0) := (others=>'0');
229
230begin
231
232 assert AWIDTH>=9 and AWIDTH<=14
233 report "assert(AWIDTH>=9 and AWIDTH<=14): unsupported AWIDTH"
234 severity failure;
235
237 generic map (
238 AWIDTH => AWIDTH,
239 DWIDTH => 32)
240 port map (
241 CLK => CLK,
242 EN => BRAM_EN,
243 WE => BRAM_WE,
244 ADDR => BRAM_ADDR,
245 DI => BRAM1_DI,
246 DO => BRAM1_DO
247 );
248
250 generic map (
251 AWIDTH => AWIDTH,
252 DWIDTH => 32)
253 port map (
254 CLK => CLK,
255 EN => BRAM_EN,
256 WE => BRAM_WE,
257 ADDR => BRAM_ADDR,
258 DI => BRAM0_DI,
259 DO => BRAM0_DO
260 );
261
262 proc_regs: process (CLK)
263 begin
264 if rising_edge(CLK) then
265 if RESET = '1' then
266 R_REGS <= regs_init;
267 else
268 R_REGS <= N_REGS;
269 end if;
270 end if;
271 end process proc_regs;
272
273 proc_next : process (R_REGS, IB_MREQ, IB_SRES_SUM, BRAM0_DO, BRAM1_DO)
274 variable r : regs_type := regs_init;
275 variable n : regs_type := regs_init;
276 variable iib_ack : slbit := '0';
277 variable iib_busy : slbit := '0';
278 variable iib_dout : slv16 := (others=>'0');
279 variable iibena : slbit := '0';
280 variable ibramen : slbit := '0'; -- BRAM enable
281 variable ibramwe : slbit := '0'; -- BRAN we
282 variable ibtake : slbit := '0';
283 variable laddr_inc : slbit := '0';
284 variable idat0 : slv16 := (others=>'0');
285 variable idat1 : slv16 := (others=>'0');
286 variable idat2 : slv16 := (others=>'0');
287 variable idat3 : slv16 := (others=>'0');
288 variable iaddrinc : slv(AWIDTH-1 downto 0) := (others=>'0');
289 variable iaddroff : slv(AWIDTH-1 downto 0) := (others=>'0');
290 begin
291
292 r := R_REGS;
293 n := R_REGS;
294
295 iib_ack := '0';
296 iib_busy := '0';
297 iib_dout := (others=>'0');
298
299 iibena := IB_MREQ.re or IB_MREQ.we;
300
301 ibramen := '0';
302 ibramwe := '0';
303
304 laddr_inc := '0';
305
306 -- ibus address decoder
307 n.ibsel := '0';
308 if IB_MREQ.aval='1' and IB_MREQ.addr(12 downto 4)=IB_ADDR(12 downto 4) then
309 n.ibsel := '1';
310 ibramen := '1'; -- ensures bram read before ibus read
311 end if;
312
313 -- ibus transactions (react only on rem access; invisible on loc side)
314 if r.ibsel = '1' and IB_MREQ.racc='1' then
315
316 iib_ack := iibena; -- ack all accesses
317
318 case IB_MREQ.addr(3 downto 1) is
319
320 when ibaddr_cntl => -- cntl ------------------
321 if IB_MREQ.we = '1' then
322 case IB_MREQ.din(cntl_ibf_func) is
323 when func_sto => -- func: stop ------------
324 n.go := '0';
325 n.susp := '0';
326 when func_sta => -- func: start -----------
327 n.rcolw := IB_MREQ.din(cntl_ibf_rcolw);
328 n.rcolr := IB_MREQ.din(cntl_ibf_rcolr);
329 n.wstop := IB_MREQ.din(cntl_ibf_wstop);
330 n.conena := IB_MREQ.din(cntl_ibf_conena);
331 n.remena := IB_MREQ.din(cntl_ibf_remena);
332 n.locena := IB_MREQ.din(cntl_ibf_locena);
333 n.go := '1';
334 n.susp := '0';
335 n.wrap := '0';
336 n.laddr := laddrzero;
337 n.waddr := "00";
338 when func_sus => -- func: susp ------------
339 if r.go = '1' then -- noop unless running
340 n.go := '0';
341 n.susp := r.go;
342 end if;
343 when func_res => -- func: resu ------------
344 n.go := r.susp;
345 n.susp := '0';
346 when others => null; -- <> --------------------
347 end case;
348 end if;
349
350 when ibaddr_stat => null; -- stat ------------------
351
352 when ibaddr_hilim => -- hilim -----------------
353 if IB_MREQ.we = '1' then
354 n.hilim := IB_MREQ.din(iba_ibf_addr);
355 end if;
356
357 when ibaddr_lolim => -- lolim -----------------
358 if IB_MREQ.we = '1' then
359 n.lolim := IB_MREQ.din(iba_ibf_addr);
360 end if;
361
362 when ibaddr_addr => -- addr ------------------
363 if IB_MREQ.we = '1' then
364 if r.go = '0' then -- if not active OK
365 n.laddr := IB_MREQ.din(addr_ibf_laddr);
366 n.waddr := IB_MREQ.din(addr_ibf_waddr);
367 else
368 iib_ack := '0'; -- otherwise error, do nak
369 end if;
370 end if;
371
372 when ibaddr_data => -- data ------------------
373 -- write to data is an error, do nak
374 if IB_MREQ.we='1' then
375 iib_ack := '0';
376 end if;
377 -- read to data always allowed, addr only incremented when not active
378 if IB_MREQ.re = '1' and r.go = '0' then
379 n.waddr := slv(unsigned(r.waddr) + 1);
380 if r.waddr = "11" then
381 laddr_inc := '1';
382 end if;
383 end if;
384
385 when others => -- <> --------------------
386 iib_ack := '0'; -- error, do nak
387
388 end case;
389 end if;
390
391 -- ibus output driver
392 if r.ibsel = '1' then
393 case IB_MREQ.addr(3 downto 1) is
394 when ibaddr_cntl => -- cntl ------------------
395 iib_dout(cntl_ibf_rcolw) := r.rcolw;
396 iib_dout(cntl_ibf_rcolr) := r.rcolr;
397 iib_dout(cntl_ibf_wstop) := r.wstop;
398 iib_dout(cntl_ibf_conena) := r.conena;
399 iib_dout(cntl_ibf_remena) := r.remena;
400 iib_dout(cntl_ibf_locena) := r.locena;
401 when ibaddr_stat => -- stat ------------------
402 iib_dout(stat_ibf_bsize) := slv(to_unsigned(AWIDTH-9,3));
403 iib_dout(stat_ibf_wrap) := r.wrap;
404 iib_dout(stat_ibf_susp) := r.susp; -- started and suspended
405 iib_dout(stat_ibf_run) := r.go or r.susp; -- started
406 when ibaddr_hilim => -- hilim -----------------
407 iib_dout(iba_ibf_pref) := (others=>'1');
408 iib_dout(iba_ibf_addr) := r.hilim;
409 when ibaddr_lolim => -- lolim -----------------
410 iib_dout(iba_ibf_pref) := (others=>'1');
411 iib_dout(iba_ibf_addr) := r.lolim;
412 when ibaddr_addr => -- addr ------------------
413 iib_dout(addr_ibf_laddr) := r.laddr;
414 iib_dout(addr_ibf_waddr) := r.waddr;
415 when ibaddr_data => -- data ------------------
416 case r.waddr is
417 when "11" => iib_dout := BRAM1_DO(31 downto 16);
418 when "10" => iib_dout := BRAM1_DO(15 downto 0);
419 when "01" => iib_dout := BRAM0_DO(31 downto 16);
420 when "00" => iib_dout := BRAM0_DO(15 downto 0);
421 when others => null;
422 end case;
423 when others => null;
424 end case;
425 end if;
426
427 -- ibus monitor
428 -- a ibus transaction are captured if the address is in alim window
429 -- and the access is not refering to ibd_ibmon itself
430
431 -- ibus address monitor
432 if IB_MREQ.aval='1' and r.aval_1='0' then
433 n.ibaddr := IB_MREQ.addr;
434 n.addrsame := '0';
435 if IB_MREQ.addr = r.ibaddr then
436 n.addrsame := '1';
437 end if;
438 n.addrwind := '0';
439 if unsigned(IB_MREQ.addr)>=unsigned(r.lolim) and -- and in addr window
440 unsigned(IB_MREQ.addr)<=unsigned(r.hilim) then
441 n.addrwind := '1';
442 end if;
443 end if;
444 n.aval_1 := IB_MREQ.aval;
445
446 -- ibus data monitor
447 if IB_MREQ.aval='1' and iibena='1' then -- aval and (re or we)
448 if IB_MREQ.we='1' then -- for write of din
449 n.ibdata := IB_MREQ.din;
450 else -- for read of dout
451 n.ibdata := IB_SRES_SUM.dout;
452 end if;
453 end if;
454
455 -- track state and decide on storage
456 ibtake := '0';
457 if IB_MREQ.aval='1' and iibena='1' then -- aval and (re or we)
458 if r.addrwind='1' and r.ibsel='0' then -- and in window and not self
459 if (r.locena='1' and IB_MREQ.cacc='0' and IB_MREQ.racc='0') or
460 (r.remena='1' and IB_MREQ.racc='1') or
461 (r.conena='1' and IB_MREQ.cacc='1') then
462 ibtake := '1';
463 end if;
464 end if;
465 end if;
466
467 if ibtake = '1' then -- if capture active
468 n.ibwe := IB_MREQ.we; -- keep track of some state
469 n.ibrmw := IB_MREQ.rmw;
470 n.ibbe0 := IB_MREQ.be0;
471 n.ibbe1 := IB_MREQ.be1;
472 n.ibcacc := IB_MREQ.cacc;
473 n.ibracc := IB_MREQ.racc;
474
475 if r.ibtake_1 = '0' then -- if initial cycle of a transaction
476 n.iback := IB_SRES_SUM.ack;
477 n.ibbusy := IB_SRES_SUM.busy;
478 n.ibnbusy := (others=>'0');
479 else -- if non-initial cycles
480 n.iback := r.iback or IB_SRES_SUM.ack;
481 if r.ibnbusy /= ibnbusylast then -- and count
482 n.ibnbusy := slv(unsigned(r.ibnbusy) + 1);
483 end if;
484 end if;
485 n.ibnak := not IB_SRES_SUM.ack;
486 n.ibtout := IB_SRES_SUM.busy;
487
488 if IB_SRES_SUM.busy = '0' then -- if last cycle of a transaction
489 n.arm1r := r.rcolr and IB_MREQ.re;
490 n.arm1w := r.rcolw and IB_MREQ.we;
491 n.arm2r := r.arm1r and r.addrsame and IB_MREQ.re;
492 n.arm2w := r.arm1w and r.addrsame and IB_MREQ.we;
493 n.rcol := ((r.arm2r and IB_MREQ.re) or
494 (r.arm2w and IB_MREQ.we)) and r.addrsame;
495 end if;
496
497 else -- if capture not active
498 if r.go='1' and r.ibtake_1='1' then -- active and transaction just ended
499 ibramen := '1';
500 ibramwe := '1';
501 laddr_inc := '1';
502 n.ibburst := '1'; -- assume burst
503 end if;
504 if r.ibtake_1 = '1' then -- ibus transaction just ended
505 n.ibndly := (others=>'0'); -- clear delay counter
506 else -- just idle
507 if r.ibndly /= ibndlylast then -- count cycles
508 n.ibndly := slv(unsigned(r.ibndly) + 1);
509 end if;
510 end if;
511 end if;
512
513 if IB_MREQ.aval = '0' then -- if aval gone
514 n.ibburst := '0'; -- clear burst flag
515 end if;
516
517 iaddrinc := (others=>'0');
518 iaddroff := (others=>'0');
519 iaddrinc(0) := not (r.rcol and r.go);
520 iaddroff(0) := (r.rcol and r.go);
521
522 if laddr_inc = '1' then
523 n.laddr := slv(unsigned(r.laddr) + unsigned(iaddrinc));
524 if r.go='1' and r.laddr=laddrlast then
525 n.wrap := '1';
526 if r.wstop = '1' then
527 n.go := '0';
528 end if;
529 end if;
530 end if;
531
532 idat3 := (others=>'0');
533 idat3(dat3_ibf_burst) := r.ibburst;
534 idat3(dat3_ibf_tout) := r.ibtout;
535 idat3(dat3_ibf_nak) := r.ibnak;
536 idat3(dat3_ibf_ack) := r.iback;
537 idat3(dat3_ibf_busy) := r.ibbusy;
538 idat3(dat3_ibf_we) := r.ibwe;
539 idat3(dat3_ibf_rmw) := r.ibrmw;
540 idat3(dat3_ibf_nbusy) := r.ibnbusy;
541 idat2 := r.ibndly;
542 idat1 := r.ibdata;
543 idat0(dat0_ibf_be1) := r.ibbe1;
544 idat0(dat0_ibf_be0) := r.ibbe0;
545 idat0(dat0_ibf_racc) := r.ibracc;
546 idat0(dat0_ibf_addr) := r.ibaddr;
547 idat0(dat0_ibf_cacc) := r.ibcacc;
548
549 n.ibtake_1 := ibtake;
550
551 N_REGS <= n;
552
553 BRAM_EN <= ibramen;
554 BRAM_WE <= ibramwe;
555 BRAM_ADDR <= slv(unsigned(R_REGS.laddr) - unsigned(iaddroff));
556
557 BRAM1_DI <= idat3 & idat2;
558 BRAM0_DI <= idat1 & idat0;
559
560 IB_SRES.dout <= iib_dout;
561 IB_SRES.ack <= iib_ack;
562 IB_SRES.busy <= iib_busy;
563
564 end process proc_next;
565
566end syn;
slv3 := "100" func_sto
Definition: ibd_ibmon.vhd:145
integer := 3 cntl_ibf_locena
Definition: ibd_ibmon.vhd:117
integer := 13 dat0_ibf_racc
Definition: ibd_ibmon.vhd:141
integer := 4 cntl_ibf_remena
Definition: ibd_ibmon.vhd:116
integer := 15 dat3_ibf_burst
Definition: ibd_ibmon.vhd:131
integer := 13 dat3_ibf_nak
Definition: ibd_ibmon.vhd:133
slbit := '0' BRAM_EN
Definition: ibd_ibmon.vhd:222
integer := 11 dat3_ibf_busy
Definition: ibd_ibmon.vhd:135
slv3 := "011" ibaddr_lolim
Definition: ibd_ibmon.vhd:108
slv3 := "101" ibaddr_data
Definition: ibd_ibmon.vhd:110
integer range 15 downto 13 stat_ibf_bsize
Definition: ibd_ibmon.vhd:120
integer := 0 dat0_ibf_cacc
Definition: ibd_ibmon.vhd:143
slv3 := "010" ibaddr_hilim
Definition: ibd_ibmon.vhd:107
integer := 14 dat3_ibf_tout
Definition: ibd_ibmon.vhd:132
regs_type := regs_init N_REGS
Definition: ibd_ibmon.vhd:220
slv3 := "101" func_sta
Definition: ibd_ibmon.vhd:146
integer range 15 downto 13 iba_ibf_pref
Definition: ibd_ibmon.vhd:128
integer := 6 cntl_ibf_wstop
Definition: ibd_ibmon.vhd:114
slv3 := "001" ibaddr_stat
Definition: ibd_ibmon.vhd:106
slv8 :=( others => '1') ibnbusylast
Definition: ibd_ibmon.vhd:216
slv3 := "100" ibaddr_addr
Definition: ibd_ibmon.vhd:109
slbit := '0' BRAM_WE
Definition: ibd_ibmon.vhd:223
integer := 15 dat0_ibf_be1
Definition: ibd_ibmon.vhd:139
slv32 :=( others => '0') BRAM0_DI
Definition: ibd_ibmon.vhd:224
integer := 5 cntl_ibf_conena
Definition: ibd_ibmon.vhd:115
slv32 :=( others => '0') BRAM1_DI
Definition: ibd_ibmon.vhd:225
slv( AWIDTH- 1 downto 0) :=( others => '1') laddrlast
Definition: ibd_ibmon.vhd:192
slv3 := "000" ibaddr_cntl
Definition: ibd_ibmon.vhd:105
integer range 2+ AWIDTH- 1 downto 2 addr_ibf_laddr
Definition: ibd_ibmon.vhd:125
integer := 9 dat3_ibf_we
Definition: ibd_ibmon.vhd:136
regs_type := regs_init R_REGS
Definition: ibd_ibmon.vhd:219
integer := 1 stat_ibf_susp
Definition: ibd_ibmon.vhd:122
integer range 12 downto 1 dat0_ibf_addr
Definition: ibd_ibmon.vhd:142
slv( AWIDTH- 1 downto 0) :=( others => '0') BRAM_ADDR
Definition: ibd_ibmon.vhd:228
slv16 :=( others => '1') ibndlylast
Definition: ibd_ibmon.vhd:217
integer range 2 downto 0 cntl_ibf_func
Definition: ibd_ibmon.vhd:118
integer := 0 stat_ibf_run
Definition: ibd_ibmon.vhd:123
integer range 7 downto 0 dat3_ibf_nbusy
Definition: ibd_ibmon.vhd:138
slv32 :=( others => '0') BRAM1_DO
Definition: ibd_ibmon.vhd:227
integer := 12 dat3_ibf_ack
Definition: ibd_ibmon.vhd:134
integer := 14 dat0_ibf_be0
Definition: ibd_ibmon.vhd:140
integer range 1 downto 0 addr_ibf_waddr
Definition: ibd_ibmon.vhd:126
slv3 := "111" func_res
Definition: ibd_ibmon.vhd:148
integer := 7 cntl_ibf_rcolr
Definition: ibd_ibmon.vhd:113
slv3 := "110" func_sus
Definition: ibd_ibmon.vhd:147
integer := 2 stat_ibf_wrap
Definition: ibd_ibmon.vhd:121
regs_type :=( '0', '0', '0', '0', '1', '1', '1', '0', '1',( others => '1'),( others => '0'), '0', laddrzero, "00", '0', '0', '0', '0', '0', '0', '0', '0', '0',( others => '0'), '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0',( others => '0'),( others => '0'),( others => '0')) regs_init
Definition: ibd_ibmon.vhd:194
slv32 :=( others => '0') BRAM0_DO
Definition: ibd_ibmon.vhd:226
slv( AWIDTH- 1 downto 0) :=( others => '0') laddrzero
Definition: ibd_ibmon.vhd:191
integer := 8 cntl_ibf_rcolw
Definition: ibd_ibmon.vhd:112
integer range 12 downto 1 iba_ibf_addr
Definition: ibd_ibmon.vhd:129
integer := 8 dat3_ibf_rmw
Definition: ibd_ibmon.vhd:137
in RESET slbit
Definition: ibd_ibmon.vhd:95
in IB_SRES_SUM ib_sres_type
Definition: ibd_ibmon.vhd:99
AWIDTH natural := 9
Definition: ibd_ibmon.vhd:92
in CLK slbit
Definition: ibd_ibmon.vhd:94
in IB_MREQ ib_mreq_type
Definition: ibd_ibmon.vhd:96
out IB_SRES ib_sres_type
Definition: ibd_ibmon.vhd:97
IB_ADDR slv16 := slv( to_unsigned( 8#160000#, 16) )
Definition: ibd_ibmon.vhd:91
Definition: iblib.vhd:33
in ADDR slv( AWIDTH- 1 downto 0)
out DO slv( DWIDTH- 1 downto 0)
in DI slv( DWIDTH- 1 downto 0)
std_logic_vector( 2 downto 0) slv3
Definition: slvtypes.vhd:35
std_logic_vector( 12 downto 1) slv13_1
Definition: slvtypes.vhd:66
std_logic_vector( 31 downto 0) slv32
Definition: slvtypes.vhd:59
std_logic_vector( 15 downto 0) slv16
Definition: slvtypes.vhd:48
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