|
Устройство мигания светодиодов (VHDL) |
|
|
|
Jul 13 2017, 11:52
|
Участник

Группа: Участник
Сообщений: 24
Регистрация: 13-07-17
Пользователь №: 98 133

|
Устройство моргания 4-мя светодиодами.По сути,программа очень простая.Но у меня в итоге светодиоды "бегают" (т.е. загорелся первый,потом сразу же следующий с частотой 1 Гц).А мне нужно чтобы диод загорелся,потух,а только потом,через 1 с, следующий. Заранее благодарен. вот реализация и временная диаграмма: Код library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all;
entity LED is port( CLK : in std_logic; L_D : out std_logic_vector(3 downto 0)); -- поправил у меня 4 светодиода подключены end LED;
architecture A_LED of LED is signal counter : std_logic_vector(20 downto 0):= (others => '0'); signal LED_temp : std_logic_vector(3 downto 0) := (0 => '1',others =>'0'); -- поправил на 4 светодиода signal res : std_logic := '0'; begin count : process(CLK,res) begin if(res = '1') then counter <= (others => '0'); elsif(rising_edge(CLK)) then counter <= counter +1; end if; end process;
L : process(counter) begin if(counter = 2000000) then res <= '1'; LED_temp <= LED_temp(2 downto 0) & LED_temp(3); -- вращаю выходной вектор по кругу налево, постоянно смещая на 1 разряд else res <= '0'; end if; end process;
L_D <= led_temp; -- выдаю информацию из регистров в порт
end A_LED; На выходе получаю  а надо:
Эскизы прикрепленных изображений
|
|
|
|
|
 |
Ответов
|
Jul 17 2017, 14:59
|
Частый гость
 
Группа: Участник
Сообщений: 135
Регистрация: 19-10-13
Пользователь №: 78 795

