Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Видеопамять для 7-сегментного индикатора на Spartan-3 Starter Kit.
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
lexus.mephi
Как выснилось, однократной подачи сигнлаов для вывода на индикацию недостаточно, т.ч. необходима видеопамять. Кто-нибудь ее реализовывал?
Есть, конечно, одна задумка с использованием двухпортовой памяти, вот только для нее нужно уменьшать частоту клока! Получается немного напряжно.
makc
Неужели для семисегментного индикатора недостаточно обыкновенного семирязрядного регистра? blink.gif
Причем здесь видеопамять?
Hardman
Цитата(lexus.mephi @ Nov 25 2006, 18:02) *
Как выснилось, однократной подачи сигнлаов для вывода на индикацию недостаточно, т.ч. необходима видеопамять. Кто-нибудь ее реализовывал?
Есть, конечно, одна задумка с использованием двухпортовой памяти, вот только для нее нужно уменьшать частоту клока! Получается немного напряжно.

signal HEX: std_logic_vector (3 downto 0);

LED: process(HEX,SEL,CLK1)
begin
if SEL='1' then
case HEX is
when "0000" => LDR <= "0000001";-- 0
when "0001" => LDR <= "1001111";-- 1
when "0010" => LDR <= "0010010";-- 2
when "0011" => LDR <= "0000110";-- 3
when "0100" => LDR <= "1001100";-- 4
when "0101" => LDR <= "0100100";-- 5
when "0110" => LDR <= "0100000";-- 6
when "0111" => LDR <= "0001111";-- 7
when "1000" => LDR <= "0000000";-- 8
when "1001" => LDR <= "0000100";-- 9
when "1010" => LDR <= "0001000";-- A
when "1011" => LDR <= "1100000";-- B
when "1100" => LDR <= "0110001";-- C
when "1101" => LDR <= "1000010";-- D
when "1110" => LDR <= "0110000";-- E
when "1111" => LDR <= "0111000";-- F
when others => LDR <= "1111111";
end case;
else
case CLK1 is
when '0' => LDR <= "1110001";-- L
when '1' => LDR <= "0110001";-- C
when others => LDR <= "0000000";
end case;
end if;
end process LED;


4 бита в дешифратор память не нужна.
lexus.mephi
Понимаете, мне нужно чтобы в каждой из 4 позиций индикатора были разные числа! Для этого мне нужно выводить их поочередно, но делать это нужно динамически, т.е. постоянно обновлять! Или будет видно только последнее выведенное знакоместо. И одним регистром здесь не обойдешся. А подобный дешифратор я и сам написал, но этого не достаточно! Ладно, че-нить придумаем =)
makc
Можно же поставить поставить четыре регистра?
Hardman
Это и есть динамическая
DAT: process (CLK1, DATA)
begin
case CLK1 is
when '00' => HEX <= DATA (3 downto 0);
when '01' => HEX <= DATA (7 downto 4);
when '10' => HEX <= DATA (11 downto 8);
when '11' => HEX <= DATA (15 downto 12);
when others => HEX <= "0000";
end case;
end process DAT;

a CLK1 и будет выбираться индикатор на котором надо цифру зажечь.
Prusak
Цитата(lexus.mephi @ Nov 26 2006, 10:58) *
Понимаете, мне нужно чтобы в каждой из 4 позиций индикатора были разные числа! Для этого мне нужно выводить их поочередно, но делать это нужно динамически, т.е. постоянно обновлять! Или будет видно только последнее выведенное знакоместо. И одним регистром здесь не обойдешся. А подобный дешифратор я и сам написал, но этого не достаточно! Ладно, че-нить придумаем =)
В тестовых проектах, прилагающихся к плате есть очень наглядный пример по этому вопросу. Смотрите здесь: http://www.xilinx.com/products/boards/DO-S...nce_designs.htm . Проект называется Digital Clock using Multiplexed 7-Segment Display.
lexus.mephi
Сделал все как в примере Xilinx и все корректно ввыводится кроме первого знакоместа! Не могу понять в чем глюк.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.