Pull to refresh

Часы на ПЛИС (VHDL)

Reading time 4 min
Views 29K
К этому проектированию меня подтолкнула доступность на каком-то этапе обучения к отладочной плате EP2C20F484C7 фирмы «Altera» (семейство «Cyclone-II»).

В ПЛИС заложены возможности, которые позволяют превратить ее в интегральную схему с любой функцией цифровой логики. Проектирование сводится к выявлению программируемых элементов (перемычек или запоминающих ячеек), после удаления которых в структуре схемы остаются только те связи, которые необходимы для выполнения требуемых функций. На практике эта задача весьма непростая, так как современные ПЛИС содержат в среднем несколько десятков тысяч перемычек. Поэтому для проектирования обязательно применяют системы автоматизированного проектирования (САПР ПЛИС).

В каких же случаях целесообразно применять ПЛИС?


При разработке оригинальной аппаратуры, а также для замены обычных электронных схем малой и средней степени интеграции. При этом значительно уменьшаются размеры устройства, снижается потребляемая мощность и повышается надежность. Наиболее эффективно использование ПЛИС в изделиях, требующих нестандартных схемотехнических решений. Проектирование цифровых часов на ПЛИС позволяет уменьшить затраты времени при отладки. Количество используемых элементов, интегральных схем, и блоков памяти.

Весь процесс создания часов сводится к следующим пунктом:

1. Выбор модели ПЛИС.
2. Написание программы управления ПЛИС по средство языка VHDL.
3. Отладка программы на отладочном стенде.
4. Создания принципиальной схемы элементов питания и индикации.

Функциональная схема

Функциональная часть часов представлена на рис.1, где на 4-х семи сегментных индикаторах отображаются часы и минуты или минуты и секунды в зависимости от состояния кнопки «Other».



Кнопка «Reset» предназначена для обнуления счётчика секунд, в зависимости от его значения, если больше 30 то прибавляется 1 минута и обнуляются секунды, если же меньше то просто обнуляется секунды. Кнопки «Hour» и «Min» служат для настройки часов (по нажатию).

Также для реализации часов потребуется кварцевый генератор который предназначен для получения фиксированной частоты с высокой температурной и временной стабильностью, низким уровнем фазовых шумов, стабильность частоты примерно (10-5 -10-12).

Структурная схема часов и описание ее работы


При составление структурной схемы Рис.2 учтем, что пользователь должен иметь возможность сброса секунд, установки часов и минут, а также режима отображения двух вариантов час/мин или мин/сек.



При проектирование было решено воспользоваться кварцевым генератором импульсов с частотой 27 МГц. Так как токая частота гарантирует высокую точность отсчёта секунд.

С кварца подаётся сигнал на блок делителя, который в свою очередь преобразует сигнал с частотой 27МГц в тактовый сигнал типа меандр с частотой 1Гц. Что в свою очередь означает, что за 1 секунду пройдет один период колебания.

Затем сигнал с делителя подаётся на первый счётчик (счётчик секунд), на который также приходит команда на сброс, счётчик анализирует входы, и производит счёт то 0 до 59. Каждый такт, отправляя своё состояния на дешифратор. При достижении 59 (максимум счёта), или в случае если был нажат «Reset» (Сброс) когда состояние счёта большего или равного 30, отправляет следившему счётчику тактовый импульс типа меандр.

Второй счётчик (счётчик минут) работает аналогично первому, за исключением того что на вход подаётся сигнал не «Reset» а «Min» (установка минут). Вследствие этого к текучему состоянию счёта однократно прибавляется 1, что способствует увеличению счёта.

Третий счётчик (счётчик часов), получая сигнал от приведшего счётчика и от «Hour» (Настройка часов), производит счёт от 0 до 23. Каждый счёт отправляя значения счётчика на дешифратор.

Дешифратор обрабатывая сигнал с кнопки «Other» (режим отображения), выбирает необходимые в входные сигналы: для мин/сек выбирает значения первого и второго счётчика, для час/мин выбирает значения второго и третьего счётчика. Производит их дешифрацию и затем шифрует в сигнал необходимый для отображения чисел времени на блоке четырёх 7-ми сегментных индикаторах.

Разработка проекта, часов на языке VHDL


При разработки программы на VHDL, было решено воспользоваться структурой с применением компонентов. Что позволяет нам написать программу для выполнения каждого блока структурной схемы отдельно, возможно также объединения нескольких блоков в один компонент. Следует учесть что нажатое положения кнопки ‘0’, а отжатое ‘1’.

Рассмотрим компонент под названием timeMS, это компонент универсальный он применяется для счётчика секунд и минут, так как они, похоже.

Library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
Entity timeMS is
Port
(
C:in std_logic; — +1 минута
R:in std_logic; — сброс использовать для сек.
clk:in std_logic; — тактовый сигнал 1 сек.
M:out std_logic; — передать +1 дальше
hex:out std_logic_vector(0 to 5) — вывод на семи разрядный индикатор
);
end timeMS;
Architecture behavior of timeMS is
signal cl:std_logic;
begin
Process(clk,R,C)
Variable nex:integer range 0 to 59;
begin
cl<= clk or not;
if R='0'then
if nex>29 then
M<='1';
nex:=0;
else
M<='0';
nex:=0;
end if;
else
if (cl'event and cl = '1') then
if nex = 59 then
nex := 0;
M<='1';
else
nex:=nex + 1;
M<='0';
end if;
end if;
end if;
hex<=conv_std_logic_vector(nex,6);
end process;
end behavior;


Вначале объявляем необходимые пакеты, описания используемых пакетов. После чего переходим к описанию портов. Как уже было сказано ранние данная программа объединяет два счетчика, в следствие входные порты и для счётчика минут, и для счётчика секунд.

Входные порты программы:

— Порт “C”- принимает два значения (‘0’ и ‘1’) и предназначен для настройки минут.
— Порт “R” — принимает два значения (‘0’ и ‘1’) и предназначен для сброса секунд.
— Порт “clk” – тактовый сигнал типа меандр, для секунд от делителя (см. дополнения delitel), для минут сигнал от приводящего счётчика секунд.
Входные порты программы:
— Порт “M” — принимает два значения (‘0’ и ‘1’), отправляет тактовый сигнал при достижение максимума счёта, на следующий счётчик.
— Порт “hex” – 6-ти разрядный вектор для отправки состояние счётчика на дешифратор (компонент hexMS см. дополнение).

Процесс “чувствителен” к изменению сигналов: clk, C, R. Он также является процессом с асинхронным сбросом, в случае для секунд, и асинхронным прибавления к счёту +1 в случае минут. Для счёта используется переменная nex типа integer от 0 до 59.

В начале работы процесса складывается сигнал тактового импульса и сигнал с кнопки «Min», затем проверяется:
«Reset» = ’0’ поверяется условия, текущие значения счёта больше 29 если нет, то просто обнуляем, в противном случае обнуляем и отправляется ‘1’ в порт M.

«Reset» = ’1’ проверяется пришёл ли передний фронт тактового импульса. Затем проверка условия заполнения счётчика, и запись в него +1.

В конце программы в порт hex конвертируется и отправляется значения переменной nex.
Tags:
Hubs:
+7
Comments 11
Comments Comments 11

Articles