Телефон: 8-800-350-22-65
WhatsApp: 8-800-350-22-65
Telegram: sibac
Прием заявок круглосуточно
График работы офиса: с 9.00 до 18.00 Нск (5.00 - 14.00 Мск)

Статья опубликована в рамках: Научного журнала «Студенческий» № 41(169)

Рубрика журнала: Технические науки

Секция: Технологии

Скачать книгу(-и): скачать журнал часть 1, скачать журнал часть 2, скачать журнал часть 3, скачать журнал часть 4, скачать журнал часть 5, скачать журнал часть 6

Библиографическое описание:
Галуза Д.В. ЧАСЫ НА ПЛИС СЕМЕЙСТВА CYCLONE IV С ПОМОЩЬЮ BD В САПР QUARTUS PRIME 21.1. // Студенческий: электрон. научн. журн. 2021. № 41(169). URL: https://sibac.info/journal/student/169/235910 (дата обращения: 29.03.2024).

ЧАСЫ НА ПЛИС СЕМЕЙСТВА CYCLONE IV С ПОМОЩЬЮ BD В САПР QUARTUS PRIME 21.1.

Галуза Даниил Владимирович

студент, Омский государственный технический университет,

РФ, г. Омск

АННОТАЦИЯ

Данная статья содержит 15 рисунков и 1 источник. В данной статье произведена разработка электронных часов на ПЛИС.

 

Ключевые слова: ПЛИС, часы, программирование, программирование микроконтроллеров.

 

I. Введение

Время – это то, за чем мы следим постоянно, вне зависимости от событий, происходящих во круг нас. Оно облегчает жизнь во всех её аспектах, ведь зная точное время ты никогда не опоздаешь на работу и не получишь за это выговор, или у тебя никогда не сгорит пирог в духовке - ведь ты будешь знать точно сколько ему времени нужно для приготовления.

Устройство, с помощью которого можно осуществлять контроль времени – часы. Они бывают разного вида: солнечные часы, водяные часы, песочные часы, огненные часы, механические часы, кварцевые часы, электронные часы, радиочасы и др. Самыми распространенными в настоящее время являются электронные часы, ведь они относительно просты в изготовлении в сравнении с теми же механическими часами, имеют малые габариты и удовлетворяют таким критериям современного мира как: точность измерительной системы, малое энергопотребление, новизна.

В данной статье будет рассмотрен пример программирования электронных часов на базе ПЛИС семейства Cyclone IV, с помощью блок-схем в САПР Quartus Prime 21.1.

II. Создание электронных часов

Начнем с того, что нам необходимо для построения данных часов. Для самого построения необходимо иметь ПК с САПР Quartus Prime 21.1 и для проверки нужна будет отладочная плата, в данном случае это будет Cyclone IV EP4CE115F29C7 её внешний вид представлен на рисунке 1.

 

Рисунок 1. Отладочная плата Cyclone IV EP4CE115F29C7

 

Перед началом проектирования зададимся вопросом: что такое часы? Часы – это прибор, который отсчитывает время. Для отсчета ему нужен точный источник. На данной плате имеется генератор тактового сигнала 50 МГц. Но 50 МГц будет многовато для проектирования, поэтому нам нужно будет разделить 50 МГц на 50 000 000, для того чтобы получить 1 Гц (один «тик» в секунду), сразу же возникает вопрос как это сделать. В данном проекте будет предложено получение 1Гц в два этапа: используя PLL, поделить входной сигнал генератора на 50 и используя счетчик, поделить его на миллион.

Что такое PLL? Не вдаваясь в технические подробности, можно сказать, что это устройство, с помощью, которого можно входной сигнал генератора умножать, делить, сдвигать по фазе, менять скважность и т.д. В данной отладочной плате их 4 шт.

