]> jspc29.x-matter.uni-frankfurt.de Git - trb3.git/commitdiff
updated Trb3 hub to Diamond 2.2, added SFP I2C interface
authorJan Michel <j.michel@gsi.de>
Wed, 10 Jul 2013 17:18:59 +0000 (19:18 +0200)
committerJan Michel <j.michel@gsi.de>
Wed, 10 Jul 2013 17:18:59 +0000 (19:18 +0200)
hub/compile_periph_frankfurt.pl
hub/trb3_periph_hub.p3t [new file with mode: 0644]
hub/trb3_periph_hub.prj
hub/trb3_periph_hub.pt [new file with mode: 0644]
hub/trb3_periph_hub.vhd

index 50dcdda5514b842b24c69c87e0f07a1a504e5d44..d88a3ae339cf89043c4b8e7b833f6347a49d8357 100755 (executable)
@@ -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 (file)
index 0000000..0b5bd82
--- /dev/null
@@ -0,0 +1,5 @@
+-rem
+-distrce
+-log "trb3_periph_hub.log"
+-o "trb3_periph_hub.csv"
+-pr "trb3_periph_hub.prf"
index 63800ac674775570b334257a3c8360fb1306b900..660c268016014e8a4b3bc27e4ea8ac242785e540 100644 (file)
@@ -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 (file)
index 0000000..b5319a3
--- /dev/null
@@ -0,0 +1,10 @@
+-v
+10
+
+
+
+
+-gt
+-sethld
+-sp 8
+-sphld m
index 75ac24b81ad6c320b7ec82a76f19822ddaf6f453..9ad447db63340821c317e5ccd97401aa85ec40f5 100644 (file)
@@ -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
       );