Динамическая индикация на ПЛИС
Добавлено: Ср сен 02, 2009 06:25:41
Есть готовый проект у кого?
Здесь можно немножко помяукать :)
https://radiokot.ru/forum/
На чем (AHDL,VHDL,Verilog) и под какую (чью) ПЛИСину?nick17 писал(а):Есть готовый проект у кого?
VHDL или схематик, или вместе....Работаю с Xilinx.Meteor писал(а):На чем (AHDL,VHDL,Verilog) и под какую (чью) ПЛИСину?nick17 писал(а):Есть готовый проект у кого?
У меня где то валялся проект мультиплексного вывода под Альтеровские MAX7xxxS. Но там прием в параллельном коде и вывод с дешифратора с признаком включения разряда (тоже дешифратор)
Делал "смесь" вначале на AHDL компоненты бил, затем в схемном их вставлял. Такты снаружи кошачил. Привык работать со схемами, а не с абстракциями.nick17 писал(а):на каком языке у тебя под альтеру?
90% идет именно этим путем. После того как проекты "расширяются", уровня схематики становится мало и.. происходит переход на абстракции:))nick17 писал(а):Щас описываю на VHDL определенную схему и создаю компонент по описанию....
Динамическая индикация -- это в каком смысле? Что динамически индицировать и на чём?nick17 писал(а):Есть готовый проект у кого?
Ага правильно, у меня были просто 4 разрядные семисегментники:)). С ЖК только на МК фурыкал...SII писал(а):Что динамически индицировать и на чём?
Meteor писал(а):Ага правильно, у меня были просто 4 разрядные семисегментники:)). С ЖК только на МК фурыкал...SII писал(а):Что динамически индицировать и на чём?
Код: Выделить всё
----------------------------------------------------------------------------------
--
-- ИНДИКАТОР ШЕСТНАДЦАТЕРИЧНЫХ КОДОВ
--
-- По шине Hexs[15:0] поступают прямые коды четырёх шестнадцатеричных цифр, ко-
-- торые должны быть отображены на четырёхразрядном семисегментном индикаторе, а
-- по шине Points[3:0] - обратные сигналы зажигания точек, относящихся к этим циф-
-- рам (активный уровень низкий).
-- Выходными являются шины Segs[7:0] и Anodes[3:0], подаваемые на индикаторы
-- (активный уровень низкий). В каждый момент времени может быть активна только
-- одна из линий Anodes, поскольку используется мультиплексирование выходных
-- линий.
-- Сигнал Enable разрешает работу индикатора. Когда он равен нулю, индикатор бу-
-- дет погашен.
-- Сигнал Clock определяет частоту мультиплексирования. Для нормального отобра-
-- жения необходимо поддерживать её в пределах от 60 Гц до 1 кГц.
--
----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity HexInd is
port ( Hexs : in std_logic_vector (15 downto 0);
Points : in std_logic_vector (3 downto 0);
Enable : in std_logic;
Clock : in std_logic;
Segs : out std_logic_vector (7 downto 0);
Anodes : out std_logic_vector (3 downto 0));
end HexInd;
architecture Behavioral of HexInd is
signal Counter : std_logic_vector (1 downto 0);
signal Hex : std_logic_vector (3 downto 0);
signal Point : std_logic;
signal SegInt : std_logic_vector (7 downto 0);
signal AnInt : std_logic_vector (3 downto 0);
begin
-- Обработка сигнала разрешения индикации
Segs <= SegInt when Enable = '1' else "11111111";
Anodes <= AnInt when Enable = '1' else "1111";
-- Счётчик мультиплексирования
process(Clock) is
begin
if rising_edge(Clock) then
Counter <= Counter + 1;
end if;
end process;
-- Мультиплексор
with Counter select
Hex <= Hexs(3 downto 0) when "00",
Hexs(7 downto 4) when "01",
Hexs(11 downto 8) when "10",
Hexs(15 downto 12) when others;
with Counter select
SegInt(7) <= Points(0) when "00",
Points(1) when "01",
Points(2) when "10",
Points(3) when others;
with Counter select
AnInt <= "1110" when "00",
"1101" when "01",
"1011" when "10",
"0111" when others;
-- Преобразователь кода цифры в код индикатора
with Hex select
SegInt(6 downto 0 ) <= "1000000" when "0000",
"1111001" when "0001",
"0100100" when "0010",
"0110000" when "0011",
"0011001" when "0100",
"0010010" when "0101",
"0000010" when "0110",
"1111000" when "0111",
"0000000" when "1000",
"0010000" when "1001",
"0001000" when "1010",
"0000011" when "1011",
"1000110" when "1100",
"0100001" when "1101",
"0000110" when "1110",
"0001110" when others;
end Behavioral;Есть для работы с ЖКИ без мультиплексирования.http://haos.homeip.net/LCDdriver/index.html. Загрузка данных последовательная.nick17 писал(а):Есть готовый проект у кого?
Нет, это моя разработка. Правда, не совсем с нуля: я почитываю одну книжку в электронном виде (на буржуйском, есно), разбираю тамошние примеры, а потом пытаюсь слепить своё. Недавно вот клавиатуру PS/2 сделал, правда, один непонятный глюк пока остался, но в общем работает. Следующим на очереди VGA будет, но пока опять нет времени из-за работыnick17 писал(а):SII, спасибо огромное сегодня буду пробоватьэто из апноута какого то? и где ты это находишь?!
Красиво. Можно еще добавить сюда еще память и будет законченный модуль. Я такую штуку в схематике наваял. 6х4 защелки в которые пишется по 4х-разрядной шине данных выбираемые 3х-разрядной шиной адреса. Планировалось под XC9572, но достать тогда ее не смог, и пришлось урезать аппетит, чтобы упаковать в 9536. получилось 4 с половиной разряда.SII писал(а):Мой модуль для управления 7-сегментными индикаторами вот:
Думаю лучше ссылочку или архивчик (если небольшой), много нас таких ща наберется:)))nick17 писал(а):а что за книга буржуйская?
есть возможность мне прислать?