18 use IEEE.STD_LOGIC_1164.
all;
19 use ieee.numeric_std.
all;
22 use UNISIM.vcomponents.
all;
26 generic (MAX_COUNT : integer := 65535);
29 WBSTAR : in std_logic_vector(31 downto 0);
40 type FSM_STATE is (IDLE, DATA_00, DATA_01, DATA_02, DATA_03, DATA_04, DATA_05, DATA_06, DATA_07);
42 signal NEXT_STATE : FSM_STATE := IDLE;
43 signal CE_n : std_logic := '1';
44 signal ICAP_DATA : std_logic_vector(31 downto 0) := (others => '0');
45 signal ICAP_WRITE_n : std_logic := '1';
47 attribute dont_touch : string;
48 attribute dont_touch of ICAP_DATA : signal is "true";
49 attribute dont_touch of ICAP_WRITE_n : signal is "true";
50 attribute dont_touch of CE_n : signal is "true";
52 signal ICAP_DATA_BITSWAP : std_logic_vector(31 downto 0) := (others => '0');
54 signal reconfig_delay : integer range 0 to MAX_COUNT := 0 ;
55 signal trigger_reconfig : std_logic := '0';
62 bit_swap : for i in 0 to 7 generate
63 ICAP_DATA_BITSWAP(i) <= ICAP_DATA(7-i);
64 ICAP_DATA_BITSWAP(i+8) <= ICAP_DATA(15-i);
65 ICAP_DATA_BITSWAP(i+16) <= ICAP_DATA(23-i);
66 ICAP_DATA_BITSWAP(i+24) <= ICAP_DATA(31-i);
73 SIM_CFG_FILE_NAME =>
"NONE"
79 I => ICAP_DATA_BITSWAP,
86 if (rising_edge(SYSCLK)) then
87 trigger_reconfig <= '0';
91 if reconfig_delay < MAX_COUNT then
92 reconfig_delay <= reconfig_delay + 1;
94 reconfig_delay <= reconfig_delay;
95 trigger_reconfig <= '1';
104 if (rising_edge(SYSCLK)) then
109 ICAP_DATA <= x"FFFFFFFF";
111 if trigger_reconfig = '1' then
112 NEXT_STATE <= DATA_00;
118 ICAP_DATA <= x"FFFFFFFF";
119 NEXT_STATE <= DATA_01;
123 ICAP_DATA <= x"AA995566";
124 NEXT_STATE <= DATA_02;
128 ICAP_DATA <= x"20000000";
129 NEXT_STATE <= DATA_03;
133 ICAP_DATA <= x"30020001";
134 NEXT_STATE <= DATA_04;
139 NEXT_STATE <= DATA_05;
143 ICAP_DATA <= x"30008001";
144 NEXT_STATE <= DATA_06;
148 ICAP_DATA <= x"0000000F";
149 NEXT_STATE <= DATA_07;
153 ICAP_DATA <= x"20000000";
158 ICAP_DATA <= x"FFFFFFFF";
FPGA Reconfiguration State Machine.
FPGA Reconfiguration State Machine.
in TRIGGER std_logic
Trigger input to start reconfigureation of the FPGA from the WBSTAR.
in SYSCLK std_logic
Clock input to ICAP 31.25MHz.
in WBSTAR std_logic_vector( 31 downto 0)
Warm Boot Start Address.