Параллельный адаптер порта LPT на ПЛИС Altera

         

Параллельный адаптер порта LPT на ПЛИС Altera


Параллельный адаптер порта LPT на ПЛИС Altera

.

Данная статья предназначена для тех, кто на практике хочет изучить ПЛИС, но не знает с чего начать.

Параллельный адаптер изначально проектировался только в учебных целях. Я хотел «пощупать» что же такое ПЛИС. Однако получилось вполне работоспособное устройство, которое может быть использована в качестве отладочной платы или может войти в состав более сложных устройств.

Итак, в качестве подопытного кролика выбрана ПЛИС EPM7064SLC44-10. Выбор обусловлен сравнительно низкой ценой при достаточной функциональности. Обращаю Ваше внимание на то, что буквы LC44 обозначают тип корпуса PLCC. На мой взгляд, этот корпус самый удобный (из доступных для ПЛИС) для пайки на коленке. Панель для 44-pin корпуса стоит недорого, и запаять его можно даже самым тупым паяльником.

Чтобы ПЛИС выполняла нужные действия, ее предварительно надо запрограммировать. Для этого в среде Altera MAX+ PLUS II создается проект, описывающий поведение устройства. Существует несколько способов написания этого проекта. Выделю только два основных: в виде схемы и на языке программирования.

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

Второй способ представляет собой описание поведения схемы на специально разработанном для этого языке (AHDL,VHDL или VeriLog). Основной недостаток данного метода – необходимость изучать язык программирования. Зато описание проекта получается лаконичным и компактным. Фирма Altera специально разработала язык AHDL для программирования своих ПЛИС, этот язык отличается более сложным синтаксисом, поэтому для начала лучше заняться VHDL или Verilog. К тому же эти два языка поддерживаются многими производителями ПЛИС, т.е. они аппаратно независимые.


assign d=(!cs2)?in:8'bz;                          //  описание буфера ввода данных

endmodule

Описание сигналов:

Out – шина вывода данных;

In – шина ввода данных;

Sl – сигнал #SLCT_IN;

St – сигнал  #STROBE;

D – двунаправленная шина данных порта Lpt;

cs1 – разрешение вывода данных;

cs2 – разрешение ввода данных;

Эта программа эквивалентна схеме из двух микросхем К1533ИД22 и К1533ИД7 (очень приближенный аналог).



В текстовом редакторе Max+PLUS II надо набрать этот текст, скомпилировать и, применив встроенный симулятор, убедиться, что программа действительно работает. Кстати, в данной программе применяться элемент с третьим состоянием (предпоследняя строчка), у меня так и не получилось симулятором корректно проверить его работу. Проблема в том, что нет возможности эмулировать двунаправленные выводы. Если кто знает, как решить эту проблему, напишите. ПЛИС обладают замечательным свойством: цоколевку выводов можно сделать самостоятельно (в разумных пределах), т.е. поставить в соответствие физическому выводу микросхемы сигнал ПЛИС.

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

Будьте внимательны. Существуют две схемы  этого кабеля, одна из них приведена в документации за 1998 год, другая опубликована в 2002 году. В принципе, схемы одинаковые, отличия только в числе резисторов. Однако схемы подключения ПЛИС в ByteBlaster’у отличаются весьма значительно. В схеме за 2002 г. Резистор подключен между GND и TDO, какое подключение заставляет сомневаться в работоспособности схемы, поэтому лучше воспользоваться документацией за 1998 г. И подключить этот резистор к Vcc.

На сайте http://www.evm.wallst.ru/ можно заказать уже готовый ByteBlaster+ или набор для сборки. В комплект входит очень удобный шлейф для подключения программатора к Lpt порту, что снимает извечную проблему разъемов и кабелей. Модификация ByteBlaster+ выгодно отличается от традиционного ByteBlasterMV возможностью программировать микроконтроллеры AVR фирмы Atmel.



После программирования ПЛИС, остается только проверить работу адаптера. Для этого на выходы шины Out удобно подключить светодиоды, не забыв про нагрузочные резисторы, а на шину In подавать сигналы c тумблеров или кнопок, подключенных к Vcc или GND. Для удобства приведу назначение контактов разъема Centronics на стороне принтера.

  



#SLCT_IN

width="105">

#STROBE

width="66">

D0

width="48">

D1

width="71">

D2

width="71">

D3

width="71">

D4

width="71">

D5

width="71">

D6

width="71">

D7


36


1


2


3


4


5


6


7


8


9
Чтобы проверить правильность функционирования устройства, можно воспользоваться следующим алгоритмом. Цикл обмена с портом состоит из двух фаз: фаза адреса и фаза данных. Во время фазы данных происходит настройка адаптера на режим работы (генерация сигналов cs1 или cs2). Во время фазы данный происходит ввод/вывод данных. Если необходимо выполнить несколько циклов чтения/записи подряд, то можно выполнить только одну фазу адреса.

Текст программы.

.MODEL TINY

.CODE

       ORG 100H

START:

;ввод данных (фаза адреса)

       mov dx,37Ah

       mov al,0f8h

       out dx,al

;ввод данных (фаза данных)

       mov dx,378h

       in     al,dx

       mov ah,al

;вывод данных (фаза адреса)

       mov dx,37Ah

       mov al,00fh

       out dx,al

;ввод данных (фаза данных)

       mov dx,378h

       mov al,ah

       out dx,al

       jmp START

       ret

END       START

В заключении можно отметить, что данная схема использует только 26% площади кристалла. Кстати, я заметил интересную особенность: чем больше используется выводов, тем больше занимаемая площадь, т.е.  если сейчас добавить дополнительные блоки обработки входных/выходных сигналов, при этом, оставив неизменным число использованных выводов, то процент использованной площади изменится незначительно. При высоком проценте заполнения уже невозможно свободно назначить выводы микросхемы (MAX+PLUS II не может развести схему).