Страница на этапе разработки
В данном Уроке мы с Вами не вдаваясь в подробности языка программирования и нюансов настроек напишем свою первую программу, зальем ее и проверим как она работает. Работать мы будем с PLIC xc7a35tfgg484в среде программирования Vivado.
После запуска программы нам необходимо указать, что мы будем создавать новый проект:
После нажимаем Далее и вводим название проекта и путь где он будет хранится:При нажатии далее, мы попадаем в следующее меню, где мы все оставляем без изменений:
В следующем меню мы выбираем тип микросхемы с которой будем работать:У меня микросхема XC7A35tfgg484abx.
Дальше нажимаем далее два раза и перед нами откроется рабочее окно:
Для ознакомления и проверки что у нас все работает, мы напишем не большую программу для мигания светодиодами. Многие вещи по началу покажутся сложными или не понятными, мы все детали обсудим далее в других уроках. Сейчас у нас цель залить первый наш программный код и убедится, что все работает.
Для начало нам нужно создать файл, где будет у нас описываться логика роботы. Для этого выбираем Design Source и нажимаем плюсик:Нажимаем далее и добавляем в проект новый исходник:
Вписываем свое название файла и нажимаем кнопку Ок. Дальше нажимаем кнопку Далее и Финиш. На этом этапе файл создан.
Открываем данный файл двойным нажатием на него и вставляем внутрь данный код:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity led is
port(clk : in std_logic; — входной генератор 50МГц
leds : out std_logic_vector (3 downto 0) — светодиоды
);
end led;
architecture Behavioral of led is
— счётчик делителя
signal div_counter : unsigned(25 downto 0) := (others => ‘0’);
— состояние светодиодов
signal led_reg : std_logic_vector(3 downto 0) := «0001»;
begin
process(clk)
begin
if rising_edge(clk) then
if div_counter = 24999999 then — 0,5 секунды при 50МГц
div_counter <= (others => ‘0’);
— циклический сдвиг бегущего огонька
led_reg <= led_reg(2 downto 0) & led_reg(3);
else
div_counter <= div_counter + 1;
end if;
end if;
end process;
leds <= led_reg;
end Behavioral;
Так как это нулевой урок, детально по коду мы пройдемся в следующих уроках. У меня на плате стоит кварц на 50МГц, по этому меандр который мы делаем рассчитывается так: (50000000/2)-1=24999999, то есть 0,5 секунд у нас будет логический ноль, 0,5 секунд логическая единица. Если у Вас стоит другой кварц, Вам нужно буде пересчитать значение.
У меня будет 4 светодиода, по этому в описании стоит (3 downto 0).
Теперь необходимо привязать наши ножки в программе к физическим ножкам. Для этого мы нажимаем Run Sinthesis:
После окончания синтеза, мы можем перейти к нашим ножкам нажав Open Synthesized Design:Дальше назначаем физические ножки в соответствии с ножками в программе:
Пока оставляете как у меня, если у Вас светодиоды и тактирование сидит на других ножках — переназначьте их. Особенности настроек рассмотрим в следующих уроках.
Теперь нажмем Cntr+S , появится окно, в котором мы должны указать имя файла в котором у нас будут храниться наши настройки ножек:
После сохранения открываем наш файл:
Но перед этим нам надо еще выставить/рассчитать тайминги: для этого открываем редактор:В открывшемся окне запускаем редактор:
Вводим сверху названия и нажимаем три точки: