|
|
  |
Управление LCD дисплеем с помощью ПЛИС, Как правильно написать программу на VHDL для LCD |
|
|
|
Apr 2 2010, 14:20
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(Aleksandr_KPI @ Apr 2 2010, 15:39)  У ПЛИС есть своя тактовая частота, память, контроль загрузки прошивки из PROM, У нее нет встроенного PROM'а. Если на плате предусмотрен внешний для ее загрузки, то МК может в этом участия не принимать Цитата При написании программы возник вопрос: Ой. Сейчас начнется  На VHDL пишут не программу, а описывают аппаратуру. А ПЛИС это не микропроцессор (она программу выполнять не может), а программируемая и конфигурируемая схема. Цитата как правильно организовать опрос регистров SN74HC573. Замысел таков: Замысел неправильный - вам надо организовать счетчик и дешифратор. Ваш for развернется в 5 последовательных операторов присваивания, сработает только последний. Посмотрите примеры в встроенном хелпе ISE (в library guide) и почитайте какой нибудь букварь по проектированию схем на HDL
|
|
|
|
|
Apr 5 2010, 18:14
|
Местный
  
Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032

|
Цитата У нее нет встроенного PROM'а. Если на плате предусмотрен внешний для ее загрузки, то МК может в этом участия не принимать Да, на плате присутствует в виде отдельной микросхемы PROM Xilinx. Цитата Замысел неправильный - вам надо организовать счетчик и дешифратор. Ваш for развернется в 5 последовательных операторов присваивания, сработает только последний.
Посмотрите примеры в встроенном хелпе ISE (в library guide) и почитайте какой нибудь букварь по проектированию схем на HDL Спасибо. Пошел читать про организацию счетчиков и дешифраторов на VHDL.
|
|
|
|
|
Apr 6 2010, 22:04
|
Местный
  
Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032

