constant LUT_DAT_W : integer := 10;
constant LUT_ADR_W : integer := 9;
constant LUT_INIT_FILE : string := "../sin.lut";
- constant IRF_ADR_W : integer := 5;
constant WAVE_SIZE : integer := 2**LUT_ADR_W;
signal STB_I : std_logic;
signal IRF_ACK_I : std_logic;
- signal IRF_ADR_O : std_logic_vector (IRF_ADR_W-1 downto 0);
+ signal IRF_ADR_O : std_logic_vector (4 downto 0);
signal IRF_CYC_O : std_logic;
signal IRF_DAT_I : std_logic_vector (15 downto 0);
signal IRF_DAT_O : std_logic_vector (15 downto 0);
signal LUT_DAT_I : std_logic_vector (LUT_DAT_W-1 downto 0);
signal LUT_STB_O : std_logic;
+ signal IRC_DAT_I : std_logic_vector (15 downto 0);
+
subtype word_t is std_logic_vector (15 downto 0);
- signal dbg_mem00 : word_t := "0000000000100100"; -- MCC enable flags (RO)
- signal dbg_mem04 : word_t := (others => '0'); -- Angle (RO)
+ signal dbg_mem00 : word_t := "0000000000111111"; -- MCC enable flags (RO)
+ signal dbg_mem01 : word_t := (others => '0'); -- IRC
+ signal dbg_mem02 : word_t := "0000000000000000"; -- IRC base
+ signal dbg_mem03 : word_t := "0000000000000111"; -- IRC per revolution (7)
+ signal dbg_mem04 : word_t := (others => '0'); -- Angle
signal dbg_mem11 : word_t := (others => '0'); -- Phase 1
signal dbg_mem15 : word_t := (others => '0'); -- Phase 2
signal dbg_mem19 : word_t := (others => '0'); -- Phase 3
uut : entity work.mcc
generic map (
LUT_ADR_W => LUT_ADR_W,
- LUT_DAT_W => LUT_DAT_W,
- IRF_ADR_W => IRF_ADR_W)
+ LUT_DAT_W => LUT_DAT_W)
port map (
ACK_O => ACK_O,
CLK_I => CLK_I,
LUT_STB_O => LUT_STB_O,
LUT_ADR_O => LUT_ADR_O,
LUT_DAT_I => LUT_DAT_I,
- IRC_DAT_I => (others => '0'),
+ IRC_DAT_I => IRC_DAT_I,
PWM_DAT_O => open,
PWM1_STB_O => open,
PWM2_STB_O => open,
if IRF_WE_O = '0' then
case conv_integer(IRF_ADR_O) is
when 16#00# => IRF_DAT_I <= dbg_mem00;
+ when 16#01# => IRF_DAT_I <= dbg_mem01;
+ when 16#02# => IRF_DAT_I <= dbg_mem02;
+ when 16#03# => IRF_DAT_I <= dbg_mem03;
when 16#04# => IRF_DAT_I <= dbg_mem04;
when 16#11# => IRF_DAT_I <= dbg_mem11;
when 16#15# => IRF_DAT_I <= dbg_mem15;
end case;
else
case conv_integer(IRF_ADR_O) is
+ when 16#01# => dbg_mem01 <= IRF_DAT_O;
+ when 16#02# => dbg_mem02 <= IRF_DAT_O;
+ when 16#03# => dbg_mem03 <= IRF_DAT_O;
+ when 16#04# => dbg_mem04 <= IRF_DAT_O;
when 16#11# => dbg_mem11 <= IRF_DAT_O;
when 16#15# => dbg_mem15 <= IRF_DAT_O;
when 16#19# => dbg_mem19 <= IRF_DAT_O;
UUT_FEED : process is
begin
- STB_I <= '0';
+ STB_I <= '0';
wait for offset;
wait for 4*period;
for i in 0 to 1 loop
- dbg_mem04 <= conv_std_logic_vector(i, 16);
+ IRC_DAT_I <= conv_std_logic_vector(8*i, 16);
+ --dbg_mem04 <= conv_std_logic_vector(i, 16);
STB_I <= '1';
wait until rising_edge(CLK_I) and ACK_O = '1';