Начнем же создание часов, для этого перейдем во вкладку File > New Project Wizard. Там зададим название проекта, а также имя файла верхнего уровня (оно задается автоматически таким же, как и название проекта), далее нажав клавишу Next, попадаем во вкладку Project Type, там выбираем Empty Project и нажимаем клавишу Next для перехода к следующему окну конфигурации. Открывшееся окно Add Files необходимо пропустить нажатием клавиши Next. В окне Family, Device & Board Settings необходимо выбрать отладочную плату, на базе которой будут проектироваться и в дальнейшем проверяться часы. После выбора отладочной платы, нужно будет пропустить последующие два окна EDA Tool Settings и Summary нажатием клавиши Next. Затем перейдя во вкладку File > New > Block Diagram/ Schematic File создадим файл для работы с блок – схемами. Проект создан.

В открывшемся BDF файле переходим в Library и используем ALT_PLL из раздела IO. В появившемся окне необходимо будет придумать название элементу и выбрать VHDL. После необходимо будет выставить показатели как на рисунках, представленных ниже.

 

Рисунок 2. Установление входной частоты 50 МГц

 

Рисунок 3. Отключение ненужных входов

 

После три раза нажимаем клавишу Next и попадаем в окно выбора параметров сигнала, где задаем коэффициент деления 50:

 

Рисунок 4. Параметры сигнала

 

Далее можно смело нажимать Finish, и поставив галочку на пункте Quartus Prime Symbol file в окне Summary сохранять и вставлять в проект.

Теперь нужно поделить сигнал еще на миллион — для этого используем счетчик по модулю 1000000. Модуль счета — это количество возможных состояний счетчика.

Создаем его с помощью той же Library, используя LPM_Counter. Задаем разрядность — 20 бит, и выбираем modulus, with a count modulus of 1000000, процесс создание показан на рисунках ниже.

 

Рисунок 5. Задание разрядности

 

Рисунок 6. Задание модуля счета

 

Далее можно нажимать Finish, и поставив галочку на пункте Quartus Prime Symbol file в окне Summary сохранять и вставлять в проект.

Соединив два элемента друг с другом, как показано на риснуке 7 получим сигнал частотой в 1 Гц.

 

Рисунок 7. Соединение двух элементов

 

Далее необходимо реализовать каскад из 3-х счетчиков: два по  модулю 60 (минуты и секунды), и один по модулю 24(часы).

Секундный счетчик — с асинхронным сбросом, который происходит при нажатии любой кнопки (установка часов/минут). Создается на базе того же LPM_Counter, но модуль счета выбирается не 1000000, а 60, и разрядность ставится не 20 бит, а 6 бит, так же добавляется выход Carry Out (перенос при переполнении в следующий счетчик). Внешний вид элемента представлен на рисунке ниже.

 

Рисунок 8. Внешний вид секундного счетчика

 

Следующие два счетчика (минутный и часовой) создаются аналогичным образом за исключением того, что при создание часового счетчика необходимо будет выставить модуль счета 24, так же следует учесть и тот факт, что для установки времени необходимо подавать тактовый сигнал побыстрее 1 Гц для того, чтобы перестройка времени была быстрее.

Для этого используем мультиплексоры, управляемые кнопками:

 

Рисунок 9. Подключение мультиплексоров к минутному счетчику

 

Нижний мультиплексор используется для выбора частоты, которую нужно подавать на вход счетчика, а верхний — выбирает, что подавать на вход cin: перенос из cout секундного счетчика, или просто уровень логической единицы.

Суть входа cin в том, что счетчик считает только при наличии на этом входе уровня логической единицы. То есть, когда счетчик секунд переполняется, он поднимает cout в единицу. Эта логическая единица поступает на вход cin следующего счетчика, и он отчитывает одну минуту, и так далее.

Таким образом, при отпущенной кнопке KEY [0] минутный счетчик считает 1 раз в минуту, а при нажатой — где-то 4 раза в секунду.

Аналогично для часового счетчика:

 

Рисунок 10. Подключение мультиплексоров к часовому счетчику

 

Верхний мультиплексор заведует переносом, а нижний частотой, за исключением одного момента: при нажатой кнопке KEY [0] тактовые сигналы на ввод счетчика не поступают. Это сделано за счет элемента AND, на вход которого подается тактовый сигнал и KEY [0]. При отпущенной кнопке на KEY [0] высокий уровень и q [19] проходит через него, при нажатой — уровень «0» и на выходе тоже «0».

