w11 - vhd 0.794
W11 CPU core and support modules
Loading...
Searching...
No Matches
ibdr_pc11_buf.vhd
Go to the documentation of this file.
1-- $Id: ibdr_pc11_buf.vhd 1181 2019-07-08 17:00:50Z mueller $
2-- SPDX-License-Identifier: GPL-3.0-or-later
3-- Copyright 2019- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
4--
5------------------------------------------------------------------------------
6-- Module Name: ibdr_pc11_buf - syn
7-- Description: ibus dev(rem): PC11
8--
9-- Dependencies: fifo_simple_dram
10-- ib_rlim_slv
11-- Test bench: xxdp: zpcae0
12-- Target Devices: generic
13-- Tool versions: ise 8.2-14.7; 2017.2; ghdl 0.35
14--
15-- Revision History:
16-- Date Rev Version Comment
17-- 2019-05-31 1156 1.0.1 size->fuse rename; re-organize rlim handling
18-- 2019-04-24 1137 1.0 Initial version
19-- 2019-04-07 1129 0.1 First draft (derived from ibdr_pc11)
20------------------------------------------------------------------------------
21
22library ieee;
23use ieee.std_logic_1164.all;
24use ieee.numeric_std.all;
25
26use work.slvtypes.all;
27use work.memlib.all;
28use work.iblib.all;
29
30-- ----------------------------------------------------------------------------
31entity ibdr_pc11_buf is -- ibus dev(rem): PC11
32 -- fixed address: 177550
33 generic (
34 AWIDTH : natural := 5); -- fifo address width
35 port (
36 CLK : in slbit; -- clock
37 RESET : in slbit; -- system reset
38 BRESET : in slbit; -- ibus reset
39 RLIM_CEV : in slv8; -- clock enable vector
40 RB_LAM : out slbit; -- remote attention
41 IB_MREQ : in ib_mreq_type; -- ibus request
42 IB_SRES : out ib_sres_type; -- ibus response
43 EI_REQ_PTR : out slbit; -- interrupt request, reader
44 EI_REQ_PTP : out slbit; -- interrupt request, punch
45 EI_ACK_PTR : in slbit; -- interrupt acknowledge, reader
46 EI_ACK_PTP : in slbit -- interrupt acknowledge, punch
47 );
49
50architecture syn of ibdr_pc11_buf is
51
52 constant ibaddr_pc11 : slv16 := slv(to_unsigned(8#177550#,16));
53
54 constant ibaddr_rcsr : slv2 := "00"; -- rcsr address offset
55 constant ibaddr_rbuf : slv2 := "01"; -- rbuf address offset
56 constant ibaddr_pcsr : slv2 := "10"; -- pcsr address offset
57 constant ibaddr_pbuf : slv2 := "11"; -- pbuf address offset
58
59 constant rcsr_ibf_rerr : integer := 15;
60 subtype rcsr_ibf_rlim is integer range 14 downto 12;
61 constant rcsr_ibf_rbusy : integer := 11;
62 subtype rcsr_ibf_type is integer range 10 downto 8;
63 constant rcsr_ibf_rdone : integer := 7;
64 constant rcsr_ibf_rie : integer := 6;
65 constant rcsr_ibf_rir : integer := 5;
66 constant rcsr_ibf_rlb : integer := 4;
67 constant rcsr_ibf_ique : integer := 3;
68 constant rcsr_ibf_iack : integer := 2;
69 constant rcsr_ibf_fclr : integer := 1;
70 constant rcsr_ibf_renb : integer := 0;
71
72 constant rbuf_ibf_rbusy : integer := 15;
73 subtype rbuf_ibf_rfuse is integer range AWIDTH-1+8 downto 8;
74 subtype rbuf_ibf_pfuse is integer range AWIDTH-1 downto 0;
75 subtype rbuf_ibf_data is integer range 7 downto 0;
76
77 constant pcsr_ibf_perr : integer := 15;
78 subtype pcsr_ibf_rlim is integer range 14 downto 12;
79 constant pcsr_ibf_prdy : integer := 7;
80 constant pcsr_ibf_pie : integer := 6;
81 constant pcsr_ibf_pir : integer := 5;
82 constant pcsr_ibf_rlb : integer := 4;
83
84 constant pbuf_ibf_pval : integer := 15;
85 subtype pbuf_ibf_fuse is integer range AWIDTH-1+8 downto 8;
86 subtype pbuf_ibf_data is integer range 7 downto 0;
87
88 type regs_type is record -- state registers
89 ibsel : slbit; -- ibus select
90 rerr : slbit; -- rcsr: reader error
91 rrlim : slv3; -- rcsr: reader rlim
92 rbusy : slbit; -- rcsr: reader busy
93 rdone : slbit; -- rcsr: reader done
94 rie : slbit; -- rcsr: reader interrupt enable
95 rintreq : slbit; -- ptr interrupt request
96 rique : slbit; -- ptr interrupt queued (req set)
97 riack : slbit; -- ptr interrupt acknowledged
98 perr : slbit; -- pcsr: punch error
99 prlim : slv3; -- pcsr: punch rlim
100 prdy : slbit; -- pcsr: punch ready
101 pie : slbit; -- pcsr: punch interrupt enable
102 pintreq : slbit; -- ptp interrupt request
103 end record regs_type;
104
105 constant regs_init : regs_type := (
106 '0', -- ibsel
107 '1', -- rerr (init=1!)
108 "000", -- rrlim
109 '0','0','0', -- rbusy,rdone,rie
110 '0','0','0', -- rintreq,rique,riack
111 '1', -- perr (init=1!)
112 "000", -- prlim
113 '1', -- prdy (init=1!)
114 '0', -- pie
115 '0' -- pintreq
116 );
117
118 constant c_fuse1 : slv(AWIDTH-1 downto 0) := slv(to_unsigned(1,AWIDTH));
119
122
123 signal RBUF_CE : slbit := '0';
124 signal RBUF_WE : slbit := '0';
125 signal RBUF_DO : slv8 := (others=>'0');
126 signal RBUF_RESET : slbit := '0';
127 signal RBUF_EMPTY : slbit := '0';
128 signal RBUF_FULL : slbit := '0';
129 signal RBUF_FUSE : slv(AWIDTH-1 downto 0) := (others=>'0');
130
131 signal PBUF_CE : slbit := '0';
132 signal PBUF_WE : slbit := '0';
133 signal PBUF_DO : slv8 := (others=>'0');
134 signal PBUF_RESET : slbit := '0';
135 signal PBUF_EMPTY : slbit := '0';
136 signal PBUF_FULL : slbit := '0';
137 signal PBUF_FUSE : slv(AWIDTH-1 downto 0) := (others=>'0');
138
139 signal RRLIM_START : slbit := '0';
140 signal RRLIM_BUSY : slbit := '0';
141 signal PRLIM_START : slbit := '0';
142 signal PRLIM_BUSY : slbit := '0';
143
144begin
145
146 assert AWIDTH>=4 and AWIDTH<=7
147 report "assert(AWIDTH>=4 and AWIDTH<=7): unsupported AWIDTH"
148 severity failure;
149
150 RBUF : fifo_simple_dram
151 generic map (
152 AWIDTH => AWIDTH,
153 DWIDTH => 8)
154 port map (
155 CLK => CLK,
156 RESET => RBUF_RESET,
157 CE => RBUF_CE,
158 WE => RBUF_WE,
159 DI => IB_MREQ.din(rbuf_ibf_data),
160 DO => RBUF_DO,
161 EMPTY => RBUF_EMPTY,
162 FULL => RBUF_FULL,
163 SIZE => RBUF_FUSE
164 );
165
166 PBUF : fifo_simple_dram
167 generic map (
168 AWIDTH => AWIDTH,
169 DWIDTH => 8)
170 port map (
171 CLK => CLK,
172 RESET => PBUF_RESET,
173 CE => PBUF_CE,
174 WE => PBUF_WE,
175 DI => IB_MREQ.din(pbuf_ibf_data),
176 DO => PBUF_DO,
177 EMPTY => PBUF_EMPTY,
178 FULL => PBUF_FULL,
179 SIZE => PBUF_FUSE
180 );
181
182 RRLIM : ib_rlim_slv
183 port map (
184 CLK => CLK,
185 RESET => RESET,
187 SEL => R_REGS.rrlim,
189 STOP => BRESET,
190 DONE => open,
192 );
193
194 PRLIM : ib_rlim_slv
195 port map (
196 CLK => CLK,
197 RESET => RESET,
199 SEL => R_REGS.prlim,
201 STOP => BRESET,
202 DONE => open,
204 );
205
206 proc_regs: process (CLK)
207 begin
208 if rising_edge(CLK) then
209 if BRESET = '1' then -- BRESET is 1 for system and ibus reset
210 R_REGS <= regs_init; --
211 if RESET = '0' then -- if RESET=0 we do just an ibus reset
212 R_REGS.rerr <= N_REGS.rerr; -- keep RERR flag
213 R_REGS.rrlim <= N_REGS.rrlim; -- keep RRLIM field
214 R_REGS.perr <= N_REGS.perr; -- keep PERR flag
215 R_REGS.prlim <= N_REGS.prlim; -- keep PRLIM field
216 end if;
217 else
218 R_REGS <= N_REGS;
219 end if;
220 end if;
221 end process proc_regs;
222
223 proc_next : process (R_REGS, IB_MREQ, EI_ACK_PTR, EI_ACK_PTP, RESET,
226 variable r : regs_type := regs_init;
227 variable n : regs_type := regs_init;
228 variable idout : slv16 := (others=>'0');
229 variable ibreq : slbit := '0';
230 variable iback : slbit := '0';
231 variable ibrd : slbit := '0';
232 variable ibw0 : slbit := '0';
233 variable ibw1 : slbit := '0';
234 variable ilam : slbit := '0';
235 variable irbufce : slbit := '0';
236 variable irbufwe : slbit := '0';
237 variable irbufrst : slbit := '0';
238 variable irrlimsta : slbit := '0';
239 variable ipbufce : slbit := '0';
240 variable ipbufwe : slbit := '0';
241 variable iprlimsta : slbit := '0';
242 begin
243
244 r := R_REGS;
245 n := R_REGS;
246
247 idout := (others=>'0');
248 ibreq := IB_MREQ.re or IB_MREQ.we;
249 iback := r.ibsel and ibreq;
250 ibrd := IB_MREQ.re;
251 ibw0 := IB_MREQ.we and IB_MREQ.be0;
252 ibw1 := IB_MREQ.we and IB_MREQ.be1;
253 ilam := '0';
254 irbufce := '0';
255 irbufwe := '0';
256 irbufrst := RESET or r.rerr;
257 irrlimsta := '0';
258 ipbufce := '0';
259 ipbufwe := '0';
260 iprlimsta := '0';
261
262 -- ibus address decoder
263 n.ibsel := '0';
264 if IB_MREQ.aval='1' and
265 IB_MREQ.addr(12 downto 3)=ibaddr_pc11(12 downto 3) then
266 n.ibsel := '1';
267 end if;
268
269 -- ibus transactions
270 if r.ibsel = '1' then -- ibus selected ---------------------
271 case IB_MREQ.addr(2 downto 1) is
272
273 when ibaddr_rcsr => -- RCSR -- reader control status -----
274
275 idout(rcsr_ibf_rerr) := r.rerr;
276 idout(rcsr_ibf_rbusy) := r.rbusy;
277 idout(rcsr_ibf_rdone) := r.rdone;
278 idout(rcsr_ibf_rie) := r.rie;
279
280 if IB_MREQ.racc = '0' then -- cpu ---------------------
281 if ibw0 = '1' then
282 n.rie := IB_MREQ.din(rcsr_ibf_rie);
283 if IB_MREQ.din(rcsr_ibf_rie) = '1' then-- set IE to 1
284 if r.rie = '0' and -- IE 0->1 transition
285 IB_MREQ.din(rcsr_ibf_renb)='0' and -- when RENB not set
286 (r.rerr='1' or r.rdone='1') then -- but err or done set
287 n.rintreq := '1'; -- request interrupt
288 n.rique := '1'; -- and set que flag
289 end if;
290 else -- set IE to 0
291 n.rintreq := '0'; -- cancel interrupts
292 end if;
293 if IB_MREQ.din(rcsr_ibf_renb) = '1' then -- set RENB
294 if r.rerr = '0' then -- if not in error state
295 n.rbusy := '1'; -- set busy
296 n.rdone := '0'; -- clear done
297 n.rintreq := '0'; -- cancel interrupt
298 n.rique := '0'; -- and que flag
299 n.riack := '0'; -- and ack flag
300 else -- if in error state
301 if r.rie = '1' then -- if interrupts on
302 n.rintreq := '1'; -- request interrupt
303 n.rique := '1'; -- and set que flag
304 end if;
305 end if;
306 end if;
307 end if;
308
309 else -- rri ---------------------
310 idout(rcsr_ibf_rlim) := r.rrlim;
311 idout(rcsr_ibf_type) := slv(to_unsigned(AWIDTH,3));
312 idout(rcsr_ibf_rir) := r.rintreq;
313 idout(rcsr_ibf_rlb) := RRLIM_BUSY;
314 idout(rcsr_ibf_ique) := r.rique;
315 idout(rcsr_ibf_iack) := r.riack;
316
317 if ibw1 = '1' then
318 n.rerr := IB_MREQ.din(rcsr_ibf_rerr); -- set ERR bit
319 n.rrlim := IB_MREQ.din(rcsr_ibf_rlim); -- set RLIM field
320 if IB_MREQ.din(rcsr_ibf_rerr)='1' -- if 0->1 transition
321 and r.rerr='0' and r.rie = '1' then -- and interrupts on
322 n.rintreq := '1'; -- request interrupt
323 n.rique := '1'; -- and set que flag
324 end if;
325 end if;
326 if ibw0 = '1' then
327 if IB_MREQ.din(rcsr_ibf_fclr) = '1' then -- 1 written to FCLR
328 irbufrst := '1'; -- then reset fifo
329 end if;
330 end if;
331 end if;
332
333 when ibaddr_rbuf => -- RBUF -- reader data buffer --------
334
335 if IB_MREQ.racc = '0' then -- cpu ---------------------
336 -- the PC11 clears the reader data buffer when read (unusual!!)
337 -- this is emulated by returning fifo data only when DONE=1
338 if r.rdone = '1' then
339 idout(rbuf_ibf_data) := RBUF_DO;
340 end if;
341 if ibreq = '1' then -- !! PC11 is unusual !!
342 n.rdone := '0'; -- *any* read or write will clear done
343 n.rintreq := '0'; -- also interrupt is canceled
344 if r.rdone = '1' then -- data available
345 irbufce := '1'; -- read next value from fifo
346 irbufwe := '0';
347 if RBUF_FUSE = c_fuse1 then -- last value (fuse=1)
348 ilam := '1'; -- rri lam
349 end if;
350 end if;
351 end if;
352
353 else -- rri ---------------------
354 idout(rbuf_ibf_rbusy) := r.rbusy;
355 idout(rbuf_ibf_rfuse) := RBUF_FUSE;
356 idout(rbuf_ibf_pfuse) := PBUF_FUSE;
357 if ibw0 = '1' then
358 if RBUF_FULL = '0' then -- fifo not full
359 irbufce := '1'; -- write to fifo
360 irbufwe := '1';
361 else -- write to full fifo
362 iback := '0'; -- signal nak
363 end if;
364 end if;
365 end if;
366
367 when ibaddr_pcsr => -- PCSR -- punch control status ------
368
369 idout(pcsr_ibf_perr) := r.perr;
370 idout(pcsr_ibf_prdy) := r.prdy;
371 idout(pcsr_ibf_pie) := r.pie;
372
373 if IB_MREQ.racc = '0' then -- cpu ---------------------
374 if ibw0 = '1' then
375 n.pie := IB_MREQ.din(pcsr_ibf_pie);
376 if IB_MREQ.din(pcsr_ibf_pie) = '1' then-- set IE to 1
377 if r.pie='0' and -- IE 0->1 transition
378 (r.perr='1' or r.prdy='1') then -- but err or done set
379 n.pintreq := '1'; -- request interrupt
380 end if;
381 else -- set IE to 0
382 n.pintreq := '0'; -- cancel interrupts
383 end if;
384 end if;
385
386 else -- rri ---------------------
387 idout(pcsr_ibf_rlim) := r.prlim;
388 idout(pcsr_ibf_pir) := r.pintreq;
389 idout(pcsr_ibf_rlb) := PRLIM_BUSY;
390
391 if ibw1 = '1' then
392 n.perr := IB_MREQ.din(pcsr_ibf_perr); -- set ERR bit
393 n.prlim := IB_MREQ.din(pcsr_ibf_rlim); -- set RLIM field
394 if IB_MREQ.din(pcsr_ibf_perr)='1' -- if 0->1 transition
395 and r.perr='0' then
396 n.prdy := '1'; -- set ready
397 if r.pie = '1' then -- if interrupts on
398 n.pintreq := '1'; -- request interrupt
399 end if;
400 end if;
401 end if;
402 end if;
403
404 when ibaddr_pbuf => -- PBUF -- punch data buffer ---------
405
406 if IB_MREQ.racc = '0' then -- cpu ---------------------
407 if ibw0 = '1' then
408 if r.perr = '0' then -- if not in error state
409 if r.prdy = '1' then -- ignore buf write when rdy=0
410 n.prdy := '0'; -- clear ready
411 n.pintreq := '0'; -- cancel interrupt
412 if PBUF_FULL = '0' then -- fifo not full
413 ipbufce := '1'; -- write to fifo
414 ipbufwe := '1';
415 if PBUF_EMPTY = '1' then -- first write to empty fifo
416 ilam := '1'; -- request attention
417 end if;
418 end if;
419 end if;
420 else -- if in error state
421 if r.pie = '1' then -- if interrupts on
422 n.pintreq := '1'; -- request interrupt
423 end if;
424 end if;
425 end if;
426
427 else -- rri ---------------------
428 idout(pbuf_ibf_pval) := not PBUF_EMPTY;
429 idout(pbuf_ibf_fuse) := PBUF_FUSE;
430 idout(pbuf_ibf_data) := PBUF_DO;
431 if ibrd = '1' then
432 if PBUF_EMPTY = '0' then -- fifo not empty
433 ipbufce := '1'; -- read from fifo
434 ipbufwe := '0';
435 else -- read from empty fifo
436 iback := '0'; -- signal nak
437 end if;
438 end if;
439 end if;
440
441 when others => null;
442 end case;
443
444 else -- ibus not selected -----------------
445 -- handle pr done, timer and interrupt
446 if RBUF_EMPTY='0' and RRLIM_BUSY='0' then -- not empty and not busy ?
447 if r.rbusy = '1' then -- reader enabled ?
448 n.rbusy := '0'; -- clear busy
449 n.rdone := '1'; -- set done
450 irrlimsta := '1'; -- start timer
451 if r.rdone='0' and -- done going 0->1
452 r.rerr='0' and r.rie='1' then -- and err=0 and ie=1
453 n.rintreq := '1'; -- request interrupt
454 n.rique := '1'; -- and set que flag
455 end if;
456 end if;
457 end if;
458
459 -- handle pp ready, timer and interrupt
460 if PBUF_FULL='0' and PRLIM_BUSY='0' then -- not full and not busy ?
461 if r.prdy = '0' then -- ready not set ?
462 n.prdy := '1'; -- set ready
463 iprlimsta := '1'; -- start timer
464 if r.perr='0' and r.pie='1' then -- err=0 and irupt enabled
465 n.pintreq := '1'; -- request interrupt
466 end if;
467 end if;
468 end if;
469 end if; -- else r.ibsel='1'
470
471 -- other state changes
472 if EI_ACK_PTR = '1' then
473 n.rintreq := '0';
474 n.riack := '1';
475 end if;
476 if EI_ACK_PTP = '1' then
477 n.pintreq := '0';
478 end if;
479
480 N_REGS <= n;
481
482 RBUF_RESET <= irbufrst;
483 RBUF_CE <= irbufce;
484 RBUF_WE <= irbufwe;
485 RRLIM_START <= irrlimsta;
486
487 PBUF_RESET <= RESET or r.perr;
488 PBUF_CE <= ipbufce;
489 PBUF_WE <= ipbufwe;
490 PRLIM_START <= iprlimsta;
491
492 IB_SRES.dout <= idout;
493 IB_SRES.ack <= iback;
494 IB_SRES.busy <= '0';
495
496 RB_LAM <= ilam;
497 EI_REQ_PTR <= r.rintreq;
498 EI_REQ_PTP <= r.pintreq;
499
500 end process proc_next;
501
502
503end syn;
out DO slv( DWIDTH- 1 downto 0)
in DI slv( DWIDTH- 1 downto 0)
AWIDTH positive := 6
out SIZE slv( AWIDTH- 1 downto 0)
DWIDTH positive := 16
in STOP slbit
Definition: ib_rlim_slv.vhd:46
in RESET slbit
Definition: ib_rlim_slv.vhd:42
out BUSY slbit
Definition: ib_rlim_slv.vhd:49
out DONE slbit
Definition: ib_rlim_slv.vhd:47
in CLK slbit
Definition: ib_rlim_slv.vhd:41
in SEL slv3
Definition: ib_rlim_slv.vhd:44
in RLIM_CEV slv8
Definition: ib_rlim_slv.vhd:43
in START slbit
Definition: ib_rlim_slv.vhd:45
slv( AWIDTH- 1 downto 0) :=( others => '0') RBUF_FUSE
slv2 := "01" ibaddr_rbuf
integer := 15 pbuf_ibf_pval
slv8 :=( others => '0') RBUF_DO
slbit := '0' RBUF_WE
integer := 1 rcsr_ibf_fclr
integer range AWIDTH- 1 downto 0 rbuf_ibf_pfuse
slbit := '0' RBUF_FULL
integer := 15 rcsr_ibf_rerr
ib_rlim_slv rrlimrrlim
slv( AWIDTH- 1 downto 0) := slv( to_unsigned( 1, AWIDTH) ) c_fuse1
slbit := '0' PRLIM_BUSY
integer := 0 rcsr_ibf_renb
slv2 := "00" ibaddr_rcsr
regs_type := regs_init N_REGS
integer := 5 rcsr_ibf_rir
integer := 3 rcsr_ibf_ique
integer := 2 rcsr_ibf_iack
integer := 15 pcsr_ibf_perr
slv16 := slv( to_unsigned( 8#177550#, 16) ) ibaddr_pc11
integer := 5 pcsr_ibf_pir
slbit := '0' RBUF_EMPTY
ib_rlim_slv prlimprlim
integer range 7 downto 0 rbuf_ibf_data
integer := 4 pcsr_ibf_rlb
slbit := '0' PBUF_RESET
integer := 4 rcsr_ibf_rlb
integer := 11 rcsr_ibf_rbusy
integer range 14 downto 12 pcsr_ibf_rlim
slbit := '0' RRLIM_BUSY
integer := 7 rcsr_ibf_rdone
slbit := '0' RRLIM_START
regs_type := regs_init R_REGS
slbit := '0' PRLIM_START
integer := 6 pcsr_ibf_pie
integer range 10 downto 8 rcsr_ibf_type
integer := 6 rcsr_ibf_rie
integer range 7 downto 0 pbuf_ibf_data
slbit := '0' PBUF_EMPTY
slbit := '0' RBUF_RESET
regs_type :=( '0', '1', "000", '0', '0', '0', '0', '0', '0', '1', "000", '1', '0', '0') regs_init
slbit := '0' PBUF_WE
integer range AWIDTH- 1+ 8 downto 8 rbuf_ibf_rfuse
integer range 14 downto 12 rcsr_ibf_rlim
integer := 15 rbuf_ibf_rbusy
integer := 7 pcsr_ibf_prdy
slbit := '0' PBUF_FULL
slbit := '0' PBUF_CE
slbit := '0' RBUF_CE
integer range AWIDTH- 1+ 8 downto 8 pbuf_ibf_fuse
slv8 :=( others => '0') PBUF_DO
slv2 := "10" ibaddr_pcsr
slv2 := "11" ibaddr_pbuf
slv( AWIDTH- 1 downto 0) :=( others => '0') PBUF_FUSE
in RESET slbit
AWIDTH natural := 5
in BRESET slbit
out EI_REQ_PTP slbit
out RB_LAM slbit
in CLK slbit
in EI_ACK_PTP slbit
in IB_MREQ ib_mreq_type
in EI_ACK_PTR slbit
out IB_SRES ib_sres_type
out EI_REQ_PTR slbit
in RLIM_CEV slv8
Definition: iblib.vhd:33
std_logic_vector( 2 downto 0) slv3
Definition: slvtypes.vhd:35
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