УДК 615.035.4
Пирогов1 А.А., Буслаев2 А.Б.
гФГБОУ ВО «Воронежский государственный технический университет», Воронеж, Россия
2ВУНЦ ВВС «Военно-воздушная академия имени профессора Н.Е. Жуковского и Ю.А. Гагарина», Воронеж, Россия
РАЗРАБОТКА МЕТОДА ЛОГИЧЕСКОЙ ЭМУЛЯЦИИ МОДЕЛЕЙ ЦИФРОВЫХ УСТРОЙСТВ С ИСПОЛЬЗОВАНИЕМ ПРОГРАММИРУЕМЫХ ЛОГИЧЕСКИХ ИНТЕГРАЛЬНЫХ СХЕМ
В данной работе рассмотрен метод логической эмуляции работы цифрового устройства, который позволяет заменить классический сложный и дорогостоящий подход производства прототипов интегральных схем при их проектировании. Назначая входные воздействия с использованием органов управления отладочной платы программируемой логической интегральной схемы (ПЛИС), может быть осуществлена проверка работы устройства и соответствие результатов таблице состояний и временным диаграммам
Ключевые слова:
ОТЛАДОЧНАЯ ПЛАТА, АРИФМЕТИКО-ЛОГИЧЕСКОЕ УСТРОЙСТВО, ПРОГРАММИРУЕМАЯ ЛОГИЧЕСКАЯ ИНТЕГРАЛЬНАЯ СХЕМА
Введение
Интегрированная система автоматизированного проектирования Integrated Software Environment (САПР ISE) является основным продуктом сквозного проектирования цифровых систем на базе программируемых логических интегральных схем (ПЛИС) фирмы Xilinx. Целью данной работы является практическая реализация моделей цифровых устройств, формирование прошивки на их основе и запуск с использованием отладочных плат ПЛИС Digilent Basys 2. Рассмотрим основные этапы создания проекта на примере модели 4-разрядного арифметико-логического устройства [1]
Рисунок 2 - Отладочная плата Digilent Basys 2
самой плате (см. рис. 2) или же доступны в документации на сайте производителя продукта.
Файл должен быть добавлен в дерево проекта, после этого его нужно открыть в редакторе и оставить только те строки, которые соответствуют используемым в проекте устройствам ввода/вывода, а строки для остальных устройств нужно или удалить или закомментировать (символ «#» в начале строки).
#basys.ucf
# Pin assignment for LEDs
K155IP3
Рисунок 1 - Четырехразрядное арифметико-логическое устройство
Предварительная настройка, подключение файла конфигурации. Настройки для отладочной платы ПЛИС Digilent Basys 2 включают следующие параметры :
Product Category: All Family: Spartain3E Device: XC3S250E Package: CP132 Speed: -5
Определение любого модуля начинается с перечисления его входов (input) и выходов (output). В модуле «wrapper» будет практически реализована работа 4-разрядного арифметико-логического устройства согласно ее таблицы состояний. Перед синтезом прошивки для платы ПЛИС отметим, что любая плата ПЛИС представляет из себя «черный ящик», «внутри» которого находится прошивка, синтезированная из программы на языке Verilog, а «снаружи» физические устройства ввода/вывода (на отладочной плате Digilent Basys 2 установлены переключатели (SW), кнопки (BTN) управления входными портами, светодиоды и дисплей для вывода информации и т.п.). Для того чтобы программа на языке Verilog получила возможность связаться с устройствами ввода/вывода определенной платы, нужен соответствующий механизм. Для этого в среде разработки Xilinx ISE используется инструмент специальных файлов конфигурации с расширением *.ucf (файл basys2.ucf).
Все устройства ввода/вывода на плате пронумерованы уникальными идентификаторами. На Digilent Basys 2 эти идентификаторы указаны на
NET "ld<7>" LOC = "g1"
NET "ld<6>" LOC = "p4"
NET "ld<5>" LOC = "n4"
NET "ld<4>" LOC = "n5"
NET "ld<3>" LOC = "p6"
NET "ld<2>" LOC = "p7"
NET "ld<1>" LOC = "m11"
NET "ld<0>" LOC = "m5"
NET "PS2 CLK" LOC = "B1
NET "PS2_DATA" LOC = "C3";
NET "CLK" LOC = "B8";
# Pin assignment for slide switches
NET "sw<7>" LOC = "n3"
NET "sw<6>" LOC = "e2"
NET "sw<5>" LOC = "f3"
NET "sw<4>" LOC = "g3"
NET "sw<3>" LOC = "b4"
NET "sw<2>" LOC = "k3"
NET "sw<1>" LOC = "l3"
NET "sw<0>" LOC = "p11
# Pin assignment for pushbutton switches
NET "btn<3>" LOC = "a7";
NET "btn<2>" LOC = "m4";
NET "btn<1>" LOC = "c11";
NET "btn<0>" LOC = "g12".
Создание модуля верхнего уровня для связи с устройствами ввода/вывода платы ПЛИС. Основная структурная единица дизайна на языке Verilog -это исполнительный модуль с набором входов и выходов. В рамках проекта можно «размещать» модули на одном уровне друг рядом с другом и подключать выходы одного модуля к входам другого. А еще можно поместить несколько модулей внутрь другого модуля более высокого уровня - тогда входы внешнего модуля будут подключены к входам внутренних модулей, а выходы внутренних модулей будут подключены к выходам внешнего модуля.
При данном вложенном размещении модулей должен быть один главный модуль самого верхнего уровня (top module), который будет содержать все
остальные модули дизаина вложенные один в другой. При синтезе проекта для ПЛИС в качестве такого модуля верхнего уровня (top module) выбирается модуль, входами и выходами которого являются реальные устройства ввода/вывода, доступные на плате, а внутри этого модуля размещены другие логические модули проекта (в нашем случае модуль работы АЛУ - «K155IP3» и вспомогательный модуль «Keyboard»).
Файлы вложенных модулей нужно также подключить к проекту (файлы с расширением *.vhd). Определяем входы и выходы с теми именами, которые указаны в файле basys2.ucf и направляем их в модуль «wrapper». Получаем следующий код: module wrapper(input CLK, input PS2_CLK, input PS2_DATA, input [7:0] sw, input [3:0] btn, output [7:0] ld); wire [9:0]KBD;
Keyboard Keyboard(.CLK(CLK), ■PS2_CLK(PS2_CLK), ■PS2_DATA(PS2_DATA), ■ KBD(KBD));
K155IP3 impl(.A0(sw[0]), .A1(sw[1]
• A2(sw[2]), ,A3(sw[3]),
• B0(sw[4]), .B1(sw[5]), .B2(sw[6]
• B3(sw[7]),
.S0(btn[0]), ,S1(btn[1]), ,S2(btn[2]
• S3(btn[3]),
• Cn(KBD[1]), .M(KBD[2]),
.F0(ld[0]), ,F1(ld[1]), ,F2(ld[2]
• F3(ld[3]),
• G(ld[4]), ,AB(ld[5]), ,P(ld[6]
• Cn4(ld[7]));
Endmodule
K155IP3 - имя исполнительного модуля; impl - указание исполнительно модуля внутри текущего проекта (может быть использован модуль на языке Verilog или VHDL), в скобках указывается ассоциирование параметров текущего модуля с параметрами внутреннего модуля.
Подача входных сигналов на данной плате осуществляется при помощи набора переключателей, обозначенных SW0 - SW7, четырех не фиксируемых кнопок BTN0 - BTN3, а также есть возможность задания входных импульсов с клавиатуры, на плате для этого предусмотрен разъем PS/2. Выходные сигналы поступают на светодиоды LD0 - LD7, светодиодную панель или на монитор через разъем VGA.
Для проектируемого устройства в качестве входных воздействий применяются блоки фиксированных переключателей sw [0..7], тактовых кнопок btn [0..3]. Результат выполнения операций АЛУ отображается светодиодными одиночными индикаторами ld [0..7]. Стандартного набора элементов управления не достаточно для реализации всех функций АЛУ, поэтому был разработан программируемый ps/2 интерфейс для подключения к плате клавиатуры (вспомогательный модуль «Keyboard»), будет рассмотрен далее.
Для синтеза прошивки ПЛИС необходимо в списке действий под деревом проекта выбрать элемент Generate Programming File, если синтез прошел без ошибок программный комплекс формирует bit-файл (wrapper.bit) с прошивкой.
Программирование платы ПЛИС Digilent Basys 2. Осуществляется по средствам программы Adept компании Digilent, поставляется в комплекте с отладочной платой Digilent Basys 2 (см. рис. 3). Данная отладочная плата включает в себя две программируемые микросхемы FPGA XC3S250E и PROM XCF02S.
Перед программированием необходимо подключить отладочную плату к ПК, переключить плату в режим «РС», осуществить удаление предыдущей прошивки и произвести программирование. В режиме «ROM» производиться непосредственная работа установленной прошивки.
Рисунок 3 - Диалоговое окно программы Adept
Для проверки работоспособности перед началом программирования необходимо выполнить установку тестовой прошивки для проверки всех органов управления платой (файл basys2userdemo250.bit) или использовать вложенную утилиту «Test» программы Adept [2,3,4,5].
Разработан программный интерфейс для отладочной платы ПЛИС семейства Xilinx, который позволяет взаимодействовать ПЛИС посредством PS/2-клавиатуры. Предусмотрено 2 режима работы клавиатуры: классический - нажатие на клавишу заносит сканкод в регистр и выводит его в 8-ми битную шину; специальный - содержит дешифратор, единичный код которого также выводится в шину.
Потребность создания интерфейса PS/2 для отладочной платы BASYS 2 SPARTAN-3E FPGA обусловлена недостаточным количеством встроенных органов ввода информации. Наиболее оптимальным методом ввода информации являются PS/2 клавиатуры, так как они очень доступны и имеют достаточное количество клавиш для любых задач. Данный программный модуль является универсальным, что позволяет встраивать его в любые ПЛИС с достаточным количеством логических элементов и настраивать в соответствии со своей топологией и компоновкой физических выводов микросхемы.
Принцип работы PS/2. Это последовательный интерфейс с тактовым сигналом 10-16 кГц. Этот протокол использует две линии передачи: тактовую (PS2 CLK) и данные (PS2 DATA).
Рисунок 4 - Контакты PS/2 порта 1 - линия данных; 2 - не используется; 3 - общий; 4 - питание; 5 - тактовый сигнал; 6 - не используется
Рисунок 5 - Временная диаграмма сигналов, посылаемых клавиатурой
Специфика протокола подразумевает, что стационарным состоянием для линий передачи данных является логическая единица. Поэтому в программе было заложено, что запись полученного бита и итерация счетчика будет происходить по заднему фронту тактового импульса: if (!PS2_CLK) begin read <= 1;
scan_code[COUNT] <= PS2_DATA; COUNT <= COUNT + 1;
end
Рисунок 6 - Клавиатуры с кодами, соответствующим клавишам
Как видно на рис. 5, по первому тактовому импульсу происходит считывание стартового бита; этот бит не несет никакой информации о нажатой клавише, а лишь свидетельствует о начале передачи. Последующие 8 бит (0 - 7) передают сканкод нажатой клавиши, далее следует бит четности (Р) и бит остановки передачи и переход в стационарный режим.
Рассмотрим пример нажатия клавиши «ESC», имеющей код 0x7 6 (коды представлены в шестнадцате-ричном виде). В таком случае диаграмма будет иметь следующий вид:
Рисунок 7 - Временная диаграмма сигналов, посылаемых клавиатурой при нажатой клавише «ESC»
При переводе сигнала в численный вид, получим 0b01101110, стоит обратить внимание, что биты, приходят в обратном порядке, поэтому для правильного положения битов в регистре ПЛИС нужно осуществлять запись, сначала в старший разряд, а потом уже в младшие. Таким образом, проинвер-тировав считанное бинарное значениче, получим 0b01110110, что соответствует шестнадцатерич-ному коду клавиши - 0x7 6. По отпусканию любой клавиши клавиатура также посылает сканкод 0xF0. Разработка велась на высокоуровневом языке Verilog при помощи набора инструментов Xilinx ISE.
Изначально определили периферию модуля: тактовый вход модуля, необходимый для функционирования счетчиков (CLK); тактовый вход клавиатуры (PS2_CLK); данные (PS2_DATA); выходная информационная шина, разрядностью 10 бит (KBD): module Keyboard(input CLK, input PS2_CLK, input PS2_DATA, output reg [9:0] KBD);
Рассмотрим логику работы блоков always программы:
always @(posedge CLK) begin if (DOWNCOUNTER < 24 9) begin DOWNCOUNTER<=DOWNCOUNTER+ 1; TRIGGER <= 0; end
else begin DOWNCOUNTER <= 0; TRIGGER <= 1; end end
Данный блок срабатывает по сигналу CLK и делит его частоту 250 раз. Такой подход позволяет сэкономить на выделяемой памяти для регистра count_reading, речь о котором пойдет в следующем блоке:
always @(posedge CLK) begin if (TRIGGER) begin if (read)
count_reading<= count_reading + 1; else
count_reading <= 0;
end end
Оператор count_reading итерируется всякий раз, когда флаги read и TRIGGER имеют истинное значение. Иными словами этот регистр выполняет функцию счетчика, который определяет время, за которое сканкод должен быть получен в полном размере. Рассмотрим блок, в котором осуществляется считывание сканкода нажатой клавиши: if (PS2_CLK != PREVIOUS_STATE) begin if (!PS2_CLK) begin read <= 1;
scan_code[COUNT] <= PS2_DATA; COUNT <= COUNT + 1;
end end
Для того чтобы исключить повторное считывание одного и того же бита была введена переменная PREVIOUS_STATE, содержащая состояние предыдущего значения PS2_CLK. Далее по спаду PS2_CLK происходит считывание PS2_DATA и занос в регистр scan_code соответствующего значения, else if (COUNT == 11) begin COUNT <= 0; read <= 0; TRIG_ARR <= 1; end
Как только счетчик данных досчитал до 11 (1 бит старта + 8 бит данных + 1 бит четности + 1 бит завершения пакета), происходит его обнуление и перевод флага TRIG_ARR в истинное положение, обозначающее, что пакет получен полностью, else begin
TRIG_ARR <= 0; if (COUNT < 11 &&
count_reading >= 4000) begin COUNT <= 0; read <= 0; end end
Если по окончанию пакета импульсов PS2_CLK программе по какой-то причине не удалось считать пакет полностью за отведенное время, то происходит сброс счетчика и цикл считывания начинается заново.
В последнем блоке сделан вывод данных в шину и переключение режима:
if(scan_code[8:1] != 8'hF0) CODEWORD <= scan_code[8:1];
Пока клавиша не отпущена, происходит перезапись регистра scan_code в буффер CODEWORD.
По отпусканию клавиши происходит проверка являлась ли нажатая клавиша Num Lock (ей соответствует код 0x77), этак клавиша переводит клавиатуру из специального режима в классический и наоборот. Переменная, отвечающая за выбор режима - numlock:
if(scan_code[8:1] == 8'hF0) begin
if(CODEWORD == 8'h7 7) begin numlock = -numlock; KBD = 0; kbd_reg <= 0;
- классическим;
специальный; begin
8'h77) begin
end numlock = 1 numlock = 0 if(numlock) if(CODEWORD KBD = CODEWORD; end end
В случае выбора классического режима - в шину записывается сканкод, ранее занесенный в регистр CODEWORD.
if(!numlock) begin if(CODEWORD == 8'h45) begin kbd_reg[0] <= ~kbd_reg[0]; KBD[0] =
~kbd_reg[0]; end
В случае выбора специального режима, в работу подключается дешифратор, который выводит единичный код, зависимый от сканкода клавиш цифровой клавиатуры.
Соединим PS/2 модуль с одним из результатов выполненной работы, с модулем 4-разрядного АЛУ. Изначально определим выводы, которые в следствии будут привязаны к физическим портам устройства: module wrapper( input CLK, input PS2_CLK, input PS2_DATA, input [7:0] sw,
input [3:0] btn, output [7:0] ld); wire [9:0]KBD; Таким образом, все входные сигналы будут подключены к PS/2 модулю, выходная шина ld к модулю, а виртуальный провод KBD будет связующим звеном между модулями:
Keyboard Keyboard(.CLK(CLK),
•PS2_CLK(PS2_CLK),
•PS2_DATA(PS2_DATA),
• KBD(KBD));
K155IP3 impl(.A0(sw[0]),
• A2(sw[2]), ,A3(sw[3]),
• B0(sw[4]),
• B3(sw[7]),
.S0(btn[0]),
• S3(btn[3]),
•M(KBD[2]),
• F1(ld[1]),
• B1(sw[5]),
• S1(btn[1]),
• A1(sw[1] ■ B2(sw[6] . S2(btn[2]
■Cn(KBD[1]), .F0(ld[0]),
• F3(ld[3]),
• G(ld[4]),
• Cn4(ld[7]));
endmodule
,AB(ld[5]),
• F2(ld[2] • P(ld[6]
В данном 4-разрядном АЛУ для формирования входных операндов использованы переключатели sw (Ао - Э"№[0], А1 - sw[1], А2 - Аз - З"№[3],
Во - [4], В1 - Э"№[5], В2 - sw[6], Вз - Э"№[3]), выбор режима работы осуществляется тактовыми кнопками Ь"Ьп (Бо- Ь"Ьп [0], Б1- Ь"Ьп [1], Б2- Ь"Ьп [2], Бз- Ь"Ьп [3]), результат выполнения операции, а также вспомогательные выходы АЛУ отображаются на светодиодах Ы (F0-ld[0], F1-ld[1], F2-ld[2], F3-ld[3], Сn4-ld[7] ит.д.). Подключаемая клавиатура предназначена для установки сигнала переноса (Сп - kbd[1], Сп=0 - с переносом, Сп=1 - без переноса) и переключения типа выполняемых операций (М - kЬd[2], М=0 - арифметические операции, М=1 - логические операции).
wrapper
Рисунок 8 - Структура основного модуля программы управления ПЛИС для 4-разрядного арифметико-логического устройства
Заключение. В итоге получена программа управления отладочной платой с реализованным блоком арифметико-логического устройства. На базе ПЛИС реализован подход логической эмуляции при проектировании цифровых устройств. Применение ПЛИС дает возможность получения легко изменяемых систем для работы с реальными сигналами и частотами их изменения, что дает широкий спектр возможности отладки устройства, дополняет результаты программного моделирования. Полученный прототип цифрового устройства имеет возможность управления, как востренными инструментами платы, так и подключаемой клавиатурой, что в свою очередь увеличивает количество потенциально возможных задаваемых входных сигналов.
ЛИТЕРАТУРА
1. Угрюмов, Е.П. Цифровая схемотехника: учеб. пособие / Е.П. Угрюмов. - 2-е изд., перераб. и доп. - СПб. : БХВ-Петербург, 2004. - 800 с.
2. Пирогов А.А. Проектирование интегральных схем и их функциональных узлов: учеб. пособие: учеб. пособие / А.А. Пирогов. - Воронеж: ФГБОУ ВПО «Воронежский государственный технический университет», 2014. - 84 с.
3. Солонина, А.И. Основы цифровой обработки сигналов: учеб. пособие / А.И. Солонина, Д.А. Ухла-дович, С.М. Арбузов, Е.Б. Соловьева. - СПб. : БХВ-Петербург, 2005. - 768 с.
4. Волошин Е. В. Анализ времени считывания измерительной информации с теплосчетчиков по технологиям CSD и GPRS/EDGE сотовой сети GSM.: Сборник трудов ежегодного симпозиума «Надежность и качество 2017» г.Пенза, 2017.
5. Мишанов Р. О. Исследование признаков, видов, причин и механизмов отказов микросхем, выполненных по КМОП-технологии.: Сборник трудов ежегодного симпозиума «Надежность и качество 2017» г.Пенза, 2017.
УДК 519.248
Зьрянов Ю.Т., Муромцев Д.Ю., Грибков А.Н.
ФГБОУ ВО «Тамбовский государственный технический университет», Тамбов, Россия
ВЕРОЯТНОСТНОЕ ОПИСАНИЕ ПОТОКОВ ОДНОРОДНЫХ СОБЫТИЙ ДЛЯ ОЦЕНКИ НАДЕЖНОСТИ СИСТЕМ ЭНЕРГОСБЕРЕГАЮЩЕГО УПРАВЛЕНИЯ
Рассмотрены теоретические и практические аспекты вероятностного описания потоков однородных событий, применяемых в задачах оценки надежности систем энергосберегающего управления технологическими объектами, работающих в реальном масштабе времени. Показаны дифференциальные уравнения для потоков событий и приведено их решение. Выполнена модификация вероятностного описания простейшего пуассоновского потока событий, на основе которой получены еще два распределения вероятностей для потоков событий, обладающих свойствами ординарности, стационарности и отсутствия последействия. Получены выражения для законов распределения времени появления к-го события и их основных числовых характеристик. Показано, что полученные распределения для потоков событий можно различать по значениям математического ожидания и дисперсии, а также по величине коэффициента, представляющим собой отношение третьего центрального момента к дисперсии.