Четверг, 02.05.2024, 11:27
Приветствую Вас Гость | RSS

ЧЕСТНЫЕ ДИПЛОМЫ готовые и на заказ

Форма входа

Каталог дипломов

Главная » Статьи » Радиоэлектроника и схемотехника » Диплом

21040 Счетное устройство видеоимпульсов на ПЛИС

Счетное устройство видеоимпульсов на ПЛИС
содержание
Введение 3
1 Актуальность темы 3
2 Цели и задачи 5
3 Анализ задания и выбор платформы 5
1. Составление схемы устройства 7
2. Выбор элементов 9
2.1 Выбор ПЛИС. Описание внутренней структуры ПЛИС 9
2.2 Компаратор 13
2.3 Генератор тактовой частоты 15
2.4 Индикатор 16
2.4.1 Описание контроллера HD44780 17
2.4.2 Подключение ЖКИ-модуля 18
2.4.3 Программирование и управление ЖКИ-модуля: 25
2.5 Стабилизаторы 32
2.5 Программатор ByteBlaster 34
2.6 Сборка устройства 35
3. Конфигурирование ПЛИС 36
3.1 Система проектирования MAX+plus II 36
3.2 Описание программы конфигурации ПЛИС 36
3.2.1 Антидребезговая система (antibounce) 37
3.2.1,1 Встроенная макрофункция – счетчик lpm_counter 38
3.2.2 Двоичо-десятичный счетчик (counter10) 40
3.2.3 Устройство управлением индикатора (wh1602LCD) 41
3.2.3,1 Машина конечных автоматов 42
3.2.4 Делитель тактовой частоты для работы индикатора(divFreq) 46
3.2.5 Общая структура программы 46
Заключение 47
Литература 48
Приложение 1 (Принципиальная схема устройства) 49
Приложение 2 (Список портов ввода вывода ПЛИС epm 3256a) 50
Приложение 3 (Текст программы) 51

Введение
1 Актуальность темы
Реальная перспектива использования человеком огромных энергий, скрытых в недрах атома, появилась впервые в 1939 году. На сегодняшний день широ-кое практическое применение получают различного рода ядерные излучения, несмотря на то, что они опасны для организма человека и в то же время неощущаемы, поэтому для обнаружения и измерения ядерных излучений необходимы специальные приборы.
Основной частью приборов для регистрации ядерных излучений является элемент, воспринимающий излучения, - детектор излучения. Для этой цели используются счетчики разных типов, позволяющие зарегистрировать по-павшую в него частицу в виде кратковременного электрического тока – импульса. Наиболее широкое применение имеют газоразрядные счетчики, работа которых основана на ионизирующем действии ядерного излучения. Постепенно их начинают вытеснять сцинтилляционные счетчики (СС), действие которых основано на регистрации вспышек света, возникающих в некоторых веществах под ударами частиц. Основными элементами такого счетчика являются вещество, люминесцирующее под действием заряженных частиц (сцинтиллятор), и фотоэлектронный умножитель (ФЭУ). В начале 20 века визуальные наблюдения световых вспышек (сцинтилляций) под действием ионизирующих частиц (-частиц, осколков деления ядер) были основным методом ядерной физики. Позднее СС был полностью вытеснен.
Его возвращение в ядерную физику произошло в конце 40-х гг., когда для регистрации сцинтилляций были использованы многокаскадные ФЭУ с боль-шим коэффициентом усиления, способные зарегистрировать чрезвычайно слабые световые вспышки. Принцип действия СС состоит в следующем: за-ряженная частица, проходя через сцинтиллятор, наряду с ионизацией атомов и молекул возбуждает их. Возвращаясь в невозбуждённое (основное) состояние, атомы испускают фотоны (Люминесценция). Фотоны, попадая на катод ФЭУ, выбивают электроны (Фотоэлектронная эмиссия), в результате чего на аноде ФЭУ возникает электрический импульс, который далее усиливается и регистрируется. Детектирование нейтральных частиц (нейтронов, -квантов) происходит по вторичным заряженным частицам, образующимся при взаимодействии нейтронов и -квантов с атомами сцинтиллятора.
Для того чтобы световая вспышка была зарегистрирована ФЭУ, необходимо, чтобы спектр излучения сцинтиллятора совпадал со спектральной областью чувствительности фотокатода ФЭУ, а материал сцинтиллятора был прозрачен для собственного излучения. Для регистрации «медленных нейтронов» в сцинтиллятор добавляют Li или В. Для регистрации «быстрых нейтронов» используются водородсодержащие сцинтилляторы. Для спектрометрии -квантов и электронов высокой энергии используют Nal (Tl), обладающий большой плотностью и высоким эффективным атомным номером.
ФЭУ, предназначенные для СС, должны обладать высокой эффективно-стью фотокатода (до 2,5%), высоким коэффициентом усиления (108—108), малым временем собирания электронов (~ 10–8 сек), при высокой стабильно-сти этого времени. Последнее позволяет достичь разрешающей способности по времени СС 10–9 сек. Высокий коэффициент усиления ФЭУ наряду с малым уровнем собственных шумов делает возможной регистрацию отдельных электронов, выбитых с фотокатода. Сигнал на аноде ФЭУ может достигать 100 В в виде импульсов трапециевидной формы (видеоимпульсов).
Чтобы не только обнаружить ядерное излучение, но и измерить его интенсив-ность, недостаточно одного детектора излучения. Необходимы еще электрон-ные устройства, подсчитывающие число электрических импульсов, то есть число попавших в детектор частиц, и устройства, показывающие результат подсчета [1].
Данная работа посвящена разработке электронного устройства считающего число электрических импульсов.


