--
--
-- Wrapper for HPC Common Interface
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_misc.all;
library work;
use work.common_interface.all;
use work.adp_pupe_pkg.all;
library UNISIM;
use UNISIM.vcomponents.all;
entity wrapper is
port(
lclk : in std_logic;
clk200_p : in std_logic;
clk200_n : in std_logic;
lreseto_l : in std_logic;
lwrite : in std_logic;
lads_l : in std_logic;
lblast_l : in std_logic;
lbterm_l : out std_logic;
lad : inout std_logic_vector(63 downto 0);
lreadyi_l : out std_logic;
lbe_l : in std_logic_vector(7 downto 0);
fholda : in std_logic;
finti_l : out std_logic;
DDR0_RAS_N : out std_logic;
DDR0_CAS_N : out std_logic;
DDR0_WE_N : out std_logic;
DDR0_ODT : out std_logic;
DDR0_CKE : out std_logic;
DDR0_CS_N : out std_logic;
DDR0_DQ : inout std_logic_vector(31 downto 0);
DDR0_DQS : inout std_logic_vector(3 downto 0);
DDR0_DQS_N : inout std_logic_vector(3 downto 0);
DDR0_DM : out std_logic_vector(3 downto 0);
DDR0_CK : out std_logic_vector(1 downto 0);
DDR0_CK_N : out std_logic_vector(1 downto 0);
DDR0_BA : out std_logic_vector(2 downto 0);
DDR0_A : out std_logic_vector(12 downto 0);
DDR1_RAS_N : out std_logic;
DDR1_CAS_N : out std_logic;
DDR1_WE_N : out std_logic;
DDR1_ODT : out std_logic;
DDR1_CKE : out std_logic;
DDR1_CS_N : out std_logic;
DDR1_DQ : inout std_logic_vector(31 downto 0);
DDR1_DQS : inout std_logic_vector(3 downto 0);
DDR1_DQS_N : inout std_logic_vector(3 downto 0);
DDR1_DM : out std_logic_vector(3 downto 0);
DDR1_CK : out std_logic_vector(1 downto 0);
DDR1_CK_N : out std_logic_vector(1 downto 0);
DDR1_BA : out std_logic_vector(2 downto 0);
DDR1_A : out std_logic_vector(12 downto 0);
DDR2_RAS_N : out std_logic;
DDR2_CAS_N : out std_logic;
DDR2_WE_N : out std_logic;
DDR2_ODT : out std_logic;
DDR2_CKE : out std_logic;
DDR2_CS_N : out std_logic;
DDR2_DQ : inout std_logic_vector(31 downto 0);
DDR2_DQS : inout std_logic_vector(3 downto 0);
DDR2_DQS_N : inout std_logic_vector(3 downto 0);
DDR2_DM : out std_logic_vector(3 downto 0);
DDR2_CK : out std_logic_vector(1 downto 0);
DDR2_CK_N : out std_logic_vector(1 downto 0);
DDR2_BA : out std_logic_vector(2 downto 0);
DDR2_A : out std_logic_vector(12 downto 0);
DDR3_RAS_N : out std_logic;
DDR3_CAS_N : out std_logic;
DDR3_WE_N : out std_logic;
DDR3_ODT : out std_logic;
DDR3_CKE : out std_logic;
DDR3_CS_N : out std_logic;
DDR3_DQ : inout std_logic_vector(31 downto 0);
DDR3_DQS : inout std_logic_vector(3 downto 0);
DDR3_DQS_N : inout std_logic_vector(3 downto 0);
DDR3_DM : out std_logic_vector(3 downto 0);
DDR3_CK : out std_logic_vector(1 downto 0);
DDR3_CK_N : out std_logic_vector(1 downto 0);
DDR3_BA : out std_logic_vector(2 downto 0);
DDR3_A : out std_logic_vector(12 downto 0);
-- MGTs
-- PCIE_RX_P : in std_logic_vector(7 downto 0);
-- PCIE_RX_N : in std_logic_vector(7 downto 0);
-- PCIE_TX_P : out std_logic_vector(7 downto 0);
-- PCIE_TX_N : out std_logic_vector(7 downto 0);
-- REAR_RX_P : in std_logic_vector(3 downto 0);
-- REAR_RX_N : in std_logic_vector(3 downto 0);
-- REAR_TX_P : out std_logic_vector(3 downto 0);
-- REAR_TX_N : out std_logic_vector(3 downto 0);
-- FRONT_RX_P : in std_logic_vector(3 downto 0);
-- FRONT_RX_N : in std_logic_vector(3 downto 0);
-- FRONT_TX_P : out std_logic_vector(3 downto 0);
-- FRONT_TX_N : out std_logic_vector(3 downto 0);
-------------------------------------
--Front panel debug I/O
-------------------------------------
debugio_dirn :out std_logic_vector(2 downto 0);
debugio :inout std_logic_vector(2 downto 0);
-------------------------------------
-------------------------------------
--Timing bus I/O
-------------------------------------
tbus_bplane :inout std_logic_vector(10 downto 1);
tbus_header :inout std_logic_vector(10 downto 1);
--always inputs
tbus_master :in std_logic_vector(10 downto 1);
-------------------------------------
-------------------------------------
-- Misc
-------------------------------------
red_led :out std_logic_vector( 1 downto 0);
yellow_led :out std_logic_vector( 1 downto 0);
-------------------------------------
-------------------------------------
--FPGA clocks
-------------------------------------
--Copy of external Synth 10Mhz refck via buffer
fpga_10mhz_refckin_p :in std_logic;
fpga_10mhz_refckin_n :in std_logic;
-------------------------------------
--Synthesiser Control
-------------------------------------
synth_csb :out std_logic;
synth_func :out std_logic;
synth_sclk :out std_logic;
synth_sdio :inout std_logic;
synth_sdo :in std_logic;
synth_status :in std_logic;
vcxo_enable :out std_logic;
-------------------------------------
-------------------------------------
-- Sample clock from synthesiser chain
--
-------------------------------------
sampck_p :in std_logic;
sampck_n :in std_logic;
-------------------------------------
-------------------------------------
-- ADC Channels
-- Physical ordering determined by UCF
-------------------------------------
adc_data0 :in std_logic_vector(13 downto 0);
adc_data1 :in std_logic_vector(13 downto 0);
adc_data2 :in std_logic_vector(13 downto 0);
adc_data3 :in std_logic_vector(13 downto 0);
adc_data4 :in std_logic_vector(13 downto 0);
adc_data5 :in std_logic_vector(13 downto 0);
adc_data6 :in std_logic_vector(13 downto 0);
adc_data7 :in std_logic_vector(13 downto 0);
adc_data8 :in std_logic_vector(13 downto 0);
-- data paths from from ADCs,
--ADC_CHANCNT deep, ADC_WIDTH wide
adc_ovf :in std_logic_vector(ADC_CHANCNT-1 downto 0); -- overrange from ADCs
adca_oe_l :out std_logic; -- parallel out enable to ADC chan A
adcb_oe_l :out std_logic; -- parallel out enable to ADC chan B
adcc_oe_l :out std_logic; -- parallel out enable to ADC chan C
-------------------------------------
--PHY signals
phy_reset_l :out std_logic;
phy_mdck :out std_logic;
phy_mdio :inout std_logic
);
end wrapper;
architecture mixed of wrapper is
component user_top_level
port (
clk : in std_logic;
rst : in std_logic;
system_in : in std_logic_vector(system_width-1 downto 0);
system_out : out std_logic_vector(system_width-1 downto 0);
-- Timing Inputs
tbus_bplane :inout std_logic_vector(10 downto 1);
tbus_header :inout std_logic_vector(10 downto 1);
tbus_master :in std_logic_vector(10 downto 1);
ten_mhz_clk : in std_logic;
-- IO Output
phase_table_msb_out : out std_logic_vector(2 downto 0);
-- ADC Inputs
adc_in_0_0 : in std_logic_vector(13 downto 0);
adc_in_0_1 : in std_logic_vector(13 downto 0);
adc_in_0_2 : in std_logic_vector(13 downto 0);
adc_in_1_0 : in std_logic_vector(13 downto 0);
adc_in_1_1 : in std_logic_vector(13 downto 0);
adc_in_1_2 : in std_logic_vector(13 downto 0);
adc_in_2_0 : in std_logic_vector(13 downto 0);
adc_in_2_1 : in std_logic_vector(13 downto 0);
adc_in_2_2 : in std_logic_vector(13 downto 0);
adc_enb : out std_logic_vector(2 downto 0);
syn_rst : out std_logic;
user_leds : out std_logic_vector(1 downto 0);
debug : in std_logic_vector(63 downto 0)
);
end component;
-- XST black box declaration
-- attribute box_type : string;
-- attribute box_type of user_top_level : component is "black_box";
-- Synplicity black box declaration
-- attribute syn_black_box : boolean;
-- attribute syn_black_box of user_top_level : component is true;
component commonif
port(
lclk : in std_logic;
clk200_p : in std_logic;
clk200_n : in std_logic;
adcclk : in std_logic;
lreseto_l : in std_logic;
lwrite : in std_logic;
lads_l : in std_logic;
lblast_l : in std_logic;
lbterm_o : out std_logic;
lbterm_oe : out std_logic;
lad_i : in std_logic_vector(63 downto 0);
lad_o : out std_logic_vector(63 downto 0);
lad_oe : out std_logic;
lreadyi_o : out std_logic;
lreadyi_oe : out std_logic;
lbe_l : in std_logic_vector(7 downto 0);
fholda : in std_logic;
finti_l : out std_logic;
-- DDRII Memory Banks
DDR0_RAS_N : out std_logic;
DDR0_CAS_N : out std_logic;
DDR0_WE_N : out std_logic;
DDR0_ODT : out std_logic;
DDR0_CKE : out std_logic;
DDR0_CS_N : out std_logic;
DDR0_DQ : inout std_logic_vector(31 downto 0);
DDR0_DQS : inout std_logic_vector(3 downto 0);
DDR0_DQS_N : inout std_logic_vector(3 downto 0);
DDR0_DM : out std_logic_vector(3 downto 0);
DDR0_CK : out std_logic_vector(1 downto 0);
DDR0_CK_N : out std_logic_vector(1 downto 0);
DDR0_BA : out std_logic_vector(2 downto 0);
DDR0_A : out std_logic_vector(12 downto 0);
DDR1_RAS_N : out std_logic;
DDR1_CAS_N : out std_logic;
DDR1_WE_N : out std_logic;
DDR1_ODT : out std_logic;
DDR1_CKE : out std_logic;
DDR1_CS_N : out std_logic;
DDR1_DQ : inout std_logic_vector(31 downto 0);
DDR1_DQS : inout std_logic_vector(3 downto 0);
DDR1_DQS_N : inout std_logic_vector(3 downto 0);
DDR1_DM : out std_logic_vector(3 downto 0);
DDR1_CK : out std_logic_vector(1 downto 0);
DDR1_CK_N : out std_logic_vector(1 downto 0);
DDR1_BA : out std_logic_vector(2 downto 0);
DDR1_A : out std_logic_vector(12 downto 0);
DDR2_RAS_N : out std_logic;
DDR2_CAS_N : out std_logic;
DDR2_WE_N : out std_logic;
DDR2_ODT : out std_logic;
DDR2_CKE : out std_logic;
DDR2_CS_N : out std_logic;
DDR2_DQ : inout std_logic_vector(31 downto 0);
DDR2_DQS : inout std_logic_vector(3 downto 0);
DDR2_DQS_N : inout std_logic_vector(3 downto 0);
DDR2_DM : out std_logic_vector(3 downto 0);
DDR2_CK : out std_logic_vector(1 downto 0);
DDR2_CK_N : out std_logic_vector(1 downto 0);
DDR2_BA : out std_logic_vector(2 downto 0);
DDR2_A : out std_logic_vector(12 downto 0);
DDR3_RAS_N : out std_logic;
DDR3_CAS_N : out std_logic;
DDR3_WE_N : out std_logic;
DDR3_ODT : out std_logic;
DDR3_CKE : out std_logic;
DDR3_CS_N : out std_logic;
DDR3_DQ : inout std_logic_vector(31 downto 0);
DDR3_DQS : inout std_logic_vector(3 downto 0);
DDR3_DQS_N : inout std_logic_vector(3 downto 0);
DDR3_DM : out std_logic_vector(3 downto 0);
DDR3_CK : out std_logic_vector(1 downto 0);
DDR3_CK_N : out std_logic_vector(1 downto 0);
DDR3_BA : out std_logic_vector(2 downto 0);
DDR3_A : out std_logic_vector(12 downto 0);
debug : out std_logic_vector(63 downto 0);
-- Interface to Synth
synth_cntrl : out std_logic_vector(15 downto 0);
synth_strb : out std_logic_vector(3 downto 0);
synth_status : in std_logic_vector(31 downto 0);
synth_rst : out std_logic;
-- Interface to User Top Level
clk : out std_logic;
rst : out std_logic;
system_in : out std_logic_vector(system_width-1 downto 0);
system_out : in std_logic_vector(system_width-1 downto 0));
end component;
component sampck_synth is
generic
(
END_CNT :positive := 2
);
port
(
reset :in std_logic;
clock :in std_logic;
wr_data :in std_logic_vector( 7 downto 0);
rd_data :out std_logic_vector( 7 downto 0);
rd_status :out std_logic;
address :in std_logic_vector( 7 downto 0);
loc_func :in std_logic;
rd_strobe :in std_logic;
wr_strobe :in std_logic;
busy :out std_logic;
busy_flag :out std_logic;
init_busy :out std_logic;
synth_status :in std_logic; --ad9510 monitor output, fpga input
synth_sclk :out std_logic; --ad9510 serial clock, fpga output
synth_sdio :out std_logic; --ad9510 data in, fpga output
synth_sdo :in std_logic; --ad 9510 data out, fpga input
synth_csb :out std_logic; --ad9510 cs, active low, fpga output
synth_func :out std_logic --ad9510 multipurpose input
--debug :out std_logic_vector( 31 downto 0)
);
end component sampck_synth;
signal system_in, system_out : std_logic_vector(system_width-1 downto 0);
signal clk, rst : std_logic;
attribute clock_signal : string;
attribute clock_signal of clk : signal is "yes";
attribute clock_signal of rst : signal is "yes";
component IOBUF is
port (
I : in std_logic;
IO : inout std_logic;
O : out std_logic;
T : in std_logic
);
end component;
signal lreadyi_o : std_logic;
signal lreadyi_oe : std_logic;
signal lbterm_o : std_logic;
signal lbterm_oe : std_logic;
signal lad_o : std_logic_vector(63 downto 0);
signal lad_i : std_logic_vector(63 downto 0);
signal lad_oe : std_logic;
-------------------------------------------------------------------
--
-- NULL_PAIR core component declaration
--
-------------------------------------------------------------------
component NULL_PAIR
port (
GREFCLK_IN : in std_logic;
RX1N_IN : in std_logic_vector(1 downto 0);
RX1P_IN : in std_logic_vector(1 downto 0);
TX1N_OUT : out std_logic_vector(1 downto 0);
TX1P_OUT : out std_logic_vector(1 downto 0));
end component;
attribute box_type : string;
attribute box_type of NULL_PAIR : component is "user_black_box";
-- Timing and ADC I/0
-- Temporarily Defined as signals
-- To be defined as Ports when actual I/O pins defined
-- Timing INputs
signal cycle_start : std_logic;
signal cycle_stop : std_logic;
signal cal_start : std_logic;
signal cal_stop : std_logic;
signal injection : std_logic;
signal hchange : std_logic;
signal fref : std_logic;
signal ten_mhz_clk : std_logic;
-- Timing Outputs
signal cycle_start_o : std_logic;
signal cycle_stop_o : std_logic;
signal cal_start_o : std_logic;
signal cal_stop_o : std_logic;
signal injection_o : std_logic;
signal hchange_o : std_logic;
signal fref_o : std_logic;
signal ten_mhz_clk_o : std_logic;
-- ADC Inputs
signal adc_in_0_0 : std_logic_vector(13 downto 0);
signal adc_in_0_1 : std_logic_vector(13 downto 0);
signal adc_in_0_2 : std_logic_vector(13 downto 0);
signal adc_in_1_0 : std_logic_vector(13 downto 0);
signal adc_in_1_1 : std_logic_vector(13 downto 0);
signal adc_in_1_2 : std_logic_vector(13 downto 0);
signal adc_in_2_0 : std_logic_vector(13 downto 0);
signal adc_in_2_1 : std_logic_vector(13 downto 0);
signal adc_in_2_2 : std_logic_vector(13 downto 0);
signal adc_clk : std_logic;
signal samp_clk_sig : std_logic;
signal adc_enb : std_logic_vector(2 downto 0);
signal syn_rst : std_logic;
signal synth_rst_sig : std_logic;
signal adc_samp_data : SLV_ARRAY_ADCCHAN;
signal clk_counter125 : std_logic_vector(31 downto 0);
signal clk_led125 : std_logic := '0';
signal clk_counter10 : std_logic_vector(31 downto 0);
signal clk_led10 : std_logic := '0';
signal auto_rst : std_logic;
signal lclk_i : std_logic;
signal rst_count : std_logic_vector(3 downto 0);
signal auto_counter : std_logic_vector(3 downto 0);
signal auto_count : std_logic_vector(11 downto 0);
signal cc_reg1,cc_reg2 : std_logic_vector(7 downto 0);
signal synth_cntrl : std_logic_vector(15 downto 0);
signal synth_strb : std_logic_vector(3 downto 0);
signal synth_status_bus : std_logic_vector(31 downto 0);
signal synth_strb_sig :std_logic_vector( 3 downto 0);
signal synth_strb_pl_sig :std_logic_vector( 3 downto 0);
signal synth_cntrl_sig :std_logic_vector( 23 downto 0);
signal synth_busy_sig :std_logic;
signal synth_busy_flag_sig :std_logic;
signal synth_init_busy_sig :std_logic;
signal synth_status_sig :std_logic;
signal synth_rd_strobe_sig :std_logic;
signal synth_wr_strobe_sig :std_logic;
signal synth_init_sig : std_Logic;
signal synth_func_sig : std_Logic;
signal phase_table_msb_out : std_logic_vector(2 downto 0);
signal user_leds : std_logic_vector(1 downto 0);
signal debug : std_logic_vector(63 downto 0);
component phy_cntrl is
port
(
--Host controls
reset :in std_logic;
clock :in std_logic;
ckdiv_cnt :in std_logic_vector(15 downto 0);
rd_flag :in std_logic;
wr_flag :in std_logic;
busy :out std_logic;
-- Params for I2C transfer
phy_addr :in std_logic_vector(4 downto 0);
reg_addr :in std_logic_vector(4 downto 0);
wrdata_in :in std_logic_vector(15 downto 0);
rddata_out :out std_logic_vector(15 downto 0);
--PHY signals
phy_reset_l :out std_logic;
i2c_clock :out std_logic;
i2c_data :inout std_logic
);
end component phy_cntrl;
begin
user0 : user_top_level
port map (
clk => clk,
rst => rst,
system_in => system_in,
system_out => system_out,
tbus_bplane => tbus_bplane,
tbus_header => tbus_header,
tbus_master => tbus_master,
ten_mhz_clk => ten_mhz_clk,
phase_table_msb_out => phase_table_msb_out,
adc_in_0_0 => adc_in_0_0,
adc_in_0_1 => adc_in_0_1,
adc_in_0_2 => adc_in_0_2,
adc_in_1_0 => adc_in_1_0,
adc_in_1_1 => adc_in_1_1,
adc_in_1_2 => adc_in_1_2,
adc_in_2_0 => adc_in_2_0,
adc_in_2_1 => adc_in_2_1,
adc_in_2_2 => adc_in_2_2,
adc_enb => adc_enb,
syn_rst => open,
user_leds => user_leds,
debug => debug
);
commonif0 : commonif
port map (
lclk => lclk,
clk200_p => clk200_p,
clk200_n => clk200_n,
adcclk => adc_clk,
lreseto_l => lreseto_l,
lwrite => lwrite,
lads_l => lads_l,
lblast_l => lblast_l,
lbterm_o => lbterm_o,
lbterm_oe => lbterm_oe,
lad_i => lad_i,
lad_o => lad_o,
lad_oe => lad_oe,
lreadyi_o => lreadyi_o,
lreadyi_oe => lreadyi_oe,
lbe_l => lbe_l,
fholda => fholda,
finti_l => finti_l,
DDR0_RAS_N => DDR0_RAS_N,
DDR0_CAS_N => DDR0_CAS_N,
DDR0_WE_N => DDR0_WE_N,
DDR0_ODT => DDR0_ODT,
DDR0_CKE => DDR0_CKE,
DDR0_CS_N => DDR0_CS_N,
DDR0_DQ => DDR0_DQ,
DDR0_DQS => DDR0_DQS,
DDR0_DQS_N => DDR0_DQS_N,
DDR0_DM => DDR0_DM,
DDR0_CK => DDR0_CK,
DDR0_CK_N => DDR0_CK_N,
DDR0_BA => DDR0_BA,
DDR0_A => DDR0_A,
DDR1_RAS_N => DDR1_RAS_N,
DDR1_CAS_N => DDR1_CAS_N,
DDR1_WE_N => DDR1_WE_N,
DDR1_ODT => DDR1_ODT,
DDR1_CKE => DDR1_CKE,
DDR1_CS_N => DDR1_CS_N,
DDR1_DQ => DDR1_DQ,
DDR1_DQS => DDR1_DQS,
DDR1_DQS_N => DDR1_DQS_N,
DDR1_DM => DDR1_DM,
DDR1_CK => DDR1_CK,
DDR1_CK_N => DDR1_CK_N,
DDR1_BA => DDR1_BA,
DDR1_A => DDR1_A,
DDR2_RAS_N => DDR2_RAS_N,
DDR2_CAS_N => DDR2_CAS_N,
DDR2_WE_N => DDR2_WE_N,
DDR2_ODT => DDR2_ODT,
DDR2_CKE => DDR2_CKE,
DDR2_CS_N => DDR2_CS_N,
DDR2_DQ => DDR2_DQ,
DDR2_DQS => DDR2_DQS,
DDR2_DQS_N => DDR2_DQS_N,
DDR2_DM => DDR2_DM,
DDR2_CK => DDR2_CK,
DDR2_CK_N => DDR2_CK_N,
DDR2_BA => DDR2_BA,
DDR2_A => DDR2_A,
DDR3_RAS_N => DDR3_RAS_N,
DDR3_CAS_N => DDR3_CAS_N,
DDR3_WE_N => DDR3_WE_N,
DDR3_ODT => DDR3_ODT,
DDR3_CKE => DDR3_CKE,
DDR3_CS_N => DDR3_CS_N,
DDR3_DQ => DDR3_DQ,
DDR3_DQS => DDR3_DQS,
DDR3_DQS_N => DDR3_DQS_N,
DDR3_DM => DDR3_DM,
DDR3_CK => DDR3_CK,
DDR3_CK_N => DDR3_CK_N,
DDR3_BA => DDR3_BA,
DDR3_A => DDR3_A,
debug => debug,
synth_cntrl => synth_cntrl,
synth_strb => synth_strb,
synth_status => synth_status_bus,
synth_rst => syn_rst,
clk => clk,
rst => rst,
system_in => system_in,
system_out => system_out);
-- BTERM should only be driven when the fpga is addressed otherwise
-- float, because the control logic on the XRC might also drive it.
--
update_bterm : process(lbterm_o, lbterm_oe)
begin
if lbterm_oe = '1' then
lbterm_l <= not lbterm_o;
else
lbterm_l <= 'Z';
end if;
end process update_bterm;
--
-- LREADYI# should only be driven when the fpga is addressed, otherwise
-- float because the control logic on the XRC might also drive it.
--
update_ready : process(lreadyi_o, lreadyi_oe)
begin
if lreadyi_oe = '1' then
lreadyi_l <= not lreadyi_o;
else
lreadyi_l <= 'Z';
end if;
end process update_ready;
--
-- Drive the local data bus on a read.
--
data_bus : process(lad_oe, lad_o)
begin
if lad_oe = '1' then
lad <= lad_o;
else
lad <= (others => 'Z');
end if;
end process data_bus;
lad_i <= lad;
--==============================================================================================
--External clock input buffer
--==============================================================================================
ibuf_ext_clk:IBUFGDS
port map(
O => samp_clk_sig,
I => sampck_p,
IB =>sampck_n
);
adcclk_bufg : BUFG
port map (
I => samp_clk_sig,
O => adc_clk);
-- Register ADC inputs in IOBs on falling edge of ADC CLK
reg_adc: process (adc_clk)
begin -- process reg_adc
if adc_clk'event and adc_clk = '0' then -- falling clock edge
adc_samp_data(0) <= adc_data0;
adc_samp_data(1) <= adc_data1;
adc_samp_data(2) <= adc_data2;
adc_samp_data(3) <= adc_data3;
adc_samp_data(4) <= adc_data4;
adc_samp_data(5) <= adc_data5;
adc_samp_data(6) <= adc_data6;
adc_samp_data(7) <= adc_data7;
adc_samp_data(8) <= adc_data8;
end if;
end process reg_adc;
-- reg_adc: process (samp_clk_sig)
-- begin -- process reg_adc
-- if samp_clk_sig'event and samp_clk_sig = '0' then -- falling clock edge
-- adc_samp_data(0) <= adc_data0;
-- adc_samp_data(1) <= adc_data1;
-- adc_samp_data(2) <= adc_data2;
-- adc_samp_data(3) <= adc_data3;
-- adc_samp_data(4) <= adc_data4;
-- adc_samp_data(5) <= adc_data5;
-- adc_samp_data(6) <= adc_data6;
-- adc_samp_data(7) <= adc_data7;
-- adc_samp_data(8) <= adc_data8;
-- end if;
-- end process reg_adc;
-- Register ADC signals on rising edge of ADC CLK
reg_inputs: process (clk, rst)
begin -- process dummy_inputs
if rst = '1' then
adc_in_0_0 <= (others => '0');
adc_in_0_1 <= (others => '0');
adc_in_0_2 <= (others => '0');
adc_in_1_0 <= (others => '0');
adc_in_1_1 <= (others => '0');
adc_in_1_2 <= (others => '0');
adc_in_2_0 <= (others => '0');
adc_in_2_1 <= (others => '0');
adc_in_2_2 <= (others => '0');
elsif clk'event and clk = '1' then
adc_in_0_0 <= adc_samp_data(0);
adc_in_0_1 <= adc_samp_data(1);
adc_in_0_2 <= adc_samp_data(2);
adc_in_1_0 <= adc_samp_data(3);
adc_in_1_1 <= adc_samp_data(4);
adc_in_1_2 <= adc_samp_data(5);
adc_in_2_0 <= adc_samp_data(6);
adc_in_2_1 <= adc_samp_data(7);
adc_in_2_2 <= adc_samp_data(8);
end if;
end process reg_inputs;
--==============================================================================================
--External clock input buffer
--==============================================================================================
ibuf_ext_clk1:IBUFGDS
port map(
O => ten_mhz_clk,
I =>fpga_10mhz_refckin_p,
IB =>fpga_10mhz_refckin_n
);
------------------------------------------------------------------------------------------------
synth_strb_sig <= synth_strb;
synth_cntrl_sig(15 downto 0) <= synth_cntrl;
synth_status_bus <= EXT(synth_status_sig&synth_init_busy_sig&synth_busy_flag_sig&synth_busy_sig& synth_cntrl_sig,32);
--==============================================================================================
--Synthesiser control interface
-- generates a pulse following a rising edge on the appropriate bit
--decode occurs for 1 clock cycle when local address ( and wr direction) already latched
-- init signal forces the default configuration of the device
--==============================================================================================
process(rst, lclk_i)
begin
if rst = '1' then
synth_rd_strobe_sig <='0';
synth_wr_strobe_sig <='0';
synth_init_sig <='0';
synth_strb_pl_sig <=(others =>'0');
synth_func_sig <='1';
elsif rising_edge(lclk_i) then
synth_strb_pl_sig <=synth_strb_sig;
--Hard reset of the synth ( default behaviour of the func pin)
if (synth_strb_pl_sig(3)='0' and synth_strb_sig(3)= '1') then
synth_func_sig <='0';
synth_init_sig <='0';
synth_rd_strobe_sig <='0';
synth_wr_strobe_sig <='0';
else
synth_func_sig <='1';
--initialise the synth settings to the defaults
if (synth_strb_pl_sig(2)='0' and synth_strb_sig(2)= '1') then
synth_rd_strobe_sig <='0';
synth_wr_strobe_sig <='0';
synth_init_sig <='1';
else
-- read or write cycle
synth_init_sig <='0';
--read dominates
if (synth_strb_pl_sig(0)='0' and synth_strb_sig(0)= '1') then
synth_rd_strobe_sig <='1';
synth_wr_strobe_sig <='0';
else
synth_rd_strobe_sig <='0';
if (synth_strb_pl_sig(1)='0' and synth_strb_sig(1)= '1') then
synth_wr_strobe_sig <='1';
else
synth_wr_strobe_sig <='0';
end if; -- pl1 wr
end if; --pl0 rd
end if; -- pl2 init signal
end if; -- pl3 func signal
end if; --clock edge
end process;
synth_rst_sig <=syn_rst or rst or auto_rst;
cksynth:sampck_synth
generic map
(
END_CNT =>2
)
port map
(
reset => synth_rst_sig,
clock => system_out(0), -- lclk
-- Local Bus Connection for Synth, not implemented
wr_data => synth_cntrl_sig(7 downto 0),
address => synth_cntrl_sig(15 downto 8),
rd_data => synth_cntrl_sig(23 downto 16),
rd_status => synth_status_sig,
busy => synth_busy_sig,
busy_flag => synth_busy_flag_sig,
init_busy => synth_init_busy_sig,
-- loc_func => synth_func_sig,
loc_func => '1',
rd_strobe =>synth_rd_strobe_sig,
wr_strobe =>synth_wr_strobe_sig,
synth_status =>synth_status,
synth_sclk =>synth_sclk,
synth_sdio => synth_sdio,
synth_sdo => synth_sdo,
synth_csb =>synth_csb,
synth_func =>synth_func
--debug =>open
);
adca_oe_l <= not adc_enb(0);
adcb_oe_l <= not adc_enb(1);
adcc_oe_l <= not adc_enb(2);
vcxo_enable <= '1';
--yellow_led(0) <= clk_led10;
--red_led(0) <= not adc_enb(2);
yellow_led(0) <= not user_leds(0);
red_led(0) <= not user_leds(1);
yellow_led(1) <= clk_led125;
red_led(1) <= not synth_init_busy_sig;
count_clk10: process (ten_mhz_clk)
begin -- process count_clk125
if ten_mhz_clk'event and ten_mhz_clk = '1' then -- rising clock edge
if OR_reduce(clk_counter10) = '0' then
clk_counter10 <= CONV_STD_LOGIC_VECTOR(10000000,32);
clk_led10 <= not clk_led10;
else
clk_counter10 <= clk_counter10-1;
end if;
end if;
end process count_clk10;
count_clk125: process (adc_clk)
begin -- process count_clk125
if adc_clk'event and adc_clk = '1' then -- rising clock edge
if OR_reduce(clk_counter125) = '0' then
clk_counter125 <= CONV_STD_LOGIC_VECTOR(125000000,32);
clk_led125 <= not clk_led125;
else
clk_counter125 <= clk_counter125-1;
end if;
end if;
end process count_clk125;
-- clk_dbgio: process (adc_clk)
-- begin -- process clk_dbgio
-- if adc_clk'event and adc_clk = '1' then -- rising clock edge
-- debugio(0) <= not debugio(0);
-- debugio_dirn(0) <= '1';
-- end if;
-- end process clk_dbgio;
-- clk_dbgio1: process (ten_mhz_clk)
-- begin -- process clk_dbgio
-- if ten_mhz_clk'event and ten_mhz_clk = '1' then -- rising clock edge
-- debugio(1) <= not debugio(1);
-- debugio_dirn(1) <= '1';
-- end if;
-- end process clk_dbgio1;
-- clk_dbgio2: process (lclk_i)
-- begin -- process clk_dbgio
-- if lclk_i'event and lclk_i = '1' then -- rising clock edge
-- debugio(2) <= not debugio(2);
-- debugio_dirn(2) <= '1';
-- end if;
-- end process clk_dbgio2;
debugio <= phase_table_msb_out;
debugio_dirn <= "111";
lclk_i <= system_out(0);
auto_rst_pll: process (lclk_i, rst)
begin -- process auto_rst_pll
if rst = '1' then -- asynchronous reset (active low)
rst_count <= (others => '1');
auto_rst <= '1';
auto_counter <= (others => '0');
auto_count <= (others => '0');
elsif lclk_i'event and lclk_i = '1' then -- rising clock edge
if auto_counter = "0000" then
cc_reg1 <= clk_counter125(7 downto 0);
cc_reg2 <= cc_reg1;
if cc_reg2 = cc_reg1 and synth_init_busy_sig = '0' then
auto_count <= auto_count+1;
else
auto_count <= (others => '0');
end if;
end if;
if OR_reduce(rst_count) = '1' then
rst_count <= rst_count-1;
elsif AND_reduce(auto_count) = '1' then
rst_count <= (others => '1');
end if;
auto_rst <= OR_reduce(rst_count);
auto_counter <= auto_counter+1;
end if;
end process auto_rst_pll;
phycntrl: phy_cntrl
port map
(
--Host controls
reset => synth_rst_sig,
clock => lclk_i,
ckdiv_cnt =>X"0020",
rd_flag => '0',
wr_flag => '0',
busy => open,
-- Params for I2C transfer
phy_addr => "00000",
reg_addr => "00000",
wrdata_in => X"0000",
rddata_out => open,
--PHY signals
phy_reset_l => phy_reset_l,
i2c_clock =>phy_mdck,
i2c_data =>phy_mdio
);
end mixed;