VHDL

0

Witam ,

Potrzebuje pomocy w następującym zadaniu w programie VHDL:
W oparciu o płytkę uruchomieniową DE2 zaprojektuj 4 bitowy licznik Johnsona. Stan licznika ma być
wyświetlany na 4 wyświetlaczach 7-segmentowych LED (np. 1110). Zmiana stanu licznika ma się
odbywać automatycznie np. co 1s. Opracuj środowisko testowe dla zaprojektowanego układu.

Czy ktoś może mi pomóc ?

0

na razie udało mi się tyle zrobić :)

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
 
entity Ring_counter is
    Port ( CLOCK : in  STD_LOGIC;
           RESET : in  STD_LOGIC;
           Q : out  STD_LOGIC_VECTOR (3 downto 0));
end Ring_counter;
 
architecture Behavioral of Ring_counter is
signal q_tmp: std_logic_vector(3 downto 0):= "0000";
begin
process(CLOCK,RESET)
begin
if RESET = '1' then
    q_tmp <= "0001";
elsif Rising_edge(CLOCK) then
    q_tmp(1) <= q_tmp(0);
    q_tmp(2) <= q_tmp(1);
    q_tmp(3) <= q_tmp(2);
    q_tmp(0) <= q_tmp(3);
end if;
end process;
Q <= q_tmp;
end Behavioral;
0

signal q_tmp: std_logic_vector(3 downto 0):= "0000"; czyli tą linijkę zmienić z 0000 na 0001 ?

0

Teraz co dale muszę zrobić w tym kodzie ??

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity Ring_counter is
Port ( CLOCK : in STD_LOGIC;
RESET : in STD_LOGIC;
Q : out STD_LOGIC_VECTOR (3 downto 0));
end Ring_counter;

architecture Behavioral of Ring_counter is
signal q_tmp: std_logic_vector(3 downto 0):= "0001";
begin
process(CLOCK,RESET)
begin
if RESET = '1' then
q_tmp <= "0001";
elsif Rising_edge(CLOCK) then
q_tmp(1) <= q_tmp(0);
q_tmp(2) <= q_tmp(1);
q_tmp(3) <= q_tmp(2);
q_tmp(0) <= q_tmp(3);
end if;
end process;
Q <= q_tmp;
end Behavioral;
0

Czy chodzi o coś takiego ??

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity lcd_dek is port (
din: in std_logic_vector(3 downto 0);
clk: in std_logic;
bp: inout std_logic;
segm_o: out std_logic_vector(6 downto 0)
 );
end lcd_dek;
architecture ar_dyn of lcd_dek is
signal segm: std_logic_vector(6 downto 0);
begin
with din select
--          gfedcba
 segm <= "0111111" when "0000",  -- 0
         "0000110" when "0001",  -- 1
         "1011011" when "0010",  -- 2
         "1001111" when "0011",  -- 3
         "1100110" when "0100",  -- 4
         "1101101" when "0101",  -- 5
         "1111101" when "0110",  -- 6
         "0000111" when "0111",  -- 7
         "1111111" when "1000",  -- 8
         "1101111" when "1001",  -- 9
         "0000000" when others;  -- 
wygaszenie
segm_o(0) <= segm(0) xor bp;
segm_o(1) <= segm(1) xor bp;
segm_o(2) <= segm(2) xor bp;
segm_o(3) <= segm(3) xor bp;
segm_o(4) <= segm(4) xor bp;
segm_o(5) <= segm(5) xor bp;
segm_o(6) <= segm(6) xor bp;
bp <= clk;
end ar_dyn
1

Tak, teraz musisz to połączyć :) W modelu poziom wyżej oraz podpiąć sygnały z płyty

0

A czy bd się to zmieniać co 1s

0

Dzięki za pomoc. Ale mam jeszcze jedną prośbę czy możecie mi pomóc w połączeniu tych dwóch kodów w jeden kod bo nie wiem jak to zrobić. A po drugie potrzebuje jeszcze opis krok po kroku co dzieje się w każdej linijce krok po kroku. Czy możecie mi w tym pomóc.

0

Witam
Ponawiam swoje pytanie czy ktoś może mi pomóc połączyć te dwa kody w jeden kod ??

0
Alag napisał(a):

Tak, teraz musisz to połączyć :) W modelu poziom wyżej oraz podpiąć sygnały z płyty

Dzięki za pomoc. Ale mam jeszcze jedną prośbę czy możecie mi pomóc w połączeniu tych dwóch kodów w jeden kod bo nie wiem jak to zrobić. A po drugie potrzebuje jeszcze opis krok po kroku co dzieje się w każdej linijce krok po kroku. Czy możecie mi w tym pomóc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1