2 Цели и задачи
1. Необходимо реализовать счетное устройство апериодических видеоим-пульсов с заданными параметрами:
• Диапазон изменения амплитуды входного сигнала 5…20В;
• Длительность импульса τ, не менее 10 нс;
• Минимальный интервал между импульсами , 10 мкс.
2. Для отображения счета необходимо наличие индикатора. Реализовать индикатор, на котором высвечивается число импульсов в непрерывном ре-жиме счета через некоторый промежуток времени.
3. Управление устройством осуществляется посредством кнопок: старт/стоп – (начало счета/конец счета), сброс – (сброс счетчика).
3 Анализ задания и выбор платформы
Конечно, реализовать простой счетчик на дискретных элементах (тригге-рах), что может быть проще? Однако сложность заключается в том, что разработка счетчика на дискретных элементах потребует сложной настройки, что увеличит время разработки и цену устройства. Для моих целей нужен высокоскоростной счетчик. Реализовать его нужно на современной элементной базе. Платформы, на которых можно реализовать счетчик, на сегодняшний день нашлось две ПЛИС и микроконтроллеры, был сделан выбор в пользу первой, то есть ПЛИС так как она легче поддается функциональным изменениям (в дальнейшем это устройство может быть использовано в других целях) и тактовая частота обработки сигнала не фиксирована как у микроконтроллера, её можно задавать аппаратно и делить её в зависимости от необходимости. Итак ПЛИС (Программируемая Логическая Интегральная Схема ).
Из наиболее известных производителей ПЛИС следует отметить фирму Al-tera. Небольшая, вначале, компания удачно решила задачи стоящие перед ними в начале (определить элементарные базис ПЛИС, разработать математические методы синтеза устройств в выбранном базисе, создать интегрированную систему проектирования цифровых устройств на ПЛИС), путем постепенного согласованного усложнения элементной базы и средств проектирования. Ее успех ко второй половине 90-х годов вывели её в число основных производства микросхем ПЛИС.
Была выбрана ПЛИС семейства MAX 3000 EPM3256A
Тип микросхе-мы Выходы I/O Триггеры Ячейки Мах частота MHz
EPM3032A 4 30 32 32 192
EPM3064A 4 30
62 64 64 192
EPM3128A 4 76
92 128 128 182
EPM3256A 4 112
154 256 256 156
Технология EEPROM обеспечивает сохранение конфигурации при отключе-нии питания. Число логических эквивалентных вентилей ПЛИС находится в диапазоне 600-5000, количество программируемых пользователем выводов 44-208. Микросхемы могут быть запрограммированы с помощью программатора, в этом случае можно использовать все линии Ввода/Вывода (I /O). Кроме того, все ПЛИС имеют возможность внутрисистемного программирования (in-system programmability) через порт типа JTAG с использованием устройств типа BitBlaster, ByteBlaster и MasterBlaster, тогда 4 порта JTAG резервируются для этой цели. Выводы имеют возможность эмуляции режимов открытого коллектора и третьего (высокоимпедансного) состояния [2].

