Exercício VHDL

Boa noite,

Eu tenho um exercício de VHDL para resolver e como sou novo nisto não estou a conseguir solucionar o problema. Será que me podem ajudar?

O exercício é o seguinte:

Contador de 32-bits e divisor de frequência :

a) Crie um novo projeto com o nome counter e adicione o ficheiro counter.vhd. Transcreva o Código 3 que se segue para o ficheiro criado, compile e sintetize o circuito digital enviando-o de seguida para o FPGA. Teste o circuito e verifique se obteve os resultados esperados. Tenha em atenção que o relógio é de 50 MHz!



Pinos físicos do FPGA: led → LEDs 0 a 7 clk → Pino B8 do FPGA (MCLK)

b) Altere o divisor de frequência de modo a obter na saída B2 do porto JA uma onda quadrada com uma frequência de 25 kHz. Teste o circuito e comprove o funcionamento com a ajuda do osciloscópio.

c) Crie um novo projecto chamado frequency_divider e adicione o ficheiro frequency_divider.vhd. Implemente um gerador de funções capaz de fornecer na sua única saída out_frequency uma onda quadrada com diferentes frequências programadas através do valor de 4 bits da entrada sel. Para 0000 devemos ter na saída 25 MHz, para 0001 devemos ter na sua saída 12,5 MHz, e assim sucessivamente até termos 762.94 Hz para um valor de entrada igual a 1111. Pinos físicos do FPGA: clk → Pino B8 do FPGA (MCLK) sel → Interruptores 3-0 out_frequency → saída B2 do porto JA
 
para fazer o contador
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.NUMERIC_STD.all;
entity contador is

port(input : in std_logic;
clk, reset : in std_logic;
output : out std_logic_vector(31 downto 0));

end contador

architecture Behavioral of contador is
signal s_count : unsigned(31 downto 0);

begin
process(clk)
begin
if(rising_edge(clk)) then
if(reset ='1') then
s_count<=0;
end if;
if(input='1') then
s_count<=s_count+1;
else
s_count<=s_count;
end if;
end if;

end process;

output<=std_logic_vector(s_count);

end Behavioral;
 
Back
Topo