VERSION_REGISTER.vhd


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;