1. Составление схемы устройства
Входной сигнал, подаваемый на счетное устройство, представляет собой случайные трапецвидные импульсы разной амплитуды и длительности. Обнаружения импульсов производиться по амплитуде, для этого необходим компаратор. Сигнал с выхода компаратора подается на цифровую микросхему (ПЛИС), работающую с TTL уровнями, т.е. логический ноль 0.8...1.6 В логическая единица 1.65...2.0 В.
Для счета количества импульсов, поступаемых с компаратора, необходим счетчик. Счетчик планируется реализовать на ПЛИС.
Еще понадобиться индикатор, который будет отображать число этих импульсов. Целесообразно выбрать LCD индикатор со встроенным контроллером TTL логики, для облегчения работы, и напряжением питания +5В.
Генератор тактовой частоты необходимо выбрать исходя их следующих критериев: максимальная частота определяется скоростью работы ПЛИС, минимальная частота определяется минимальным интервалом между импульсами входного сигнала. Следовательно, интервал частот будет в пределах от 10 МГц до 150 МГц.
Источник питания: Проще всего решить проблему питания, взять готовый источник от персонального компьютера, но он имеет широкий диапазон выходных токов, с выходными напряжениями +5В, -5В, +12В, -12В. Для питания счетного устройства выберем напряжение +12В. В самом устройстве установим интегральные стабилизаторы для питания ПЛИС +3.3В, а для питания компаратора, генератора тактовой частоты и индикатора +5В.
Управление устройством осуществляется с помощью двух кнопок, следова-тельно, необходимо антидребезговое устройство, которое можно реализовать на ПЛИС.
На конец мне нужен программатор ByteBlaster для программирования (про-шивки) ПЛИС.
Структурная схема изображена на рис. 1.1.

Рис 1.1 Структурная схема устройства

2. Выбор элементов
2.1 Выбор ПЛИС. Описание внутренней структуры ПЛИС
Основными элементами структуры ПЛИС семейства MAX3000 являются:
• логические блоки (ЛБ, LAB, Logic Array Blocks);
• макроячейки (МЯ, macrocells);
• логические расширители (expanders), параллельный (parallel) и разделяемый (shareable);
• программируемая матрица соединений (ПМС, Programmable Intercon-nect Array, PIA);
• элементы ввода/вывода (ЭВВ, I/Ocontrol block).

Рис 2.1.1 Функциональная схема ПЛИС семейства MAX3000
ПЛИС семейства MAX3000 имеют четыре вывода, закрепленных за глобаль-ными цепями (dedicated inputs). Это глобальные цепи синхронизации сброса и установки в третье состояние каждой макроячейки. Кроме того, эти выводы можно ис¬пользовать как входы или выходы пользователя для «быстрых» сигна¬лов, обрабатываемых в ПЛИС.
Как видно из рис 2.1.1, в основе архитектуры ПЛИС семейства МАХ3000 лежат логические блоки, состоящие из 16 макроячеек каж¬дый. Логические блоки соединя¬ются с помощью программируемой матрицы соединений (ПМС). Каждый логи¬ческий блок имеет 36 входов с ПМС.
На рис 2.1.2 приведена структурная схема макроячейки ПЛИС семейства MAX3000. Макроячейка ПЛИС семейства MAX3000 со¬стоит из трех основ-ных узлов:
• локальной программируемой матрицы (LAB local array);
• матрицы распределения термов(product-term select matrix);
• программируемого регистра (programmable register).
Комбинационные функции реализуются на локальной программируемой матрице и матрице распределения термов, позволяющей объединять логические произведения либо по ИЛИ (OR), либо по исключающему ИЛИ (XOR). Кроме того, матрица распределения термов позволяет скоммутировать цепи управления триггером макроячейки.
Режим тактирования и конфигу¬рация триггера выбираются автоматически во время синтеза проекта в САПР Max+Plus II в зависимости от выбранного разработчиком типа триггера при описании проекта.
В ПЛИС семейства MAX 3000 до¬ступно 2 глобальных тактовых сигнала, что позволяет проектировать схемы с двухфазной синхронизацией.
Для реализации логических функций большого числа переменных использу-ются логические расширители.

