1 | library IEEE;
|
2 | use IEEE.STD_LOGIC_1164.all;
|
3 | use IEEE.STD_LOGIC_ARITH.all;
|
4 |
|
5 | entity VERSION_REGISTER is
|
6 | generic(CPLD_VER: NATURAL:= 0;
|
7 | HW_VER : NATURAL:= 2;
|
8 | HW_TYPE : NATURAL:= 3;
|
9 | MAX_CS_LINES: POSITIVE:= 16;-- max generated CS-Lines in complete design
|
10 | START_CS_NR : NATURAL:= 0);-- CS-Line number of first version-register
|
11 | port(CS : in BIT_VECTOR((MAX_CS_LINES-1) downto 0);
|
12 | nRD : in STD_LOGIC;
|
13 | DATA : out STD_LOGIC_VECTOR(7 downto 0));
|
14 | end VERSION_REGISTER;
|
15 |
|
16 | architecture BEHAVIOR of VERSION_REGISTER is
|
17 | begin
|
18 |
|
19 | process(CS, nRD)
|
20 | variable ZERO : BIT_VECTOR((MAX_CS_LINES-1) downto 0):=(others=>'0');-- zero vector of length MAX_CS_LINES
|
21 | variable SHIFT_PATTERN : BIT_VECTOR((MAX_CS_LINES-1) downto 0):=(0=>'1',others=>'0');-- pattern of length MAX_CS_LINES all zero but Bit0=1
|
22 | begin
|
23 |
|
24 | if (CS = ZERO) then -- if no CS for CPLD active, set Databus to high Z
|
25 | DATA <= (others =>'Z');
|
26 | elsif (nRD'EVENT and nRD='0') then
|
27 | case CS is
|
28 | when (SHIFT_PATTERN sll START_CS_NR) => DATA <= CONV_STD_LOGIC_VECTOR(CPLD_VER, 8);--CPLD version register
|
29 | when (SHIFT_PATTERN sll (START_CS_NR +1))=> DATA <= CONV_STD_LOGIC_VECTOR(HW_VER, 8);--HW version register
|
30 | when (SHIFT_PATTERN sll (START_CS_NR +2))=> DATA <= CONV_STD_LOGIC_VECTOR(HW_TYPE, 8);--HW type register
|
31 | when others => DATA <= (others =>'Z');
|
32 | end case;
|
33 | end if;
|
34 |
|
35 | end process;
|
36 |
|
37 | end BEHAVIOR;
|