AD-Wandler
Hello World =)
Vielleicht kennt sich jemand besser aus mit AMS, als ich! Aufgabe ist, einen AD-Wandler zu schreiben, der für eine Eingangsspannung zwischen 0 und 5 V 8 digitale Werte ausgibt. Hier mein Code:
--library ieee;
--use ieee.electrical_systems.all;
LIBRARY DISCIPLINES; -- Ich benutze hAMSter
USE DISCIPLINES.ELECTROMAGNETIC_SYSTEM.ALL;
entity a2d is
generic (vthreshold : real := 0.625);
port (D_output : out bit_vector (2 downto 0);
terminal a_input, electrical_ref : electrical);
end entity a2d;
architecture behavioral of a2d is
quantity vin ACROSS a_input to electrical_ref;
begin
process (vin) is
begin
IF (vin'above(vthreshold)) then -- 0 - 0,625 V
d_output <= '000';
ELSE IF (vin'above(vthreshold*2)) then -- 0,626 - 1,25 V
d_output <= '001';
ELSE IF (vin'above(vthreshold*3)) then -- ... - 1,875 V
d_output <= '010';
ELSE IF (vin'above(vthreshold*4)) then -- ... - 2,5 V
d_output <= '011';
ELSE IF (vin'above(vthreshold*5)) then -- ... - 3,125 V
d_output <= '100';
ELSE IF (vin'above(vthreshold*6)) then -- ... - 3,75 V
d_output <= '101';
ELSE IF (vin'above(vthreshold*7)) then -- ... - 4,375 V
d_output <= '110';
ELSE -- (vin'above(vthreshold*8)) then -- ... - 5 V
d_output <= '111';
end process;
end architecture behavioral;
begin
vin == sin(2.0 * math_pi * f * NOW);
end;
Ich müsste unbedingt noch abgrenzen, also z.B. '001' bei (not (vin'above(vthreshold)) && vin'above(vthreshold*2)) oder so...
Hat jemand eine Idee?