Рис 2.1.2 Структурная схема макроячейки ПЛИС
Разделяемый логический расширитель (рис.2.1.3) позволяет реализовать логическую функцию с большим числом входов, предоставляя возможность объединить макроячейки, входящие в состав одного логического блока. Таким образом, разделяемый расширитель формирует терм, инверсное значение которого передается матрицей распределения термов в локальную программируемую матрицу и может быть использовано в любой макроячейки данного логического блока. Как видно из рис.2.1.3, имеется 36 сигналов локальной ПМС, а также 16 инверсных сигналов с разделяемых логических расширителей, что позволяет в пределах одного логического блока реализовать функцию до 52 термов ранга 1.

Рис 2.1.3 Разделяемый логический расширитель
Параллельный логический расширитель (рис. 2.1.4) позволяет использовать локальные матрицы смежных макроячеек для реализации функций, в кото-рые входят более 5 термов. Одна цепочка параллельных расширителей может включать до 4 макроячейки, реализуя функцию 20 термов. Компилятор системы Max+Plus II поддерживает размещение до 3-х наборов не более 5 параллельных расширителей в каждом.

Рис 2.1.4 Параллельный логический расширитель
На рис. 2.1.5 приведена структура программируемой матрицы соединений.
На ПМС выводятся сигналы от всех возможных источников: элементов ввода-вывода, сигналов обратной связи логического блока, специализированных выделенных выводов. В процессе программирования только необходимые сигналы «заводятся» на каждый логический блок.

Рис 2.1.5 Структура ПМС ПЛИС семейства МАХ3000
На рис 2.1.6 приведена схема элемента ввода-вывода (ЭВВ) ПЛИС семейства MAX3000. ЭВВ позволяет организовать режимы работы с открытым коллектором и третьим состоянием.

Рис 2.1.6 Элемент ввода вывода
Выберем микросхему ПЛИС семейства MAX3000 – EPM3265ACT144. Дан-ная микросхема является недорогой, содержит достаточное количество мак-роячеек (256), удовлетворяет параметрам по быстродействию (максимум 156 МГц). Единственная сложность, микросхема имеет большое количество вы-водов при маленькой площади, что существенно усложняет ее монтаж [3][4].
2.2 Компаратор
Компаратор сравнивает сигнал с опорным напряжением и оставляет только импульсы с заданной амплитудой. Выходной сигнал компаратора должен быть в виде TTL уровня. В соответствии с заданными характеристиками был выбран компаратор фирмы Analog Devices AD8561.

……………………………………………………………………..
……………………………………………………………………..
……………………………………………………………………..

---------
Литература
1. Корсунский М.И. «Атомное ядро» - М.: Гостехиздат, 2007.
2. Бродин В.Б., Калинин А.В., «Системы на микроконтролерах и БИС программируемой логики» - М.: Эконом, 2002.
3. Вицын Н. «Современные тенденции развития систем автоматизированного проектирования в области электроники» // Chip News, № 1, 2007. С. 12–15.
4. Губанов Д. А., Стешенко В. Б., Храпов В. Ю., Шипулин С. Н. «Перспективы реализации алгоритмов цифровой фильтрации на основе ПЛИС фирмы ALTERA» // Chip News, № 9–10, 2006, с. 26–33.
5. Тех. Док. «One Technology Way, P.O. Box9106, Norwood, MA 02062-9106, U.S.A.», http://www.analog.com
6. LCD Controller/Driver LSI. Data Book. © 2004 Hitachi America Ltd.
7. «Алфавитно-цифровые индицирующие ЖК-модули фирмы Powertip.» Каталог, 1-е издание, © 2002 КТЦ-МК.
8. Микросхема: СЕ110. Техническое описание, 1-е издание, © 2007 КТЦ-МК,
9. Микросхема: DB-CE110. Техническое описание, 1-е издание, © 2007 КТЦ-МК.
10. Тех. Док.«MC78TXX», Fairchild Semiconductor Corporation, 2002, http://www.fairchildsemi.com
11. Тех. Док. «LMS1585A», National Semiconductor Corporation, April, 2000, http://www.national.com, Email: europ.support@nsc.com
12. Тех. Док. «ByteBlasterMV Parallel Port Download Cable» Altera Corporation, July, 2002, Version 3.3


