library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity adu is port( CLK: in std_logic; -- Takt 50 MHz ad_SDat: in std_logic; -- serielle Daten vom ADC ad_SCK: out std_logic; -- Schiebetakt für den ADC ad_Strt: out std_logic; -- Wandlungsstart für den ADC led: out std_logic_vector(15 downto 0)); end adu; architecture Behavioral of adu is -- Signale für den Taktteiler signal clkDiv : std_logic_vector (2 downto 0); signal Takt6MHz: std_logic; -- interne Signale, um den ILA anzuschließen -- signal ad_SDat_int, ad_SCK_int, ad_Strt_int: std_logic; -- Schieberegister für den Datenempfang signal DB: std_logic_vector(7 downto 0); -- Automatenzustand des Empfangsautomaten signal sZeit: integer range 0 to 48:=0; begin --============================================================= -- Taktteiler --------------------------------------------------------------- process(CLK) begin if CLK'event and CLK='1' then clkDiv <= clkDiv + '1'; end if; end process; Takt6MHz<=clkDiv(2); --============================================================= -- Empfangsautomat --------------------------------------------------------------- process(Takt6MHz) begin if Takt6MHz'event and Takt6MHz='1' then sZeit<=sZeit+1; case sZeit is when 0 => AD_Strt_int<='0'; when 16 => AD_Strt_int<='1'; -- ... A | B ... Zusammenfassung von Zuständen when 32|34|36|38|40|42|44|46 => AD_SCK_int<='1'; when 33|35|37|39|41|43|45 => AD_SCK_int<='0'; DB<=DB(6 downto 0) & AD_SDat_int; when 47 => AD_SCK_int<='0'; DB<=DB(6 downto 0) & AD_SDat_int; when 48 => led(7 downto 0) <=DB; sZeit<=0; when others => Null; end case; end if; end Process; --============================================================= -- kombinatorische Zuweisungen --------------------------------------------------------------- -- Die internen Signale werden zum Anschluss des integrierten Logik- -- analysators benötigt, denn der ILA kann nicht direkt an Schaltkreis- -- eingänge und -ausgänge angeschlossen werden. ad_SDat_int<=ad_SDat; ad_SCK <=ad_SCK_int; ad_Strt<=ad_Strt_int; --------------------------------------------------------------- end Behavioral;