2 use ieee.std_logic_1164.all;
3 use ieee.std_logic_arith.all;
4 use ieee.std_logic_unsigned.all;
6 --------------------------------------------------------------------------------
10 LUT_ADR_W : integer := 10;
11 LUT_DAT_W : integer := 9;
12 IRF_ADR_W : integer := 5);
14 -- Primary slave intefrace
15 ACK_O : out std_logic;
19 -- Wave table interface
20 LUT_STB_O : out std_logic;
21 LUT_ADR_O : out std_logic_vector (LUT_ADR_W-1 downto 0);
22 LUT_DAT_I : in std_logic_vector (LUT_DAT_W-1 downto 0);
24 IRC_DAT_I : in std_logic_vector (15 downto 0);
26 PWM_DAT_O : out std_logic_vector (LUT_DAT_W-1 downto 0);
27 PWM1_STB_O : out std_logic;
28 PWM2_STB_O : out std_logic;
29 PWM3_STB_O : out std_logic;
30 -- Shared memory interface
31 IRF_ACK_I : in std_logic;
32 IRF_ADR_O : out std_logic_vector (IRF_ADR_W-1 downto 0);
33 IRF_DAT_I : in std_logic_vector (15 downto 0);
34 IRF_DAT_O : out std_logic_vector (15 downto 0);
35 IRF_STB_O : out std_logic;
36 IRF_WE_O : out std_logic);
39 --------------------------------------------------------------------------------
41 architecture behavioral of mcc is
43 constant MCC_W : integer := 6;
44 constant MUX_W : integer := 3;
46 constant P_BASE : integer := 16;
47 constant P_SIZE : integer := 4;
50 signal MCC_ACK : std_logic_vector (MCC_W-1 downto 0);
51 signal MCC_STB : std_logic_vector (MCC_W-1 downto 0);
52 signal MCC_MUX_CODE : std_logic_vector (MUX_W-1 downto 0);
53 signal MCC_MUX_EN : std_logic;
55 signal MASTER_IRF_ADR_O : std_logic_vector (IRF_ADR_W-1 downto 0);
56 signal MASTER_IRF_DAT_O : std_logic_vector (15 downto 0);
57 signal MASTER_IRF_STB_O : std_logic;
58 signal MASTER_IRF_WE_O : std_logic;
60 signal VECTOR_IRF_ADR_O : std_logic_vector (IRF_ADR_W-1 downto 0);
61 signal VECTOR_IRF_DAT_O : std_logic_vector (15 downto 0);
62 signal VECTOR_IRF_STB_O : std_logic;
63 signal VECTOR_IRF_WE_O : std_logic;
65 signal PWM_IRF_ADR_O : std_logic_vector (IRF_ADR_W-1 downto 0);
66 signal PWM_IRF_DAT_O : std_logic_vector (15 downto 0);
67 signal PWM_IRF_STB_O : std_logic;
68 --signal PWM_DAT_O : std_logic_vector (LUT_DAT_W-1 downto 0);
69 signal PWM_STB_O : std_logic;
70 signal PWM_SL_ACK_O : std_logic;
71 signal PWM_SL_IRF_ADR_O : std_logic_vector (IRF_ADR_W-1 downto 0);
72 signal PWM_SL_STB_I : std_logic;
73 signal PWM_SL_MUX_CODE : std_logic_vector (1 downto 0);
75 signal IRC_IRF_ADR_O : std_logic_vector (IRF_ADR_W-1 downto 0);
76 signal IRC_IRF_DAT_O : std_logic_vector (15 downto 0);
77 signal IRC_IRF_STB_O : std_logic;
78 signal IRC_IRF_WE_O : std_logic;
80 signal BASE_IRF_ADR_O : std_logic_vector (IRF_ADR_W-1 downto 0);
81 signal BASE_IRF_DAT_O : std_logic_vector (15 downto 0);
82 signal BASE_IRF_STB_O : std_logic;
83 signal BASE_IRF_WE_O : std_logic;
86 type state_t is (ready, read_mask, do_mcc, done);
88 signal state : state_t;
90 signal mcc_mask : std_logic_vector (MCC_W-1 downto 0);
91 signal mcc_ack_inner : std_logic_vector (MCC_W downto 0);
92 signal mcc_stb_inner : std_logic_vector (MCC_W-1 downto 0);
93 signal mux_code_inner : std_logic_vector (MUX_W-1 downto 0);
94 signal mcc_exec : std_logic;
96 --------------------------------------------------------------------------------
100 IRF_ADR_O <= MASTER_IRF_ADR_O when MCC_MUX_EN = '0' else
101 IRC_IRF_ADR_O when MCC_MUX_CODE = 0 else
102 BASE_IRF_ADR_O when MCC_MUX_CODE = 1 else
103 VECTOR_IRF_ADR_O when MCC_MUX_CODE = 2 else
104 PWM_IRF_ADR_O when MCC_MUX_CODE = 5 else
107 IRF_DAT_O <= MASTER_IRF_DAT_O when MCC_MUX_EN = '0' else
108 IRC_IRF_DAT_O when MCC_MUX_CODE = 0 else
109 BASE_IRF_DAT_O when MCC_MUX_CODE = 1 else
110 VECTOR_IRF_DAT_O when MCC_MUX_CODE = 2 else
111 PWM_IRF_DAT_O when MCC_MUX_CODE = 5 else
114 IRF_STB_O <= MASTER_IRF_STB_O when MCC_MUX_EN = '0' else
115 IRC_IRF_STB_O when MCC_MUX_CODE = 0 else
116 BASE_IRF_STB_O when MCC_MUX_CODE = 1 else
117 VECTOR_IRF_STB_O when MCC_MUX_CODE = 2 else
118 PWM_IRF_STB_O when MCC_MUX_CODE = 5 else
121 IRF_WE_O <= MASTER_IRF_WE_O when MCC_MUX_EN = '0' else
122 IRC_IRF_WE_O when MCC_MUX_CODE = 0 else
123 BASE_IRF_WE_O when MCC_MUX_CODE = 1 else
124 VECTOR_IRF_WE_O when MCC_MUX_CODE = 2 else
128 PWM1_STB_O <= PWM_STB_O when PWM_SL_MUX_CODE = 0 else '0';
129 PWM2_STB_O <= PWM_STB_O when PWM_SL_MUX_CODE = 1 else '0';
130 PWM3_STB_O <= PWM_STB_O when PWM_SL_MUX_CODE = 2 else '0';
133 mcc_master_1 : entity work.mcc_master
137 IRF_ADR_W => IRF_ADR_W)
143 MCC_STB_O => MCC_STB,
144 MCC_ACK_I => MCC_ACK,
145 MCC_MUX_CODE => MCC_MUX_CODE,
146 MCC_MUX_EN => MCC_MUX_EN,
147 IRF_ACK_I => IRF_ACK_I,
148 IRF_ADR_O => MASTER_IRF_ADR_O,
149 IRF_DAT_I => IRF_DAT_I,
150 IRF_DAT_O => MASTER_IRF_DAT_O,
151 IRF_STB_O => MASTER_IRF_STB_O,
152 IRF_WE_O => MASTER_IRF_WE_O);
154 irc_dump_1 : entity work.irc_dump
156 IRF_ADR_W => IRF_ADR_W,
159 ACK_O => MCC_ACK (0),
162 STB_I => MCC_STB (0),
163 IRC_DAT_I => IRC_DAT_I,
164 IRF_ACK_I => IRF_ACK_I,
165 IRF_ADR_O => IRC_IRF_ADR_O,
166 IRF_DAT_O => IRC_IRF_DAT_O,
167 IRF_STB_O => IRC_IRF_STB_O,
168 IRF_WE_O => IRC_IRF_WE_O);
170 irc_base_1 : entity work.irc_base
172 IRF_ADR_W => IRF_ADR_W,
179 ACK_O => MCC_ACK (1),
182 STB_I => MCC_STB (1),
183 IRF_ACK_I => IRF_ACK_I,
184 IRF_ADR_O => BASE_IRF_ADR_O,
185 IRF_DAT_I => IRF_DAT_I,
186 IRF_DAT_O => BASE_IRF_DAT_O,
187 IRF_STB_O => BASE_IRF_STB_O,
188 IRF_WE_O => BASE_IRF_WE_O,
191 vector_gen_1 : entity work.vector_gen
205 ACK_O => MCC_ACK (2),
208 STB_I => MCC_STB (2),
209 IRF_ACK_I => IRF_ACK_I,
210 IRF_ADR_O => VECTOR_IRF_ADR_O,
212 IRF_DAT_I => IRF_DAT_I,
213 IRF_DAT_O => VECTOR_IRF_DAT_O,
214 IRF_STB_O => VECTOR_IRF_STB_O,
215 IRF_WE_O => VECTOR_IRF_WE_O,
216 LUT_ADR_O => LUT_ADR_O,
217 LUT_DAT_I => LUT_DAT_I,
218 LUT_STB_O => LUT_STB_O);
220 pwm_dump_sequencer : entity work.sequencer
222 IRF_ADR_W => IRF_ADR_W,
226 ACK_O => MCC_ACK (5),
229 STB_I => MCC_STB (5),
230 IRF_ADR_O => PWM_IRF_ADR_O,
231 SL_ACK_I => PWM_SL_ACK_O,
232 SL_IRF_ADR_I => PWM_SL_IRF_ADR_O,
233 SL_STB_O => PWM_SL_STB_I,
234 SL_MUX_CODE => PWM_SL_MUX_CODE);
236 pwm_dump_1 : entity work.pwm_dump
238 IRF_ADR_W => IRF_ADR_W,
243 ACK_O => PWM_SL_ACK_O,
246 STB_I => PWM_SL_STB_I,
247 PWM_DAT_O => PWM_DAT_O,
248 PWM_STB_O => PWM_STB_O,
249 IRF_ACK_I => IRF_ACK_I,
250 IRF_ADR_O => PWM_SL_IRF_ADR_O,
251 IRF_DAT_I => IRF_DAT_I,
252 IRF_STB_O => PWM_IRF_STB_O);
254 end architecture behavioral;