Приложение 1 (Принципиальная схема устройства)


Приложение 2 (Список портов ввода вывода ПЛИС epm 3256a)

Приложение 3 (Текст программы)
--Антидребезговая система
INCLUDE “LPM_COUNTER“;
CONSTANT DELAY = 6;
SUBDESIGN ANTIBOUNCE
(
IN : INPUT;
CLK : INPUT;
OUT : OUTPUT;
)
VARIABLE
CT : LPM_COUNTER WITH(LPM_WIDTH=DELAY);
TRIG : DFF;
BEGIN
TRIG.D = !IN;
CT.ACLR = !(!IN $ TRIG.Q);
CT.CLOCK = CLK;
TRIG.CLK=CT.Q[DELAY-1];
OUT = !TRIG.Q;
END;
--Десятичнодвоичный счетчик
CONSTANT DIGITS = 6;
INCLUDE “LPM_COUNTER“;
SUBDESIGN COUNTER10
(
-- входные данные
CLOCK : INPUT;
ACLR : INPUT;
COUNT_ENA : INPUT;
-- выход
Q[DIGITS-1..0][3..0] : OUTPUT;
)

VARIABLE
RESET[DIGITS-1..0] : NODE;
COUNTER[DIGITS-1..0] : LPM_COUNTER WITH (LPM_WIDTH=4);
BEGIN
IF COUNTER[0].Q[3..0]==B“1010“ THEN RESET[0]=vcc; ELSE RESET[0]=gnd; END IF;
IF COUNTER[1].Q[3..0]==B“1010“ THEN RESET[1]=vcc; ELSE RESET[1]=gnd; END IF;
IF COUNTER[2].Q[3..0]==B“1010“ THEN RESET[2]=vcc; ELSE RESET[2]=gnd; END IF;
IF COUNTER[3].Q[3..0]==B“1010“ THEN RESET[3]=vcc; ELSE RESET[3]=gnd; END IF;
IF COUNTER[4].Q[3..0]==B“1010“ THEN RESET[4]=vcc; ELSE RESET[4]=gnd; END IF;
IF COUNTER[5].Q[3..0]==B“1010“ THEN RESET[5]=vcc; ELSE RESET[5]=gnd; END IF;
COUNTER[0].clock=clock;
COUNTER[DIGITS-1..1].clock=RESET[DIGITS-2..0];
Q[DIGITS-1..0][3..0]=COUNTER[DIGITS-1..0].Q[3..0];
COUNTER[DIGITS-1..0].aclr=RESET[DIGITS-1..0]#aclr;
COUNTER[0].cnt_en=COUNT_ENA;
END;
--Устройство управления индикатором
CONSTANT DATA_WITH = 8;

