2 use ieee.std_logic_1164.all;
3 use ieee.std_logic_arith.all;
4 use ieee.std_logic_unsigned.all;
5 use ieee.numeric_std.all;
6 use work.lx_rocon_pkg.all;
8 -- IRC bus interconnect: memory region for IRC
16 -- Address (needs just last 4 bits, rest is wired to CE)
17 address : in std_logic_vector(3 downto 0);
21 data_in : in std_logic; -- 1 bit input
22 data_out : out std_logic_vector(31 downto 0);
30 irc1_a : in std_logic;
31 irc1_b : in std_logic;
32 irc1_index : in std_logic;
33 irc1_mark : in std_logic;
35 irc2_a : in std_logic;
36 irc2_b : in std_logic;
37 irc2_index : in std_logic;
38 irc2_mark : in std_logic;
40 irc3_a : in std_logic;
41 irc3_b : in std_logic;
42 irc3_index : in std_logic;
43 irc3_mark : in std_logic;
45 irc4_a : in std_logic;
46 irc4_b : in std_logic;
47 irc4_index : in std_logic;
48 irc4_mark : in std_logic
53 architecture Behavioral of bus_irc is
55 -- Multiplexer signals
56 signal irc1_out : std_logic_vector(31 downto 0);
57 signal irc1_ta : std_logic;
58 signal irc1_ce : std_logic_vector(1 downto 0);
60 signal irc2_out : std_logic_vector(31 downto 0);
61 signal irc2_ta : std_logic;
62 signal irc2_ce : std_logic_vector(1 downto 0);
64 signal irc3_out : std_logic_vector(31 downto 0);
65 signal irc3_ta : std_logic;
66 signal irc3_ce : std_logic_vector(1 downto 0);
68 signal irc4_out : std_logic_vector(31 downto 0);
69 signal irc4_ta : std_logic;
70 signal irc4_ce : std_logic_vector(1 downto 0);
92 -- IRC for second axis
100 index0 => irc2_index,
103 data_out => irc2_out,
110 -- IRC for thrid axis
118 index0 => irc3_index,
121 data_out => irc3_out,
128 -- IRC for fourth axis
136 index0 => irc4_index,
139 data_out => irc4_out,
147 memory_bus_update: process(ce, address, irc1_out, irc1_ta, irc2_out, irc2_ta,
148 irc3_out, irc3_ta, irc4_out, irc4_ta)
158 data_out <= (others => 'X');
162 -- We have 4-bit address, and IRC module has 3 registers
163 -- Higher bits choose which IRC module, lower bits are for registers of the module
164 case address(3 downto 2) is
166 irc1_ce <= address(1 downto 0);
167 data_out <= irc1_out;
171 irc2_ce <= address(1 downto 0);
172 data_out <= irc2_out;
176 irc3_ce <= address(1 downto 0);
177 data_out <= irc3_out;
181 irc4_ce <= address(1 downto 0);
182 data_out <= irc4_out;