library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; -- ADC entity erstellt alle für den ADC erforderlichen Signale entity top is Port ( conv: out std_logic; -- Signal bei dem der ADC geladen wird(high) und sein Datenwort ausgibt(low) sck: out std_logic; -- "Arbeitstakt" von ADC und DAC sdi: out std_logic; -- stellt den Multiplexer des ADC ein clk: in std_logic; -- Haupttakt der Boards(50MHz) reset : in std_logic; -- Masterreset sdo : in std_logic; -- serieller ausgangd adc's ld_piso: out std_logic; cs_ld: out std_logic); end top; architecture ADDA of top is begin sdi<='0'; -- Multiplexerbits = 00; differenzial-mode --############################################################################################## --########################## CONV-Process ######################## --############################################################################################## PRO_CONV: process(clk, reset) -------------- Variablen von conv ------------------------------ variable var_conv: std_logic; -- speichert und invertiert den wert von conv variable var_conv_wert : std_logic_vector(10 downto 0); -- enspricht der anzahl der perioden von main_clk zu erstellung von conv begin if(clk = '1' and clk'event)then if(reset = '1') then var_conv_wert := var_conv_wert + '1'; else conv <= '1'; var_conv := '1'; var_conv_wert := "00000000000"; end if; end if; ------------- Erzeugung des conv-Signals ----------------------- if (var_conv_wert = "101000000000" and var_conv = '1') then -- 1280; conv_low = 12,8µ var_conv := '0'; conv <= var_conv; var_conv_wert := "00000000000"; end if; if (var_conv_wert = "001100100000" and var_conv = '0') then -- 800; conv_high = 8µ var_conv := '1'; conv <= var_conv; var_conv_wert := "00000000000"; end if; end process PRO_CONV; --############################################################################################## --########################## CS_LD-Process ######################## --############################################################################################## PRO_CS_LD:process(clk, reset) -------------- Variablen von cs_ld ------------------------------ variable var_cs_ld: std_logic; variable var_cs_ld_wert: std_logic_vector(10 downto 0); begin if(clk = '1' and clk'event)then if(reset = '1') then var_cs_ld_wert := var_cs_ld_wert + '1'; else cs_ld <= '1'; var_cs_ld := '1'; var_cs_ld_wert := "00011001000"; end if; end if; ------------------- Erzueugung von cs_ld ----------------------------------------- if (var_cs_ld_wert = "11110000000" and var_cs_ld = '1') then -- 1920; cs_ld_low = 19,2µ var_cs_ld := '0'; cs_ld <= var_cs_ld; var_cs_ld_wert := "00000000000"; end if; if (var_cs_ld_wert = "00011110000" and var_cs_ld = '0') then -- 240; cs_ld_high = 2,4µ var_cs_ld := '1'; cs_ld <= var_cs_ld; var_cs_ld_wert := "00000000000"; end if; end process PRO_CS_LD; --############################################################################################## --########################## LD_PISO-Process ######################## --############################################################################################## PRO_LD_PISO:process(clk, reset) -------------- Variablen von ld_piso ------------------------------ variable var_ld: std_logic; variable var_ld_wert: std_logic_vector(10 downto 0); begin if(clk = '1' and clk'event)then if(reset = '1') then var_ld_wert := var_ld_wert + '1'; else ld_piso <= '1'; var_ld := '1'; var_ld_wert := "00000000000"; end if; end if; ----------------- Erzeugung des ld_piso-Signals ---------------------------- if (var_ld_wert = "11111010000" and var_ld = '1') then -- 2000; ld_low = 20µ var_ld := '0'; ld_piso <= var_ld; var_ld_wert := "00000000000"; end if; if (var_ld_wert = "00001010000" and var_ld = '0') then -- 80; ld_high = 0,8µ var_ld := '1'; ld_piso <= var_ld; var_ld_wert := "00000000000"; end if; end process PRO_LD_PISO; --############################################################################################## --########################## SCK-Process ######################## --############################################################################################## PRO_SCK: process(clk, reset) -------------- Variablen von sck ------------------------------ variable var_sck: std_logic; -- speichert und invertiert den wert von sck variable var_sck_wert: std_logic_vector(5 downto 0); -- enspricht der anzahl der perioden von main_clk zu erstellung von sck begin if(clk = '1' and clk'event)then if(reset = '1') then var_sck_wert := var_sck_wert + '1'; else sck <= '1'; var_sck := '1'; var_sck_wert := "000000"; end if; end if; ----------------- Erzeugung des sck-Signals ---------------------------- if (var_sck_wert = "101000") then -- 40; t=0,4µ var_sck := not var_sck; sck <= var_sck; var_sck_wert := "000000"; end if; end process PRO_SCK; end ADDA;