Baixe o app para aproveitar ainda mais
Prévia do material em texto
Eletrônica Digital Data: 08 / 02 / 2023 Aluno (a): Bruno Gustavo Do Nascimento Avaliação Pratica INSTRUÇÕES: · Esta Avaliação contém 1 (uma) questão, totalizando 10 (dez) pontos; · Baixe o arquivo disponível com a Atividade Pratica; · Você deve preencher dos dados no Cabeçalho para sua identificação: · Nome / Data de entrega. · As respostas devem ser digitadas abaixo de cada pergunta; · Ao terminar grave o arquivo com o nome Atividade Prática; · Quando solicitado · Envio o arquivo pelo sistema no local indicado; · Em caso de dúvidas consulte o seu Tutor. O projeto de circuitos digitais baseados em elementos discretos ou em linguagens de descrição de hardware (hardware description language – HDL), em geral, integra tanto elementos combinacionais quanto sequenciais. Nesse contexto, um projetista deve ter a capacidade de escolher a abordagem que melhor se adequa ao perfil das partes do seu projeto e, assim, realizar uma implementação consistente. Neste Desafio, você, como um profissional da área, deverá desenvolver um circuito digital em HDL contendo elementos com características combinacionais e sequenciais. ry ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; entity counter is port ( clock_i : in std_logic; reset_i : in std_logic; -- output four digits digit1_o : out std_logic_vector(3 downto 0); digit2_o : out std_logic_vector(3 downto 0); digit3_o : out std_logic_vector(3 downto 0); digit4_o : out std_logic_vector(3 downto 0) ) ; end counter ; architecture rtl of counter is -- 1 sec clock signals constant value_1HZ_c : natural := 50000000; -- frequenci clock value. signal clk_1s : std_logic; signal cnt_s : integer := 0 ; -- signals to count every digit 0001 up to 9999 signal unit_counter : integer := 0; signal tens_counter : integer := 0; signal hundred_counter : integer := 0; signal thousand_counter : integer := 0; begin -- process for increment 1 sec clock process(clock_i) begin if rising_edge(clock_i) then if cnt_s = value_1HZ_c - 1 then cnt_s <= 0; clk_1s <= '1'; else cnt_s <= cnt_s + 1; clk_1s <= '0'; end if; end if; end process; -- process for increment unit value, -- reset retur all values to 0 process(clk_1s, reset_i) begin if reset_i = '0' then unit_counter <= 0; tens_counter <= 0; hundred_counter <= 0; thousand_counter <= 0; else if rising_edge(clk_1s) then unit_counter <= unit_counter + 1; if unit_counter >= 9 then unit_counter <= 0; tens_counter <= tens_counter + 1; if tens_counter >= 9 then tens_counter <= 0; hundred_counter <= hundred_counter + 1; if hundred_counter >= 9 then hundred_counter <= 0; thousand_counter <= thousand_counter + 1; if thousand_counter >= 9 then thousand_counter <= 0; end if; end if; end if; end if; end if; end if; end process; digit1_o <= std_logic_vector(to_unsigned(unit_counter , digit1_o'length)); digit2_o <= std_logic_vector(to_unsigned(tens_counter , digit2_o'length)); digit3_o <= std_logic_vector(to_unsigned(hundred_counter , digit3_o'length)); digit4_o <= std_logic_vector(to_unsigned(thousand_counter , digit4_o'length));
Compartilhar