-- ADS1274_DRIVER.vhd library IEEE; use IEEE.std_logic_1164.all; use IEEE.numeric_std.all; library lpp; use lpp.lpp_ad_conv.all; use lpp.general_purpose.all; entity ADS1274_DRIVER is generic(modeCfg : ADS127X_MODE_Type := ADS127X_MODE_low_power; formatCfg : ADS127X_FORMAT_Type := ADS127X_FSYNC_FORMAT); port( Clk : in std_logic; reset : in std_logic; SpiClk : out std_logic; DIN : in std_logic_vector(3 downto 0); Ready : in std_logic; Format : out std_logic_vector(2 downto 0); Mode : out std_logic_vector(1 downto 0); ClkDiv : out std_logic; PWDOWN : out std_logic_vector(3 downto 0); SmplClk : in std_logic; OUT0 : out std_logic_vector(23 downto 0); OUT1 : out std_logic_vector(23 downto 0); OUT2 : out std_logic_vector(23 downto 0); OUT3 : out std_logic_vector(23 downto 0); FSynch : out std_logic; test : out std_logic ); end ADS1274_DRIVER; architecture ar_ADS1274_DRIVER of ADS1274_DRIVER is signal Vec0,Vec1,Vec2,Vec3 : std_logic_vector(23 downto 0); signal SmplClk_Reg : std_logic:= '0'; signal N : integer range 0 to 23 := 0; signal SPI_CLk : std_logic; signal SmplClk_clkd : std_logic:= '0'; begin CLKDIV0 : Clk_Divider2 generic map(16) port map(Clk,SPI_CLk); Mode(1) <= modeCfg(1); Mode(0) <= modeCfg(0); Format(2) <= formatCfg(2); Format(1) <= formatCfg(1); Format(0) <= formatCfg(0); PWDOWN <= "0111"; FSynch <= SmplClk_clkd; ClkDiv <= '1'; SpiClk <= SPI_CLk; test <= '0' when N= 0 else '1'; process(reset,SPI_CLk) begin if reset = '0' then Vec0 <= (others => '0'); Vec1 <= (others => '0'); Vec2 <= (others => '0'); Vec3 <= (others => '0'); N <= 0; elsif SPI_CLk'event and SPI_CLk = '1' then -- SmplClk_clkd <= SmplClk; -- SmplClk_Reg <= SmplClk_clkd; --if ((SmplClk_clkd = '1' and SmplClk_Reg = '0') or (N /= 0)) then if ((SmplClk_clkd = '1' and SmplClk_Reg = '0') or (N /= 0)) then Vec0(0) <= DIN(0); Vec1(0) <= DIN(1); Vec2(0) <= DIN(2); Vec3(0) <= DIN(3); Vec0(23 downto 1) <= Vec0(22 downto 0); Vec1(23 downto 1) <= Vec1(22 downto 0); Vec2(23 downto 1) <= Vec2(22 downto 0); Vec3(23 downto 1) <= Vec3(22 downto 0); if N = 23 then N <= 0; else N <= N+1; end if; end if; end if; end process; process(SPI_CLk) begin if SPI_CLk'event and SPI_CLk ='0' then SmplClk_clkd <= SmplClk; SmplClk_Reg <= SmplClk_clkd; end if; end process; process(SPI_CLk) begin if SPI_CLk'event and SPI_CLk ='1' then if N = 0 then OUT0 <= Vec0; OUT1 <= Vec1; OUT2 <= Vec2; OUT3 <= Vec3; end if; end if; end process; end ar_ADS1274_DRIVER;