|
|
-- 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 ADS1278_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(7 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(7 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);
|
|
|
OUT4 : out std_logic_vector(23 downto 0);
|
|
|
OUT5 : out std_logic_vector(23 downto 0);
|
|
|
OUT6 : out std_logic_vector(23 downto 0);
|
|
|
OUT7 : out std_logic_vector(23 downto 0);
|
|
|
FSynch : out std_logic
|
|
|
);
|
|
|
end ADS1278_DRIVER;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
architecture ar_ADS1278_DRIVER of ADS1278_DRIVER is
|
|
|
|
|
|
signal Vec0,Vec1,Vec2,Vec3,Vec4,Vec5,Vec6,Vec7 : std_logic_vector(23 downto 0);
|
|
|
signal SmplClk_Reg : std_logic:= '0';
|
|
|
signal N : integer range 0 to 23*8 := 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 <= (others => '1');
|
|
|
FSynch <= SmplClk_clkd;
|
|
|
ClkDiv <= '1';
|
|
|
SpiClk <= SPI_CLk;
|
|
|
|
|
|
process(reset,SPI_CLk)
|
|
|
begin
|
|
|
|
|
|
if reset = '0' then
|
|
|
Vec0 <= (others => '0');
|
|
|
Vec1 <= (others => '0');
|
|
|
Vec2 <= (others => '0');
|
|
|
Vec3 <= (others => '0');
|
|
|
Vec4 <= (others => '0');
|
|
|
Vec5 <= (others => '0');
|
|
|
Vec6 <= (others => '0');
|
|
|
Vec7 <= (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);
|
|
|
Vec0(0) <= DIN(0);
|
|
|
Vec0(23 downto 1) <= Vec0(22 downto 0);
|
|
|
Vec1(0) <= Vec0(23);
|
|
|
|
|
|
Vec1(23 downto 1) <= Vec1(22 downto 0);
|
|
|
Vec2(0) <= Vec1(23);
|
|
|
|
|
|
Vec2(23 downto 1) <= Vec2(22 downto 0);
|
|
|
Vec3(0) <= Vec2(23);
|
|
|
|
|
|
Vec3(23 downto 1) <= Vec3(22 downto 0);
|
|
|
Vec4(0) <= Vec3(23);
|
|
|
|
|
|
Vec4(23 downto 1) <= Vec4(22 downto 0);
|
|
|
Vec5(0) <= Vec4(23);
|
|
|
|
|
|
Vec5(23 downto 1) <= Vec5(22 downto 0);
|
|
|
Vec6(0) <= Vec5(23);
|
|
|
|
|
|
Vec6(23 downto 1) <= Vec6(22 downto 0);
|
|
|
Vec7(0) <= Vec6(23);
|
|
|
|
|
|
Vec7(23 downto 1) <= Vec7(22 downto 0);
|
|
|
if N = (23*8) 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;
|
|
|
OUT4 <= Vec4;
|
|
|
OUT5 <= Vec5;
|
|
|
OUT6 <= Vec6;
|
|
|
OUT7 <= Vec7;
|
|
|
end if;
|
|
|
end if;
|
|
|
end process;
|
|
|
|
|
|
end ar_ADS1278_DRIVER;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|