From 32bc074e7c2af87688464b48825cb43c8a363e43 Mon Sep 17 00:00:00 2001 From: Jan Michel Date: Wed, 10 Jul 2013 19:18:59 +0200 Subject: [PATCH] updated Trb3 hub to Diamond 2.2, added SFP I2C interface --- hub/compile_periph_frankfurt.pl | 6 ++-- hub/trb3_periph_hub.p3t | 5 +++ hub/trb3_periph_hub.prj | 3 +- hub/trb3_periph_hub.pt | 10 ++++++ hub/trb3_periph_hub.vhd | 56 ++++++++++++++++++++++++++++----- 5 files changed, 69 insertions(+), 11 deletions(-) create mode 100644 hub/trb3_periph_hub.p3t create mode 100644 hub/trb3_periph_hub.pt diff --git a/hub/compile_periph_frankfurt.pl b/hub/compile_periph_frankfurt.pl index 50dcdda..d88a3ae 100755 --- a/hub/compile_periph_frankfurt.pl +++ b/hub/compile_periph_frankfurt.pl @@ -9,7 +9,7 @@ use strict; ################################################################################### #Settings for this project my $TOPNAME = "trb3_periph_hub"; #Name of top-level entity -my $lattice_path = '/d/jspc29/lattice/diamond/2.01'; +my $lattice_path = '/d/jspc29/lattice/diamond/2.2_x64'; my $synplify_path = '/d/jspc29/lattice/synplify/F-2012.03-SP1/'; my $lm_license_file_for_synplify = "27000\@lxcad01.gsi.de"; my $lm_license_file_for_par = "1702\@hadeb05.gsi.de"; @@ -112,8 +112,8 @@ execute($c); system("rm $TOPNAME.ncd"); - -$c=qq|$lattice_path/ispfpga/bin/lin/multipar -pr "$TOPNAME.prf" -o "mpar_$TOPNAME.rpt" -log "mpar_$TOPNAME.log" -p "../$TOPNAME.p2t" "$tpmap.ncd" "$TOPNAME.ncd"|; +$c=qq|mpartrce -p "../$TOPNAME.p2t" -f "../$TOPNAME.p3t" -tf "$TOPNAME.pt" "|.$TOPNAME.qq|_map.ncd" "$TOPNAME.ncd"|; +#$c=qq|$lattice_path/ispfpga/bin/lin/multipar -pr "$TOPNAME.prf" -o "mpar_$TOPNAME.rpt" -log "mpar_$TOPNAME.log" -p "../$TOPNAME.p2t" "$tpmap.ncd" "$TOPNAME.ncd"|; execute($c); # IOR IO Timing Report diff --git a/hub/trb3_periph_hub.p3t b/hub/trb3_periph_hub.p3t new file mode 100644 index 0000000..0b5bd82 --- /dev/null +++ b/hub/trb3_periph_hub.p3t @@ -0,0 +1,5 @@ +-rem +-distrce +-log "trb3_periph_hub.log" +-o "trb3_periph_hub.csv" +-pr "trb3_periph_hub.prf" diff --git a/hub/trb3_periph_hub.prj b/hub/trb3_periph_hub.prj index 63800ac..660c268 100644 --- a/hub/trb3_periph_hub.prj +++ b/hub/trb3_periph_hub.prj @@ -101,7 +101,8 @@ add_file -vhdl -lib work "../../trbnet/special/spi_master.vhd" add_file -vhdl -lib work "../../trbnet/special/spi_slim.vhd" add_file -vhdl -lib work "../../trbnet/special/spi_databus_memory.vhd" add_file -vhdl -lib work "../../trbnet/special/fpga_reboot.vhd" - +add_file -vhdl -lib work "../../trbnet/sfp_interface.vhd" +add_file -vhdl -lib work "../../trbnet/special/sfp_i2c_readout.vhd" add_file -vhdl -lib work "../../trbnet/lattice/ecp3/spi_dpram_32_to_8.vhd" add_file -vhdl -lib work "../../trbnet/lattice/ecp3/lattice_ecp2m_fifo.vhd" diff --git a/hub/trb3_periph_hub.pt b/hub/trb3_periph_hub.pt new file mode 100644 index 0000000..b5319a3 --- /dev/null +++ b/hub/trb3_periph_hub.pt @@ -0,0 +1,10 @@ +-v +10 + + + + +-gt +-sethld +-sp 8 +-sphld m diff --git a/hub/trb3_periph_hub.vhd b/hub/trb3_periph_hub.vhd index 75ac24b..9ad447d 100644 --- a/hub/trb3_periph_hub.vhd +++ b/hub/trb3_periph_hub.vhd @@ -46,8 +46,8 @@ entity trb3_periph_hub is SFP_MOD0 : in std_logic_vector(6 downto 1); SFP_TXDIS : out std_logic_vector(6 downto 1); SFP_LOS : in std_logic_vector(6 downto 1); --- SFP_MOD1 : inout std_logic_vector(6 downto 1); --- SFP_MOD2 : inout std_logic_vector(6 downto 1); + SFP_MOD1 : out std_logic_vector(6 downto 1); + SFP_MOD2 : inout std_logic_vector(6 downto 1); -- SFP_RATESEL : out std_logic_vector(6 downto 1); -- SFP_TXFAULT : in std_logic_vector(6 downto 1); @@ -206,6 +206,16 @@ architecture trb3_periph_hub_arch of trb3_periph_hub is signal sci2_data_in : std_logic_vector(7 downto 0); signal sci2_data_out : std_logic_vector(7 downto 0); signal sci2_addr : std_logic_vector(8 downto 0); + + signal i2c_ack : std_logic; + signal i2c_nack : std_logic; + signal i2c_write : std_logic; + signal i2c_read : std_logic; + signal i2c_data_in : std_logic_vector(31 downto 0); + signal i2c_data_out : std_logic_vector(31 downto 0); + signal i2c_addr : std_logic_vector(7 downto 0); + signal buf_SFP_MOD2_IN : std_logic_vector(6 downto 1); + signal buf_SFP_MOD2 : std_logic_vector(6 downto 1); --FPGA Test signal time_counter : unsigned(31 downto 0); @@ -509,8 +519,29 @@ THE_MEDIA_DOWNLINK : trb_net16_med_ecp3_sfp_4 CTRL_DEBUG => (others => '0') ); - + +THE_SFP_i2C : sfp_i2c_readout + generic map( + SFP_NUMBER => 6 + ) + port map( + CLOCK => clk_100_i, + RESET => reset_i, + + BUS_DATA_IN => i2c_data_in, + BUS_DATA_OUT => i2c_data_out, + BUS_ADDR_IN => i2c_addr, + BUS_WRITE_IN => i2c_write, + BUS_READ_IN => i2c_read, + BUS_ACK_OUT => i2c_ack, + BUS_NACK_OUT => i2c_nack, + + SDA => SFP_MOD2, +-- SDA_IN => buf_SFP_MOD2_IN, + SCL => SFP_MOD1 + ); + --------------------------------------------------------------------------- -- Hub --------------------------------------------------------------------------- @@ -590,9 +621,9 @@ THE_HUB : trb_net16_hub_base --------------------------------------------------------------------------- THE_BUS_HANDLER : trb_net16_regio_bus_handler generic map( - PORT_NUMBER => 4, - PORT_ADDRESSES => (0 => x"d000", 1 => x"d100", 2 => x"b000", 3 => x"b200", others => x"0000"), - PORT_ADDR_MASK => (0 => 1, 1 => 6, 2 => 9, 3 => 9, others => 0) + PORT_NUMBER => 5, + PORT_ADDRESSES => (0 => x"d000", 1 => x"d100", 2 => x"b000", 3 => x"b200", 4 => x"d500", others => x"0000"), + PORT_ADDR_MASK => (0 => 1, 1 => 6, 2 => 9, 3 => 9, 4 => 8, others => 0) ) port map( CLK => clk_100_i, @@ -659,7 +690,18 @@ THE_HUB : trb_net16_hub_base BUS_WRITE_ACK_IN(3) => sci2_ack, BUS_NO_MORE_DATA_IN(3) => '0', BUS_UNKNOWN_ADDR_IN(3) => '0', - + --I2C for SFP + BUS_READ_ENABLE_OUT(4) => i2c_read, + BUS_WRITE_ENABLE_OUT(4) => i2c_write, + BUS_DATA_OUT(4*32+31 downto 4*32) => i2c_data_in, + BUS_ADDR_OUT(4*16+7 downto 4*16) => i2c_addr, + BUS_ADDR_OUT(4*16+15 downto 4*16+9) => open, + BUS_TIMEOUT_OUT(4) => open, + BUS_DATA_IN(4*32+31 downto 4*32) => i2c_data_out, + BUS_DATAREADY_IN(4) => i2c_ack, + BUS_WRITE_ACK_IN(4) => i2c_ack, + BUS_NO_MORE_DATA_IN(4) => '0', + BUS_UNKNOWN_ADDR_IN(4) => i2c_nack, STAT_DEBUG => open ); -- 2.43.0