INCLUDE “LPM_COUNTER“;
SUBDESIGN WH1602
(
CLK : INPUT;
IN[5..0][DATA_WITH-1..0] : INPUT;
D[DATA_WITH-1..0] : BIDIR;
E : OUTPUT;
RW : OUTPUT;
RS : OUTPUT;
)
VARIABLE
clk_a : NODE;
Ddff[DATA_WITH-1..0] : dff;
Din[DATA_WITH-1..0] : dff;
Dmsh[DATA_WITH-1..0] : NODE;
_RW : NODE;
_RS : NODE;
Eena : NODE;
Pause : LPM_COUNTER WITH (LPM_WIDTH=9);
STR : LPM_COUNTER WITH (LPM_WIDTH=4);
LINE[DATA_WITH-1..0] : NODE;
ST : MACHINE
WITH STATES ( z0, p1, r1, p2, r2, p3, r3, p4,
r4, b4, c4, r5, b5, c5, r6, b6, c6, r7, b7, c7, r8, b8, c8,
ds, bs, cs, dz0, bz0, cz0, dz1, bz1, cz1 );
Dtri[DATA_WITH-1..0] : TRI;
OE : NODE;
INC[3..0] : NODE;
INBUF[5..0][DATA_WITH-1..0] : DFF;
READ : DFF;

BEGIN
clk_a = dff(!clk_a, clk, vcc, vcc);
Pause.clock = clk_a;
-- outputs
Ddff[DATA_WITH-1..0].d = Dmsh[DATA_WITH-1..0];
Ddff[DATA_WITH-1..0].clk = !clk_a;
Dtri[DATA_WITH-1..0].in = Ddff[DATA_WITH-1..0].q;
D[DATA_WITH-1..0] = Dtri[DATA_WITH-1..0].out;
Din[DATA_WITH-1..0].d = D[DATA_WITH-1..0];
Din[DATA_WITH-1..0].clk = !dff (clk_a & Eena , clk, vcc, vcc);
Dtri[DATA_WITH-1..0].oe = dff (OE, !clk_a, vcc, vcc);