|
Как-то так, например. Тестбенч : Код library ieee; use ieee.std_logic_1164.all;
entity test_led_tb is generic ( p_TD : time := 1 ns; p_CLK_T : time := 4 ns ); end test_led_tb;
architecture behav of test_led_tb is signal clk : std_logic := '0'; signal sw : std_logic := '0'; signal led : std_logic_vector(3 downto 0);
component test_led is generic ( p_TD : time := 1 ns; p_CNT_LIM : integer := 1000 - 1 ); port ( clk : in std_logic; sw : in std_logic; led : out std_logic_vector(3 downto 0) ); end component; begin clk_gen_p : process begin clk <= not(clk); wait for p_CLK_T / 2; end process;
sw <= '1' after 100 us, '0' after 101 us, '1' after 200 us;
UUT : test_led generic map ( p_TD => p_TD ) port map ( clk => clk, sw => sw, led => led );
end behav; Дизайн: Код library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all;
entity test_led is generic ( p_TD : time := 1 ns; p_CNT_LIM : integer := 32768 - 1 ); port ( clk : in std_logic; sw : in std_logic; led : out std_logic_vector(3 downto 0) ); end test_led;
architecture rtl of test_led is type on_off_state is (OFF, ONN); signal led_state : on_off_state := OFF;
signal div_cnt_u : unsigned(31 downto 0) := (others => '0');
signal phase : std_logic := '1'; signal sw_sync_re : std_logic := '0'; signal sw_reg : std_logic_vector(2 downto 0); signal led_reg : std_logic_vector(3 downto 0) := (0 => '1', others => '0'); begin
resync_sw_p : process(clk) begin if (rising_edge(clk)) then sw_reg(0) <= sw after p_TD; sw_reg(2 downto 1) <= sw_reg(1 downto 0) after p_TD; else NULL; end if; end process; --resync_sw_p
sw_sync_re <= sw_reg(1) and not(sw_reg(2));
scheme_state_control_p : process(clk) begin if (rising_edge(clk)) then if (sw_sync_re = '1') then if (led_state = ONN) then led_state <= OFF after p_TD; else led_state <= ONN after p_TD; end if; else NULL; end if; else NULL; end if; end process; --scheme_state_control_p
counter_control_p : process(clk) begin if (rising_edge(clk)) then if (div_cnt_u < p_CNT_LIM) then div_cnt_u <= div_cnt_u + 1 after p_TD; else div_cnt_u <= (others => '0'); end if; else NULL; end if; end process;
phase_control_p : process(clk) begin if (rising_edge(clk)) then if (div_cnt_u = p_CNT_LIM) then if (phase = '0') then if (led_state = ONN) then phase <= '1' after p_TD; else phase <= '0' after p_TD; end if; else phase <= '0' after p_TD; end if; else NULL; end if; else NULL; end if; end process; --phase_control_p
led_reg_control_p : process(clk) begin if (rising_edge(clk)) then if (div_cnt_u = p_CNT_LIM) then if (phase = '1') then led_reg <= led_reg(2 downto 0) & led_reg(3) after p_TD; else NULL; end if; else NULL; end if; else NULL; end if; end process; --led_reg_control_p
out_form_logic_p : process(phase) begin if (phase = '0') then led <= (others => '0'); else led <= led_reg; end if; end process; --out_form_logic_p
end rtl; Пы.Сы ONN вместо ON, потому что ON - зарезервированное слово. Пы.Пы.Сы. Научите код под спойлер убирать(
Сообщение отредактировал Tausinov - Jul 17 2017, 15:01
|
|
|
|
|
Jul 18 2017, 13:52
|
Участник

Группа: Участник
Сообщений: 24
Регистрация: 13-07-17
Пользователь №: 98 133

|
Цитата(Tausinov @ Jul 17 2017, 17:59)  Блин,я наверное,уже задолбал, (( но походу "замораживать фазу" не лучшая идея,т.к моделирование показывает вообще не тот результат. ПРИ ТАКИХ ПАРАМЕТРАХ: Код sw <= '0' after 0 ms, '1' after 3000 ms, '0' after 6000 ms, '1'after 10000 ms;  а вот так должна выглядеть времянка. т.е. до 3 сек. кнопка не нажата и светодиоды не мигают. на 3 секунде я нажал кнопку и светодиодымигают до 6 сек. потом я опять нажал кнопку и светодиоды потухли. И Т.Д.
|
|
|
|
Сообщений в этой теме
lyzifer Устройство мигания светодиодов (VHDL) Jul 13 2017, 11:52 iosifk Цитата(lyzifer @ Jul 13 2017, 14:52) Устр... Jul 13 2017, 11:58 lyzifer Цитата(iosifk @ Jul 13 2017, 14:58) Это з... Jul 13 2017, 12:02 Tausinov Ввести дополнительный сигнал
signal phase : std_lo... Jul 13 2017, 13:51 lyzifer Цитата(Tausinov @ Jul 13 2017, 16:51) Вве... Jul 13 2017, 14:32  Tausinov Цитата(lyzifer @ Jul 13 2017, 17:32) Блин... Jul 13 2017, 15:18   lyzifer Цитата(Tausinov @ Jul 13 2017, 18:18)
Вс... Jul 13 2017, 15:32 Tausinov Дизайн:
Кодlibrary ieee;
use ieee.std_logic_1164... Jul 13 2017, 15:58 lyzifer Цитата(Tausinov @ Jul 13 2017, 18:58)
о... Jul 13 2017, 18:23  Maverick lyzifer, это не программа, а описание цифровой схе... Jul 13 2017, 18:37 Stewart Little Цитата(lyzifer @ Jul 13 2017, 14:52) А мн... Jul 13 2017, 16:17 Tausinov Цитата(Stewart Little @ Jul 13 2017, 19:1... Jul 13 2017, 16:26  lyzifer Цитата(Tausinov @ Jul 13 2017, 19:26)
ЕЕ... Jul 14 2017, 07:41   AVR Цитата(lyzifer @ Jul 14 2017, 10:41) ЕЕЕЕ... Jul 14 2017, 08:08    lyzifer Цитата(AVR @ Jul 14 2017, 11:08) Будет ли... Jul 14 2017, 08:57 AVR Вопрос автору темы: обязательно ли VHDL? Видя это ... Jul 14 2017, 06:24 Flip-fl0p А есть ли особый смысл в этих строчках ?
Код else ... Jul 14 2017, 08:44 Tausinov Цитата(Flip-fl0p @ Jul 14 2017, 11:4... Jul 14 2017, 09:16  lyzifer Цитата(Tausinov @ Jul 14 2017, 12:16) Обе... Jul 14 2017, 09:59   Tausinov Цитата(lyzifer @ Jul 14 2017, 12:59) Я И ... Jul 14 2017, 10:36    lyzifer Цитата(Tausinov @ Jul 14 2017, 13:36)
Ва... Jul 17 2017, 12:08     Tausinov Что-то странное вы пытаетесь сделать, если честно.... Jul 17 2017, 12:42      lyzifer Цитата(Tausinov @ Jul 17 2017, 15:42) Что... Jul 17 2017, 12:45      lyzifer Цитата(Tausinov @ Jul 17 2017, 15:42) Все... Jul 17 2017, 14:20   iosifk Цитата(lyzifer @ Jul 14 2017, 12:59) Я И ... Jul 14 2017, 10:40    Огурцов Цитата(iosifk @ Jul 14 2017, 10:40) цель ... Jul 15 2017, 04:20     iosifk Цитата(Огурцов @ Jul 15 2017, 07:20) цель... Jul 15 2017, 14:11  sonycman Цитата(Tausinov @ Jul 14 2017, 13:16) На ... Jul 14 2017, 10:45   AVR Цитата(sonycman @ Jul 14 2017, 13:45) Не ... Jul 14 2017, 10:47    Maverick Цитата(AVR @ Jul 14 2017, 13:47) Я просто... Jul 16 2017, 12:04   yoggy Цитата(sonycman @ Jul 14 2017, 13:45) ...... Jul 15 2017, 02:45  iosifk Цитата(lyzifer @ Jul 18 2017, 16:52) Блин... Jul 18 2017, 13:59   lyzifer Цитата(iosifk @ Jul 18 2017, 16:59) Два р... Jul 18 2017, 14:04 Tausinov Один из диодов в начале горит, т.к. регистр инициа... Jul 18 2017, 15:53 lyzifer Цитата(Tausinov @ Jul 18 2017, 18:53) Оди... Jul 18 2017, 18:50 AVR Я не выдержал, моё решение (сам модуль примерно 25... Jul 18 2017, 19:56 lyzifer Цитата(AVR @ Jul 18 2017, 22:56) Я не выд... Jul 19 2017, 07:08 Tausinov Так осталось просто тоже самое переписать на VHDL.... Jul 19 2017, 08:39 lyzifer Цитата(Tausinov @ Jul 19 2017, 11:39) Так... Jul 19 2017, 08:45 Tausinov Кодlibrary ieee;
use ieee.std_logic_1164.all;
... Jul 19 2017, 09:31
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|