В данном уроке мы научимся сохранять нашу программу в энерго не зависимую память и подключим внешнее тактирование.
Начнем с тактирования (частота тактирования у меня составляет 50МГц), у меня внешний генератор подключен к ножке W19
Именно к ней мы подключимся, для этого пропишем в нашем файле подключения IO следующие строчки:
set_property PACKAGE_PIN W19 [get_ports clk]
set_property IOSTANDARD LVCMOS25 [get_ports clk]
create_clock -period 20.000 -name clk -waveform {0.000 10.000} [get_ports clk]
Остальной текст оставляем без изменений.
Теперь скорректируем наш основной код, в котором уже используется внешний тактовый сигнал.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
entity LED is Port (
clk : in STD_LOGIC;
led0 : out STD_LOGIC;
led1 : out STD_LOGIC;
led2 : out STD_LOGIC
);
end LED;
architecture Behavioral of LED is
signal divider : unsigned(24 downto 0) := (others => ‘0’);
signal state : unsigned(1 downto 0) := (others => ‘0’);
begin
process(clk)
begin
if rising_edge(clk) then
— При 50 МГц переключение каждые 0.5 секунды
if divider = 24999999 then
divider <= (others => ‘0’);
if state = 2 then
state <= (others => ‘0’);
else
state <= state + 1;
end if;
else
divider <= divider + 1;
end if;
end if;
end process;
process(state)
begin
led0 <= ‘0’;
led1 <= ‘0’;
led2 <= ‘0’;
case state is
when «00» => led0 <= ‘1’;
when «01» => led1 <= ‘1’;
when «10» => led2 <= ‘1’;
when others => null;
end case;
end process;
end Behavioral;
У нас используется память Тип: SPI / Quad-SPI Flash
Модель: MT25QL128
Объём: 128 Mbit = 16 MB
Интерфейс: SPI x1/x2/x4
Питание: 3.3 В
Нажимаем ОК и в появившемся окне выбираем действия которые нужно сделать (ставив галочки) и указываем путь к файлу прошивки:

Теперь после того как наш код был залит в нашу Flash память мы можем снять питание и подав снова убедиться, что код не удалился и работает стабильно.