Здравствуйте!
Делаю первый свой проект на ПЛИС. Для начала решил создать простенький ознакомительный проект.
Quartus 7.1
EP2C5Q208C8
Загрузочный кабель: ByteBlasterMV
По нажатию кнопки хочу чтобы загорался светодиод. Часть схемы прилагаю.
Питание ядра 1.25В (спецификация ПЛИС такое допускает)
Питание буферов 3.3В
Тактовый сигнал на ПЛИС не подаётся.
В Pin Planer-е "butt" назначаю на 104-ю ногу, "led" на 103-ю, "hi" - 5-я, "lo" - 11-я. Выбираю уровни 3.3 - LVTTL для всех этих ног.
В настройкай ассемблера ставлю галочку "Always enable input buffers".
1)После прошивки по JTAG-у SOF-файлом получаю такую картину:
- На подтягивающем резисторе кнопки (со стороны ПЛИС) уровень 3.3В.
- На светодиоде (со стороны ПЛИС) уровень 3.3В.
- На выходе "hi" уровень 3.3В
- На выходе "lo" уровень 0 В.
2)Нажимаю кнопку и держу, при этом:
- На подтягивающем резисторе кнопки (со стороны ПЛИС) уровень 0В.
- На светодиоде (со стороны ПЛИС) уровень 0В.
- На выходе "hi" уровень 3.3В
- На выходе "lo" уровень 0 В.
3)Отпускаю кнопку. После отпускания картна такая:
- На подтягивающем резисторе кнопки (со стороны ПЛИС) уровень 1.8В.
- На светодиоде (со стороны ПЛИС) уровень 1.8В.
- На выходе "hi" уровень 3.3В
- На выходе "lo" уровень 0 В.
При повторном нажатии кнопки наблюдается ситуация 2)
При отпускании ситуация 3)
Так всё и продолжает работать до повторной заливки прошивки в ПЛИС. После этого наблюдается ситуация 1)
Причем, уровень 1.8В - постояный (смотрел осцилографом на предмет наличия внутренней генерации колебаний - колебаний нет).
Есть предположение, что в ситуациях 2) и 3) не работают буфера входов-выходов (1.8 В = питание ядра + падение на внутреннем защитном диоде).
Как бороться с этой ситуацией ?
Текст проекта (VHDL):
library ieee;
use ieee.std_logic_1164.all;
entity buttled is
port
(
butt : in std_logic;
led : out std_logic;
hi : out std_logic;
lo : out std_logic
);
end buttled;
architecture rtl of buttled is
begin
led<=butt;
hi<='1';
lo<='0';
end rtl;
В догонку: хочется вместо 1.8 В иметь 3.3 (согласно логике проекта).