RW = dff (_RW, !clk_a, vcc, vcc);
RS = dff (_RS, !clk_a, vcc, vcc);
E = dff (clk_a & Eena , clk, vcc, vcc);
-- machine
ST.clk = clk_a;
CASE ST IS
WHEN z0 =>
Dmsh[DATA_WITH-1..0] = H“FF“; OE = vcc;
Eena = gnd; _RW = gnd; _RS = gnd; Pause.aclr = vcc;
ST = p1;
-- загрузка индикатора после включения питания
-- пауза перед включением 21мс
WHEN p1 =>
Dmsh[DATA_WITH-1..0] = H“38“; OE = vcc;
Eena = gnd; _RW = gnd; _RS = gnd; Pause.aclr = gnd;
IF Pause.q[]==200 THEN ST = r1; ELSE ST = p1; END IF;
-- INITIAL SETTING ONCE 00111000
WHEN r1 =>
Dmsh[DATA_WITH-1..0] = H“38“; OE = vcc;
Eena = vcc; _RW = gnd; _RS = gnd; Pause.aclr = vcc;
ST = p2;
-- пауза 7 мс > 4.1 мс
WHEN p2 =>
Dmsh[DATA_WITH-1..0] = H“38“; OE = vcc;
Eena = gnd; _RW = gnd; _RS = gnd; Pause.aclr = gnd;
IF Pause.q[]==100 THEN ST = r2; ELSE ST = p2; END IF;
-- INITIAL SETTING TWICE 00111000
WHEN r2 =>
Dmsh[DATA_WITH-1..0] = H“38“; OE = vcc;
Eena = vcc; _RW = gnd; _RS = gnd; Pause.aclr = vcc;
ST = p3;
-- пауза 0.7 мс > 0.1 мс
WHEN p3 =>
Dmsh[DATA_WITH-1..0] = H“38“; OE = vcc;
Eena = gnd; _RW = gnd; _RS = gnd; Pause.aclr = gnd;
IF Pause.q[]==10 THEN ST = r3; ELSE ST = p3; END IF;
-- INITIAL SETTING THIRD 00111000
WHEN r3 =>
Dmsh[DATA_WITH-1..0] = H“38“; OE = vcc;
Eena = vcc; _RW = gnd; _RS = gnd; Pause.aclr = vcc;
ST = p4;
-- пауза 0.7 мс > 0.1 мс
WHEN p4 =>
Dmsh[DATA_WITH-1..0] = H“38“; OE = vcc;
Eena = gnd; _RW = gnd; _RS = gnd; Pause.aclr = gnd;
IF Pause.q[]==10 THEN ST = r4; ELSE ST = p4; END IF;
-- Function Set 0011NF**
WHEN r4 =>
Dmsh[DATA_WITH-1..0] = H“3C“; OE = vcc;
Eena = vcc; _RW = gnd; _RS = gnd; Pause.aclr = vcc;
ST = b4;
WHEN b4 =>
Dmsh[DATA_WITH-1..0] = H“00“; OE = gnd;
Eena = vcc; _RW = vcc; _RS = gnd; Pause.aclr = vcc;
ST = c4;
WHEN c4 =>
Dmsh[DATA_WITH-1..0] = H“00“; OE = gnd;
Eena = gnd; _RW = vcc; _RS = gnd; Pause.aclr = gnd;
IF Din[DATA_WITH-1].q==0 THEN ST = r5; ELSE ST = b4; END IF;
-- Display ON/OFF = 00001DCB, Display ON,Cursor&Blink OFF
WHEN r5 =>
Dmsh[DATA_WITH-1..0] = H“0C“; OE = vcc;
Eena = vcc; _RW = gnd; _RS = gnd; Pause.aclr = vcc;
ST = b5;
WHEN b5 =>
Dmsh[DATA_WITH-1..0] = H“00“; OE = gnd;
Eena = vcc; _RW = vcc; _RS = gnd; Pause.aclr = vcc;
ST = c5;
WHEN c5 =>
Dmsh[DATA_WITH-1..0] = H“00“; OE = gnd;
Eena = gnd; _RW = vcc; _RS = gnd; Pause.aclr = gnd;
IF Din[DATA_WITH-1].q==0 THEN ST = r6; ELSE ST = b5; END IF;
-- Entry Mode Set = 000001IS, Increment & Shift OFF
WHEN r6 =>
Dmsh[DATA_WITH-1..0] = H“06“; OE = vcc;
Eena = vcc; _RW = gnd; _RS = gnd; Pause.aclr = vcc;
ST = b6;
WHEN b6 =>
Dmsh[DATA_WITH-1..0] = H“00“; OE = gnd;
Eena = vcc; _RW = vcc; _RS = gnd; Pause.aclr = vcc;
ST = c6;
WHEN c6 =>
Dmsh[DATA_WITH-1..0] = H“00“; OE = gnd;
Eena = gnd; _RW = vcc; _RS = gnd; Pause.aclr = gnd;
IF Din[DATA_WITH-1].q==0 THEN ST = r7; ELSE ST = b6; END IF;
-- Return Home
WHEN r7 =>
Dmsh[DATA_WITH-1..0] = H“02“; OE = vcc;
Eena = vcc; _RW = gnd; _RS = gnd; Pause.aclr = vcc;
ST = b7;
WHEN b7 =>
Dmsh[DATA_WITH-1..0] = H“00“; OE = gnd;
Eena = vcc; _RW = vcc; _RS = gnd; Pause.aclr = vcc;
ST = c7;
WHEN c7 =>
Dmsh[DATA_WITH-1..0] = H“00“; OE = gnd;
Eena = gnd; _RW = vcc; _RS = gnd; Pause.aclr = gnd;
IF Din[DATA_WITH-1].q==0 THEN ST = r8; ELSE ST = b7; END IF;
-- Clear Display
WHEN r8 =>
Dmsh[DATA_WITH-1..0] = H“01“; OE = vcc;
Eena = vcc; _RW = gnd; _RS = gnd; Pause.aclr = vcc;
ST = b8;
WHEN b8 =>
Dmsh[DATA_WITH-1..0] = H“00“; OE = gnd;
Eena = vcc; _RW = vcc; _RS = gnd; Pause.aclr = vcc;
ST = c8;
WHEN c8 =>
Dmsh[DATA_WITH-1..0] = H“00“; OE = gnd;
Eena = gnd; _RW = vcc; _RS = gnd; Pause.aclr = gnd;
IF Din[DATA_WITH-1].q==0 THEN ST = ds; ELSE ST = b8; END IF;
--формирование изображения
WHEN ds =>
Dmsh[DATA_WITH-1..0] = LINE[]; OE = vcc;
Eena = vcc; RW = gnd; _RS = vcc; Pause.aclr = vcc;
ST = bs;
WHEN bs =>
Dmsh[DATA_WITH-1..0] = H“00“; OE = gnd;
Eena = vcc; _RW = vcc; _RS = gnd; Pause.aclr = vcc;
ST = cs;
WHEN cs =>
Dmsh[DATA_WITH-1..0] = H“00“; OE = gnd;
Eena = gnd; _RW = vcc; _RS = gnd; Pause.aclr = gnd;
IF STR.q==H“F“ THEN ST=dz0;
ELSIF Din[DATA_WITH-1].q==0 THEN ST = ds; ELSE ST = bs; END IF;
--перемещение в начало
WHEN dz0 =>
Dmsh[DATA_WITH-1..0] = H“40“; OE = vcc;
Eena = gnd; _RW = gnd; _RS = gnd; Pause.aclr = vcc;
ST = bz0;
WHEN bz0 =>
Dmsh[DATA_WITH-1..0] = H“00“; OE = gnd;
Eena = vcc; _RW = vcc; _RS = gnd; Pause.aclr = vcc;
ST = cz0;
WHEN cz0 =>
Dmsh[DATA_WITH-1..0] = H“00“; OE = gnd;
Eena = gnd; _RW = vcc; _RS = gnd; Pause.aclr = gnd;
IF Din[DATA_WITH-1].q==0 THEN ST = dz1; ELSE ST = bz0; END IF;