|
С дешифратором разобрался, а как применить счетчик не пойму, все попытки его употребить окончились неудачно. На мой взгляд хорошо подходит цикл с досрочным выходом и оператор сдвига. Цитата for i in 1 to 5 loop
case i is when 1 => X_RD_KEY <= SHIFT_LEFT(F_RD_KEY, 1); when 2 => X_RD_KEY <= SHIFT_LEFT(F_RD_KEY, 2); when 3 => X_RD_KEY <= SHIFT_LEFT(F_RD_KEY, 3); when 4 => X_RD_KEY <= SHIFT_LEFT(F_RD_KEY, 4); when 5 => X_RD_KEY <= SHIFT_LEFT(F_RD_KEY, 5); end case; exit when (F_D'event and F_D /= "00000000") ; end loop; Такой код выдает ошибку что оператор SHIFT_LEFT не может быть употреблен в данном контексте. F_RD_KEY и X_RD_KEY имеют тип unsignet.
|
|
|
|
|
Apr 6 2010, 23:08
|
Местный
  
Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032

|
Цитата Так ничего и не понял - что требуется? Требуется написать программу для уже готовой платы с ПЛИС, МК, дисплеем и 40 кнопками на ней. Кнопки завязаны на 5 регистров (по 8 на каждом). Все регистры подключены к ПЛИС. С помощью кода выше хочу мониторить эти регистры на предмет нажатия кнопки. Не знал что loop это зло. В литературе читал о циклах, там о них только хорошее пишут, ни о каких ограничениях не говорилось. Цитата Может вам вообще как-нибудь Picoblaze примострячить С Picoblaze не сталкивался, когда вникну смогу ответить.
Сообщение отредактировал Aleksandr_KPI - Apr 6 2010, 23:09
|
|
|
|
|
Apr 7 2010, 04:08
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата Требуется написать программу для уже готовой платы с ПЛИС, МК, дисплеем и 40 кнопками на ней. Кнопки завязаны на 5 регистров (по 8 на каждом). Все регистры подключены к ПЛИС. С помощью кода выше хочу мониторить эти регистры на предмет нажатия кнопки. Не влезет ваша программа в вашу ПЛИС  На VHDL это будет монстр огромных размеров. Я думаю, что автор схемы расчитывал, что с кнопками и LCD будет работать МК, а ПЛИС будет не более чем расширителем портов для него. Покажите, что уже написали - вам тут подробно раскажут, почему это работать не будет  PS. Ваш loop не синтезируемый, компиляция не пройдет (даже если исправить SHIFT_LEFT) PPS. Бросайте VHDL и берите Verilog. Там гораздо меньше писанины и все более прозрачно
|
|
|
|
|
Apr 9 2010, 13:13
|
Местный
  
Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032

|
Цитата Не влезет ваша программа в вашу ПЛИС crying.gif На VHDL это будет монстр огромных размеров. А как это можно определить? У меня программа загружается с PROM XC18VO1SO20, а там память 1,048,576 бит.
|
|
|
|
|
Apr 9 2010, 15:58
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(Aleksandr_KPI @ Apr 9 2010, 17:28)  А как это можно определить? Написать и попробовать синтезировать Цитата У меня программа загружается с PROM XC18VO1SO20, а там память 1,048,576 бит. Ну и что? Возможности определяются вместимостью ПЛИС, а не размерами загрузочной ПЗУ.
|
|
|
|
|
Apr 9 2010, 18:17
|
Местный
  
Группа: Участник
Сообщений: 328
Регистрация: 23-05-08
Пользователь №: 37 760

|
Цитата(Aleksandr_KPI @ Apr 7 2010, 03:23)  В литературе читал о циклах, там о них только хорошее пишут, ни о каких ограничениях не говорилось. Ну и я из своего опыта ничего плохого про них сказать не могу, т.к. использую только при структурном описании. Однако нехорошее про них читал у Полякова "Языки VHDL и Verilog". Там приводился пример, когда при использовании цикла получалось очень нехорошо в плане аппаратных затрат. Учтите, что VHDL - это изначально язык для описания работы цифровых устройств и моделирования. Для синтеза (проектирования) используется подмножество языка. Так что какие-то конструкции вообще нельзя использовать, какие-то не желательно. И опять таки все зависит от самой программы синтеза. Как пример - сумматор/вычитатель. Два варианта vhdl-описания. Функционально одно и тоже. На выходе XST (программа синтеза в WebPack-е) - результаты синтеза по аппаратным затратам отличаются в два раза! В первом случае сумматор/вычитатель формируется из LUT, логики переноса и дополнительного элемента XOR из состава логической ячейки. Во втором случае - один сумматор + один вычитатель + мультиплексор на выходе. Так что кроме "общих" учебников по синтаксису дополнительно полистайте книги именно по теме проектирования на ПЛИС, правда все они на английском (путных книг на русском не попадалось).
|
|
|
|
|
Sep 8 2010, 17:51
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(Aleksandr_KPI @ Sep 8 2010, 17:07)  1. Подскажите назначение сигнала E, микроконтроллера SC1602B. Насколько я помню это строб выбора контролера. Т.е. именно он определяет циклы записи и чтения регистров контролера Цитата Прочитав datasheet я не понял, он применяется только в случае записи данных или команд тоже? Например при начальной установке микроконтроллера: выбор ширины шины, очистка экрана и.т.д. Всегда. Цитата 2. В каком случае производится чтение данных из дисплея Для проверки готовности дисплея к приему следующих команд и для чтения из ОЗУ контролера Цитата и для чего это нужно? Нафиг не нужно Цитата 3. Минимальное время записи команд и записи данных, 230 ns ? Согласно datasheet : Enable Pulse Width -- High Level -- PWEH --230 ns. Это минимум, можно делать больше. Цитата 4. У меня в шине применяется временное разделение, отрезок времени выделенный под дисплей составляет 1,9 мкс, этого мало? Если E формируется там, где надо, то наверное должно хватить (нужно смотреть даташит на тему времен установок и удержания шин данных и адреса относительно E)
|
|
|
|
|
Sep 9 2010, 08:17
|
Местный
  
Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032

|
Цитата Насколько я помню это строб выбора контролера. Т.е. именно он определяет циклы записи и чтения регистров контролера Но ведь запись или чтение определяются сигналом R/W. Сигнал E (Enable) я так понимаю запускает выполнение команд отправленных по шине в дисплей. Судя по временной диаграмме (ниже), каждой команде или данным переданным по шине в дисплей должен соответствовать этот сигнал E c периодом не мение 500 ns и длительностью импульса не мение 250 ns. Тоесть каждая команда или переданные данные будут иметь длительность минимум 500 ns, а значит один переданный символ для дисплея так же будет 500 ns. Правильный ли ход мыслей? Цитата Цитата Цитата Цитата 2. В каком случае производится чтение данных из дисплея
Для проверки готовности дисплея к приему следующих команд и для чтения из ОЗУ контролера и для чего это нужно? Нафиг не нужно Тоесть чтение можно не проводить, а просто посылать команды и данные в микроконтроллер с учетом требуемых временных параметров и дисплей будет работать корректно?
Эскизы прикрепленных изображений
|
|
|
|
|
Sep 9 2010, 08:32
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(Aleksandr_KPI @ Sep 9 2010, 12:17)  Но ведь запись или чтение определяются сигналом R/W. НАПРАВЛЕНИЕ (т.е. выбор - чтение или запись) осуществляется сигналом R/W, а собственно сам цикл обмена (как чтения так и записи) запускается сигналом E Цитата Сигнал E (Enable) я так понимаю запускает выполнение команд отправленных по шине в дисплей. Не совсем - он просто записывает (или читает) регистр контролера. Как результат записи может быть запущена команда. Цитата Судя по временной диаграмме (ниже), каждой команде или данным переданным по шине в дисплей должен соответствовать этот сигнал E c периодом не мение 500 ns и длительностью импульса не мение 250 ns. Тоесть каждая команда или переданные данные будут иметь длительность минимум 500 ns, а значит один переданный символ для дисплея так же будет 500 ns. Правильный ли ход мыслей? Опять же не совсем. Это требуемые времянки именно для доступа к регистру. Запущенная в результате этого команда может занять гораздо больше времени. И в течении этого времени контролер будет игнорировать все записи и чтения в его регистры. Читаться будет только регистр состояния, и в нем будет валиден только бит BUSY. Цитата Тоесть чтение можно не проводить, а просто посылать команды и данные в микроконтроллер с учетом требуемых временных параметров и дисплей будет работать корректно? Да. Только 'временные параметры' это не только 500ns по E, но и время выполнения команды (а это уже единицы ms)
|
|
|
|
|
Sep 9 2010, 09:02
|
Местный
  
Группа: Свой
Сообщений: 323
Регистрация: 25-08-09
Пользователь №: 52 032

|
Цитата Опять же не совсем. Это требуемые времянки именно для доступа к регистру. Запущенная в результате этого команда может занять гораздо больше времени. И в течении этого времени контролер будет игнорировать все записи и чтения в его регистры. Читаться будет только регистр состояния, и в нем будет валиден только бит BUSY. Сколько понадобится времени, чтобы вывести на дисплей слово : "Hallo". Выходит 5 букв по 500 нс на каждую, это 2,5 мкс? Цитата Да. Только 'временные параметры' это не только 500ns по E, но и время выполнения команды (а это уже единицы ms) А как узнать время выполнения той или иной команды, к примеру очистка экрана. В datasheet я нашел упоминание о миллисекундах только в пункте оптические характеристики. Опять таки повторюсь, хотелось бы знать возможно ли управлять полноценно дисплеем если при временном разделении шины для этого выделено 1,9 мкс на период приблизительно 25 мкс.
Сообщение отредактировал Aleksandr_KPI - Sep 9 2010, 09:03
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|