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);
77 type state_t is (ready, read_mask, do_mcc, done);
79 signal state : state_t;
81 signal mcc_mask : std_logic_vector (MCC_W-1 downto 0);
82 signal mcc_ack_inner : std_logic_vector (MCC_W downto 0);
83 signal mcc_stb_inner : std_logic_vector (MCC_W-1 downto 0);
84 signal mux_code_inner : std_logic_vector (MUX_W-1 downto 0);
85 signal mcc_exec : std_logic;
87 --------------------------------------------------------------------------------
91 IRF_ADR_O <= MASTER_IRF_ADR_O when MCC_MUX_EN = '0' else
92 VECTOR_IRF_ADR_O when MCC_MUX_CODE = 2 else
93 PWM_IRF_ADR_O when MCC_MUX_CODE = 5 else
96 IRF_DAT_O <= MASTER_IRF_DAT_O when MCC_MUX_EN = '0' else
97 VECTOR_IRF_DAT_O when MCC_MUX_CODE = 2 else
98 PWM_IRF_DAT_O when MCC_MUX_CODE = 5 else
101 IRF_STB_O <= MASTER_IRF_STB_O when MCC_MUX_EN = '0' else
102 VECTOR_IRF_STB_O when MCC_MUX_CODE = 2 else
103 PWM_IRF_STB_O when MCC_MUX_CODE = 5 else
106 IRF_WE_O <= MASTER_IRF_WE_O when MCC_MUX_EN = '0' else
107 VECTOR_IRF_WE_O when MCC_MUX_CODE = 2 else
111 PWM1_STB_O <= PWM_STB_O when PWM_SL_MUX_CODE = 0 else '0';
112 PWM2_STB_O <= PWM_STB_O when PWM_SL_MUX_CODE = 1 else '0';
113 PWM3_STB_O <= PWM_STB_O when PWM_SL_MUX_CODE = 2 else '0';
116 mcc_master_1 : entity work.mcc_master
120 IRF_ADR_W => IRF_ADR_W)
126 MCC_STB_O => MCC_STB,
127 MCC_ACK_I => MCC_ACK,
128 MCC_MUX_CODE => MCC_MUX_CODE,
129 MCC_MUX_EN => MCC_MUX_EN,
130 IRF_ACK_I => IRF_ACK_I,
131 IRF_ADR_O => MASTER_IRF_ADR_O,
132 IRF_DAT_I => IRF_DAT_I,
133 IRF_DAT_O => MASTER_IRF_DAT_O,
134 IRF_STB_O => MASTER_IRF_STB_O,
135 IRF_WE_O => MASTER_IRF_WE_O);
137 vector_gen_1 : entity work.vector_gen
145 ACK_O => MCC_ACK (2),
148 STB_I => MCC_STB (2),
149 IRF_ACK_I => IRF_ACK_I,
150 IRF_ADR_O => VECTOR_IRF_ADR_O,
152 IRF_DAT_I => IRF_DAT_I,
153 IRF_DAT_O => VECTOR_IRF_DAT_O,
154 IRF_STB_O => VECTOR_IRF_STB_O,
155 IRF_WE_O => VECTOR_IRF_WE_O,
156 LUT_ADR_O => LUT_ADR_O,
157 LUT_DAT_I => LUT_DAT_I,
158 LUT_STB_O => LUT_STB_O);
160 pwm_dump_sequencer : entity work.sequencer
162 IRF_ADR_W => IRF_ADR_W,
166 ACK_O => MCC_ACK (5),
169 STB_I => MCC_STB (5),
170 IRF_ADR_O => PWM_IRF_ADR_O,
171 SL_ACK_I => PWM_SL_ACK_O,
172 SL_IRF_ADR_I => PWM_SL_IRF_ADR_O,
173 SL_STB_O => PWM_SL_STB_I,
174 SL_MUX_CODE => PWM_SL_MUX_CODE);
176 pwm_dump_1 : entity work.pwm_dump
178 IRF_ADR_W => IRF_ADR_W,
183 ACK_O => PWM_SL_ACK_O,
186 STB_I => PWM_SL_STB_I,
187 PWM_DAT_O => PWM_DAT_O,
188 PWM_STB_O => PWM_STB_O,
189 IRF_ACK_I => IRF_ACK_I,
190 IRF_ADR_O => PWM_SL_IRF_ADR_O,
191 IRF_DAT_I => IRF_DAT_I,
192 IRF_STB_O => PWM_IRF_STB_O);
194 end architecture behavioral;