|
|
library ieee;
|
|
|
use ieee.std_logic_1164.all;
|
|
|
use IEEE.numeric_std.all;
|
|
|
library grlib, techmap;
|
|
|
use grlib.amba.all;
|
|
|
use grlib.amba.all;
|
|
|
use grlib.stdlib.all;
|
|
|
use techmap.gencomp.all;
|
|
|
use techmap.allclkgen.all;
|
|
|
library gaisler;
|
|
|
use gaisler.memctrl.all;
|
|
|
use gaisler.leon3.all;
|
|
|
use gaisler.uart.all;
|
|
|
use gaisler.misc.all;
|
|
|
--use gaisler.sim.all;
|
|
|
library lpp;
|
|
|
use lpp.lpp_ad_conv.all;
|
|
|
use lpp.lpp_amba.all;
|
|
|
use lpp.apb_devices_list.all;
|
|
|
use lpp.general_purpose.all;
|
|
|
use lpp.Rocket_PCM_Encoder.all;
|
|
|
|
|
|
|
|
|
use work.Convertisseur_config.all;
|
|
|
|
|
|
|
|
|
use work.config.all;
|
|
|
--==================================================================
|
|
|
--
|
|
|
--
|
|
|
-- FPGA FREQ = 48MHz
|
|
|
-- ADC Oscillator frequency = 12MHz
|
|
|
--
|
|
|
--
|
|
|
--==================================================================
|
|
|
|
|
|
entity ici4 is
|
|
|
generic (
|
|
|
fabtech : integer := CFG_FABTECH;
|
|
|
memtech : integer := CFG_MEMTECH;
|
|
|
padtech : integer := CFG_PADTECH;
|
|
|
clktech : integer := CFG_CLKTECH;
|
|
|
WordSize : integer := 8; WordCnt : integer := 144;MinFCount : integer := 64
|
|
|
);
|
|
|
port (
|
|
|
reset : in std_ulogic;
|
|
|
clk : in std_ulogic;
|
|
|
sclk : in std_logic;
|
|
|
Gate : in std_logic;
|
|
|
MinF : in std_logic;
|
|
|
MajF : in std_logic;
|
|
|
Data : out std_logic;
|
|
|
LF_SCK : out std_logic;
|
|
|
LF_CNV : out std_logic;
|
|
|
LF_SDO1 : in std_logic;
|
|
|
LF_SDO2 : in std_logic;
|
|
|
LF_SDO3 : in std_logic;
|
|
|
DC_ADC_Sclk : out std_logic;
|
|
|
DC_ADC_IN : in std_logic_vector(1 downto 0);
|
|
|
DC_ADC_ClkDiv : out std_logic;
|
|
|
DC_ADC_FSynch : out std_logic;
|
|
|
SET_RESET0 : out std_logic;
|
|
|
SET_RESET1 : out std_logic;
|
|
|
LED : out std_logic
|
|
|
);
|
|
|
end;
|
|
|
|
|
|
architecture rtl of ici4 is
|
|
|
|
|
|
signal clk_buf,reset_buf : std_logic;
|
|
|
|
|
|
Constant FramePlacerCount : integer := 2;
|
|
|
|
|
|
|
|
|
signal WordCount : integer range 0 to WordCnt-1;
|
|
|
signal WordClk : std_logic;
|
|
|
|
|
|
|
|
|
signal AMR1X : std_logic_vector(23 downto 0);
|
|
|
signal AMR1Y : std_logic_vector(23 downto 0);
|
|
|
signal AMR1Z : std_logic_vector(23 downto 0);
|
|
|
|
|
|
signal AMR2X : std_logic_vector(23 downto 0);
|
|
|
signal AMR2Y : std_logic_vector(23 downto 0);
|
|
|
signal AMR2Z : std_logic_vector(23 downto 0);
|
|
|
|
|
|
signal AMR3X : std_logic_vector(23 downto 0);
|
|
|
signal AMR3Y : std_logic_vector(23 downto 0);
|
|
|
signal AMR3Z : std_logic_vector(23 downto 0);
|
|
|
|
|
|
signal AMR4X : std_logic_vector(23 downto 0);
|
|
|
signal AMR4Y : std_logic_vector(23 downto 0);
|
|
|
signal AMR4Z : std_logic_vector(23 downto 0);
|
|
|
|
|
|
|
|
|
signal TEMP1 : std_logic_vector(23 downto 0);
|
|
|
signal TEMP2 : std_logic_vector(23 downto 0);
|
|
|
signal TEMP3 : std_logic_vector(23 downto 0);
|
|
|
signal TEMP4 : std_logic_vector(23 downto 0);
|
|
|
|
|
|
signal LF1 : std_logic_vector(15 downto 0);
|
|
|
signal LF2 : std_logic_vector(15 downto 0);
|
|
|
signal LF3 : std_logic_vector(15 downto 0);
|
|
|
|
|
|
signal data_int : std_logic;
|
|
|
|
|
|
signal CrossDomainSync : std_logic;
|
|
|
|
|
|
begin
|
|
|
|
|
|
|
|
|
LED <= not data_int;
|
|
|
data <= data_int;
|
|
|
|
|
|
|
|
|
|
|
|
CDS0 : entity work.CrossDomainSyncGen
|
|
|
Port map(
|
|
|
reset => reset,
|
|
|
ClockS => sclk,
|
|
|
ClockF => clk,
|
|
|
SyncSignal => CrossDomainSync
|
|
|
);
|
|
|
|
|
|
TM : entity work.TM_MODULE
|
|
|
generic map(
|
|
|
WordSize => WordSize,
|
|
|
WordCnt => WordCnt,
|
|
|
MinFCount => MinFCount
|
|
|
)
|
|
|
port map(
|
|
|
|
|
|
reset =>reset,
|
|
|
clk =>clk,
|
|
|
MinF =>MinF,
|
|
|
MajF =>MajF,
|
|
|
sclk =>sclk,
|
|
|
gate =>gate,
|
|
|
data =>data_int,
|
|
|
WordClk =>WordClk,
|
|
|
|
|
|
|
|
|
LF1 => LF1,
|
|
|
LF2 => LF2,
|
|
|
LF3 => LF3,
|
|
|
|
|
|
AMR1X => AMR1X,
|
|
|
AMR1Y => AMR1Y,
|
|
|
AMR1Z => AMR1Z,
|
|
|
|
|
|
AMR2X => AMR2X,
|
|
|
AMR2Y => AMR2Y,
|
|
|
AMR2Z => AMR2Z,
|
|
|
|
|
|
AMR3X => AMR3X,
|
|
|
AMR3Y => AMR3Y,
|
|
|
AMR3Z => AMR3Z,
|
|
|
|
|
|
AMR4X => AMR4X,
|
|
|
AMR4Y => AMR4Y,
|
|
|
AMR4Z => AMR4Z,
|
|
|
|
|
|
Temp1 => Temp1,
|
|
|
Temp2 => Temp2,
|
|
|
Temp3 => Temp3,
|
|
|
Temp4 => Temp4
|
|
|
);
|
|
|
|
|
|
DC_ADC0:entity work.DC_ACQ_TOP
|
|
|
generic map (
|
|
|
WordSize => WordSize,
|
|
|
WordCnt => WordCnt,
|
|
|
MinFCount => MinFCount,
|
|
|
EnableSR => 0,
|
|
|
CstDATA => SEND_CONSTANT_DATA,
|
|
|
FakeADC => 0
|
|
|
)
|
|
|
port map(
|
|
|
|
|
|
reset => reset,
|
|
|
clk => clk,
|
|
|
SyncSig => CrossDomainSync,
|
|
|
minorF => minF,
|
|
|
majorF => majF,
|
|
|
sclk => sclk,
|
|
|
WordClk => WordClk,
|
|
|
|
|
|
DC_ADC_Sclk => DC_ADC_Sclk,
|
|
|
DC_ADC_IN => DC_ADC_IN,
|
|
|
DC_ADC_ClkDiv => DC_ADC_ClkDiv,
|
|
|
DC_ADC_FSynch => DC_ADC_FSynch,
|
|
|
SET_RESET0 => SET_RESET0,
|
|
|
SET_RESET1 => SET_RESET1,
|
|
|
|
|
|
AMR1X => AMR1X,
|
|
|
AMR1Y => AMR1Y,
|
|
|
AMR1Z => AMR1Z,
|
|
|
|
|
|
AMR2X => AMR2X,
|
|
|
AMR2Y => AMR2Y,
|
|
|
AMR2Z => AMR2Z,
|
|
|
|
|
|
AMR3X => AMR3X,
|
|
|
AMR3Y => AMR3Y,
|
|
|
AMR3Z => AMR3Z,
|
|
|
|
|
|
AMR4X => AMR4X,
|
|
|
AMR4Y => AMR4Y,
|
|
|
AMR4Z => AMR4Z,
|
|
|
|
|
|
Temp1 => Temp1,
|
|
|
Temp2 => Temp2,
|
|
|
Temp3 => Temp3,
|
|
|
Temp4 => Temp4
|
|
|
);
|
|
|
|
|
|
|
|
|
LF: entity work.LF_ACQ_TOP
|
|
|
generic map(
|
|
|
WordSize => WordSize,
|
|
|
WordCnt => WordCnt,
|
|
|
MinFCount => MinFCount,
|
|
|
CstDATA => SEND_CONSTANT_DATA,
|
|
|
IIRFilter => 0
|
|
|
)
|
|
|
port map(
|
|
|
|
|
|
reset => reset,
|
|
|
clk => clk,
|
|
|
SyncSig => CrossDomainSync,
|
|
|
minorF => minF,
|
|
|
majorF => majF,
|
|
|
sclk => sclk,
|
|
|
WordClk => WordClk,
|
|
|
LF_SCK => LF_SCK,
|
|
|
LF_CNV => LF_CNV,
|
|
|
LF_SDO1 => LF_SDO1,
|
|
|
LF_SDO2 => LF_SDO2,
|
|
|
LF_SDO3 => LF_SDO3,
|
|
|
LF1 => LF1,
|
|
|
LF2 => LF2,
|
|
|
LF3 => LF3
|
|
|
);
|
|
|
|
|
|
end rtl;
|
|
|
|
|
|
|
|
|
|
|
|
|