WHEN dz1 =>
Dmsh[DATA_WITH-1..0] = H“80“; OE = vcc;
Eena = vcc; _RW = gnd; _RS = gnd; Pause.aclr = vcc;
ST = bz1;
WHEN bz1 =>
Dmsh[DATA_WITH-1..0] = H“00“; OE = gnd;
Eena = vcc; _RW = vcc; _RS = gnd; Pause.aclr = vcc;
ST = cz1;
WHEN cz1 =>
Dmsh[DATA_WITH-1..0] = H“00“; OE = gnd;
Eena = gnd; _RW = vcc; _RS = gnd; Pause.aclr = gnd;
IF Din[DATA_WITH-1].q==0 THEN ST = ds; ELSE ST = bz1; END IF;
END CASE;

INBUF[5..0][DATA_WITH-1..0].clk=READ.q;
INBUF[5..0][DATA_WITH-1..0].d=IN[5..0][DATA_WITH-1..0];
IF ST==dz1 THEN READ.d=vcc; ELSE READ.d=gnd; END IF;
READ.clk=clk;
IF ST==ds THEN STR.clock=vcc; ELSE STR.clock=gnd; END IF;
STR.aclr=READ.q;
CASE STR.q[] IS
WHEN H“1“ => LINE[]=INBUF[5][DATA_WITH-1..0];
WHEN H“2“ => LINE[]=INBUF[4][DATA_WITH-1..0];
WHEN H“3“ => LINE[]=INBUF[3][DATA_WITH-1..0];
WHEN H“4“ => LINE[]=INBUF[2][DATA_WITH-1..0];
WHEN H“5“ => LINE[]=INBUF[1][DATA_WITH-1..0];
WHEN H“6“ => LINE[]=INBUF[0][DATA_WITH-1..0];
WHEN H“7“ => LINE[]=H“20“;
WHEN H“8“ => LINE[]=H“43“;
WHEN H“9“ => LINE[]=H“44“;
WHEN H“A“ => LINE[]=H“45“;
WHEN H“B“ => LINE[]=H“46“;
WHEN H“C“ => LINE[]=H“47“;
WHEN H“D“ => LINE[]=H“48“;
WHEN H“E“ => LINE[]=H“49“;
WHEN H“F“ => LINE[]=H“4A“;
END CASE;
END;
Вид работы: Диплом

УТОЧНИТЬ СТОИМОСТЬ РАБОТЫ     ПОДНЯТЬ АНТИПЛАГИАТ    КАК ЗАКАЗАТЬ ЭТУ РАБОТУ