Trebam napisati VHDL (u Xilinxu, ako igra ikakvu ulogu) za sklop koji na izlazu daje frekvenciju 0, 100, 200, 300 ili 400 Hz. Zeljena frekvencija se odabire pomocu prekidaca na Spartan razvojnom sustavu, i prikazuje se na ugrađenim 7 segmentnim displayima..
E sad, napravio sam "module" ili podprograme za svaku od frekvencija, jednostavno kao djelitelje frekvencije, npr za 200Hz:
Code: Select all
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity frek0 is
Port ( cp : in STD_LOGIC;
cp_0 : buffer STD_LOGIC);
end frek0;
architecture Behavioral of frek0 is
begin
cp_0<='0';
end Behavioral;
Code: Select all
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity display200 is
Port ( cp_in : in std_logic;
AN3 : inout std_logic;
AN2 : inout std_logic;
AN1 : inout std_logic;
AN0 : inout std_logic;
led : out std_logic_vector(6 downto 0));
end display200;
architecture Behavioral of display200 is
signal brojac : STD_LOGIC_VECTOR(12 downto 0);
begin
process (cp_in)
begin
if cp_in'event and cp_in = '1' then
if (brojac="0000000000000") then
if (AN0='0') then
AN0 <= '1';
led <= "1000000"; -- 0
AN1 <= '0';
elsif (AN1='0') then
AN1 <= '1';
led <= "1000000"; -- 0
AN2 <= '0';
elsif (AN2='0') then
AN2 <= '1';
led <= "0100100"; -- 2
AN3 <= '0';
elsif (AN3='0') then
AN3 <= '1';
led <= "1111111"; -- ugasen
AN0 <= '0';
end if;
end if;
brojac<=brojac+"0000000000001";
if (brojac > "1000000000000") then
brojac<="0000000000000";
end if;
end if;
end process;
end Behavioral;
1. odmah svaki "prikaz displaya" staviti u "odabranu frekvenciju"
2. da "odabrana frekvencija" poziva podprogram "prikaz displaya"
ili 3. da glavni program (top module) poziva oba podprograma
I što koristiti za sam tok programa? if, switch-case, signal...?
Meni je switch-case nekako najprivlačniji, ali nisam ga koristio dosad baš pa mi je malo problem...
Hvala unaprijed!