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
14 reset_i : in std_logic;
15 -- Address (needs just last 4 bits, rest is wired to CE)
16 address_i : in std_logic_vector(3 downto 0);
19 data_i : in std_logic; -- 1 bit input
20 data_o : out std_logic_vector(31 downto 0);
26 irc1_a_i : in std_logic;
27 irc1_b_i : in std_logic;
28 irc1_index_i : in std_logic;
29 irc1_mark_i : in std_logic;
31 irc2_a_i : in std_logic;
32 irc2_b_i : in std_logic;
33 irc2_index_i : in std_logic;
34 irc2_mark_i : in std_logic;
36 irc3_a_i : in std_logic;
37 irc3_b_i : in std_logic;
38 irc3_index_i : in std_logic;
39 irc3_mark_i : in std_logic;
41 irc4_a_i : in std_logic;
42 irc4_b_i : in std_logic;
43 irc4_index_i : in std_logic;
44 irc4_mark_i : in std_logic
48 architecture Behavioral of bus_irc is
50 -- Multiplexer signals
51 signal irc1_out_s : std_logic_vector(31 downto 0);
52 signal irc1_ta_s : std_logic;
53 signal irc1_ce_s : std_logic_vector(1 downto 0);
55 signal irc2_out_s : std_logic_vector(31 downto 0);
56 signal irc2_ta_s : std_logic;
57 signal irc2_ce_s : std_logic_vector(1 downto 0);
59 signal irc3_out_s : std_logic_vector(31 downto 0);
60 signal irc3_ta_s : std_logic;
61 signal irc3_ce_s : std_logic_vector(1 downto 0);
63 signal irc4_out_s : std_logic_vector(31 downto 0);
64 signal irc4_ta_s : std_logic;
65 signal irc4_ce_s : std_logic_vector(1 downto 0);
77 index0_i => irc1_index_i,
78 mark0_i => irc1_mark_i,
87 -- IRC for second axis
95 index0_i => irc2_index_i,
96 mark0_i => irc2_mark_i,
105 -- IRC for thrid axis
113 index0_i => irc3_index_i,
114 mark0_i => irc3_mark_i,
116 data_o => irc3_out_s,
123 -- IRC for fourth axis
131 index0_i => irc4_index_i,
132 mark0_i => irc4_mark_i,
134 data_o => irc4_out_s,
142 memory_bus_update: process(ce_i, address_i, irc1_out_s, irc1_ta_s, irc2_out_s, irc2_ta_s,
143 irc3_out_s, irc3_ta_s, irc4_out_s, irc4_ta_s)
147 -- 11 is the inactive address here
154 data_o <= (others => 'X');
158 -- We have 4-bit address, and IRC module has 3 registers
159 -- Higher bits choose which IRC module, lower bits are for registers of the module
160 case address_i(3 downto 2) is
162 irc1_ce_s <= address_i(1 downto 0);
163 data_o <= irc1_out_s;
167 irc2_ce_s <= address_i(1 downto 0);
168 data_o <= irc2_out_s;
172 irc3_ce_s <= address_i(1 downto 0);
173 data_o <= irc3_out_s;
177 irc4_ce_s <= address_i(1 downto 0);
178 data_o <= irc4_out_s;