Собранная схема должна выглядеть следующим образом:

 

Рисунок 11. Собранная схема

 

Теперь необходимо сделать преобразователь из двоичного кода в двоично-десятичный. Это такое представление десятичного числа в двоичном коде, когда каждая десятичная цифра задается отдельным 4мя двоичными разрядами. Для его реализации необходимо написать код на языке Verilog. Для этого переходим во вкладку File > New > Verilog HDL File и создаем Verilog файл. Сам код, который необходимо будет написать в данном файле представлен ниже:

module add3(in,out);

input [3:0] in;

output [3:0] out;

reg [3:0] out;

always @ (in)

case (in)

4'b0000: out <= 4'b0000;

4'b0001: out <= 4'b0001;

4'b0010: out <= 4'b0010;

4'b0011: out <= 4'b0011;

4'b0100: out <= 4'b0100;

4'b0101: out <= 4'b1000;

4'b0110: out <= 4'b1001;

4'b0111: out <= 4'b1010;

4'b1000: out <= 4'b1011;

4'b1001: out <= 4'b1100;

default: out <= 4'b0000;

endcase

endmodule

module binary_to_BCD(A,ONES,TENS);

input [5:0] A;

output [3:0] ONES, TENS;

wire [3:0] c1,c2,c3;

wire [3:0] d1,d2,d3;

assign d1 = {1'b0,A[5:3]};

assign d2 = {c1[2:0],A[2]};

assign d3 = {c2[2:0],A[1]};

add3 m1(d1,c1);

add3 m2(d2,c2);

add3 m3(d3,c3);

assign ONES = {c3[2:0],A[0]};

assign TENS = {1'b0,c1[3],c2[3],c3[3]};

endmodule

Сохраняем и добавляем в проект в количество трех штук (две для секундного и минутного и одна для часового).

 

Рисунок 12. Преобразователь из двоичного кода в двоично-десятичный

 

Затем необходимо выходы часового, минутного и секундного счетчиков соединить с преобразователями. А выходы с преобразователей соединить с драйверами семи-сегментного индикатора.

Драйверы семи-сегментного индикатора тоже будут построены с помощью блок-схем. Для этого необходимо создать новый проект, и в нем создать BDF File и собрать следующую конструкцию (рисунок 13).

 

Рисунок 13. Схема драйвера семи-сегментного индикатора

 

После создания драйвера его необходимо будет добавить в текущий проект путем не хитрых манипуляций. Для этого в проекте драйвера семи-сегментного индикатора перейти во вкладку File > Create / Update > Create Symbol Files for Current File. Затем открыв папку в которой располагается проект с драйвером, скопировать два файла типа .bsf и .bdf и перенести их в папку в которой располагается проект часов.

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

 

Рисунок 14. Подключение преобразователя к драйверам семи-сегментного индикатора

 

После сборки всей схемы необходимо будет произвести компиляцию проекта и назначить пины для соответствующей отладочной платы. Для этого необходимо будет перейти во вкладку Assignments > Pin Planner и назначить пины в соответствии с дата шитом. Пример назначения представлен на рисунке ниже.

 

Рисунок 15. Назначение пинов

 

Затем нужно будет снова произвести компиляцию проекта и загрузить его на отладочную плату. Для этого необходимо перейти во вкладку Tools > Programmer, там выбрать через какой выход загружать проект на отладочную плату и нажать кнопку Start.

Все, проект загружен на плату, остается только смотреть на работу электронных часов.

III Заключение

В настоящей статье рассмотрен вариант исполнения электронных часов на ПЛИС семейства Cyclone IV с помощью BD в САПР Quartus Prime 21.1. Так же были рассмотрены такие элементы как преобразователь из двоичного кода в двоично-десятичный и драйвер семи-сегментного индикатора.

 

Список литературы:

  1. Binary to BCD Converter [Электронный ресурс]: BCD Converter URL: https://johnloomis.org/ece314/notes/devices/binary_to_BCD/bin_to_bcd.html

Оставить комментарий

Форма обратной связи о взаимодействии с сайтом
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.