Современная электроника №4/2021

ПРОЕКТИРОВАНИЕ И МОДЕЛИРОВАНИЕ 49 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 4 2021 средств Verilog HDL. Структурно про- ект ПЛИС состоит из исходного фай- ла модуля верхнего уровня MAX_10_ ADC_1.v и нескольких исходных файлов модулей более низкого уров- ня: файла модуля обслуживания ЖКИ 12864ZW LCD_12864.v, файла модуля формирования единичного импульса разрешения звука от нажатия кноп- ки buzzer_butt.v, файла модуля филь- тра дребезга контактов кнопки noise_ filter_butt.v, файла модуля выдачи результата АЦП в последовательном виде ADC_rezult_serial.v, файла моду- ля преобразования выходного кода АЦП в значение температуры в ° С со знаком Code_Temper_conv.v, а так- же двух файлов, сгенерированных в ходе создания проекта инструмен- том Qsys: файла IP-ядра модуля АЦП ADC_Core_1.qip, файла IP-ядра моду- ля PLL ALTPLL1.qip, каждый с исход- ными файлами более низкого уровня. Полная файловая структура проекта ПЛИС показана на рисунке 24 (2-я часть статьи). Проект занимает около 1/3 ресурсов ПЛИС 10M08SAE144C8G по логике и около 1/2 – по линиям ввода-вывода. В модуле верхнего уровня реализо- вана главная функция проекта ПЛИС – осуществление аналого-цифровых преобразований, а также несколько сервисных функций: опрос кнопок управления, задание значений управ- ляющих сигналов АЦП по результатам этого опроса, вывод текущих настроек АЦП и результатов преобразований на ЖКИ, вывод результатов преобразова- ний через цифровые интерфейсы, гене- рация внутренних синхросигналов, генерация звуковых сигналов, управ- ление светодиодами. Выбор канала АЦП для преобразо- ваний осуществляется кнопкой SB4 по кольцу от 0 до 20. Кнопкой SB1 можно управлять значе- нием сигнала command_valid_ADC по кольцу, то есть каждое нажатие на кноп- ку приводит к инверсии текущего зна- чения сигнала. Сигнал command_valid_ ADC, по сути, задаёт состояние АЦП: включено или отключено. Опытным путём было установлено, что выбор канала для преобразований всегда нужно производить при отключён- ном АЦП, то есть при низком уровне сигнала command_valid_ADC. В про- тивном случае возможны сбои в уста- новлении частоты синхросигнала АЦП. Так, вместо синхросигнала с частотой 50 кГц, автоматически генерируемо- го IP-ядром АЦП при выборе канала встроенного температурного датчика TSD, может ошибочно генерироваться синхросигнал с большей в несколько раз частотой. Кнопки SB2, SB3 управляют по кольцу значениями сигналов c omma n d _ s t a r t o f p a c k e t _ ADC , command_endofpacket_ADC соответ- ственно. Однако поскольку в про- екте ПЛИС мы используем IP-ядро АЦП без программы упорядоче- ния (sequencer), значения указан- ных сигналов не должны никак вли- ять на ход преобразований. В нашем проекте преобразования автомати- чески запускаются только при уста- новке сигнала command_valid_ADC и останавливаются только при сбро- се этого сигнала. Значения сигна- лов command_startofpacket_ADC, command_endofpacket_ADC при этом могут быть произвольными, управ- ление ими в текущей версии проек- та ПЛИС реализовано для будущих версий. Кнопки SB5, SB6 в текущей вер- сии проекта ПЛИС не используют- ся, они зарезервированы для буду- щих версий. Все кнопки SB1-SB6 работают на замыкание между цифровым входом ПЛИС и цифровым общим проводом. В проекте ПЛИС задана подтяжка всех цифровых входов подключения кнопок к плюсу питания внутренними резисто- рами. Дребезг при нажатии на кнопки устраняется в проекте ПЛИС с помо- щьюмодуля фильтра дребезга контак- тов кнопки noise_filter_butt.v. Аналого-цифровые преобразова- ния при выборе любого канала, кро- ме канала встроенного температурно- го датчика TSD (канал 17), и установке сигнала command_valid_ADC осущест- вляются циклически, в автоматическом режиме с частотой выборок 1 МГц. При осуществлении выборок от TSD в канале 17 преобразования также осу- ществляются циклически, в автома- тическом режиме, но уже с частотой 50 кГц. При осуществлении преобра- зований в любом канале фиксация результата АЦП производится по фрон- ту сигнала готовности результата АЦП command_ready_ADC, поступающего из IP-ядра АЦП, при условии, что так- же поступающий из IP-ядра АЦП воз- вратный сигнал валидности результата АЦП response_valid_ADC находится на активном (высоком) уровне. Указанное действие реализуется с помощью язы- ковой конструкции модуля, приведён- ной в листинге 5. В этом модуле dout_ ADC – это 12-разрядная цепь (wire) выходов данных IP-ядра АЦП, а rezult_ ADC – 12-разрядный регистр (reg) хра- нения текущего результата преобразо- вания. Зафиксированное при каждом преобразовании в регистре rezult_ADC значение используется для дальнейшей обработки. Листинг 5 // Фиксация результата АЦП по фронту сигнала // готовности результата АЦП command_ready_ADC // при условии активного уровня сигнала // валидности из АЦП response_valid_ADC always @(posedge command_ready_ADC) begin if (response_valid_ADC) begin rezult_ADC <= dout_ADC; end end Листинг 6 parameter U_ref_mV = 3300; // опорное напряжение АЦП в милливольтах // для пересчета результата АЦП в мВ // умножение результата АЦП в битах на опорное напряжение в милливольтах, // чтобы получить результат в милливольтах rezult_ADC_U_ref <= rezult_ADC * U_ref_mV; // деление результата умножения на 2**12, // что эквивалентно лог сдвигу вправо на 12 разрядов rezult_ADC_mV <= (rezult_ADC_U_ref >> 12); rezult_ADC_mV_tis <= rezult_ADC_mV / 1000; Temp2_data <= rezult_ADC_mV % 1000; rezult_ADC_mV_sot <= Temp2_data / 100; Temp3_data <= Temp2_data % 100; rezult_ADC_mV_des <= Temp3_data / 10; rezult_ADC_mV_ed <= Temp3_data % 10;

RkJQdWJsaXNoZXIy MTQ4NjUy