]> jspc29.x-matter.uni-frankfurt.de Git - trb3.git/commitdiff
CBMNet: Misc. Clean-Up
authorManuel Penschuck <manuel.penschuck@stud.uni-frankfurt.de>
Mon, 3 Nov 2014 09:00:24 +0000 (10:00 +0100)
committerManuel Penschuck <manuel.penschuck@stud.uni-frankfurt.de>
Mon, 3 Nov 2014 09:00:24 +0000 (10:00 +0100)
cbmnet/code/cbmnet_bridge.lpf
cbmnet/code/cbmnet_sync_module.vhd
cbmnet/code/strech_sync.vhd [new file with mode: 0644]
cbmnet/code/trbnet_rdo_pattern_generator.vhd
cbmnet/compile_periph_frankfurt.pl

index f52cf10d8632da8f2b53317d9b397247e45c03dc..baa289b02e8bb7d4b9032fc3a3fa06a05054a300 100644 (file)
@@ -23,7 +23,7 @@ DEFINE BUS cbmnet_bridge_tx_data
 PRIORITIZE BUS "cbmnet_bridge_rx_data" 100 ;
 PRIORITIZE BUS "cbmnet_bridge_tx_data" 100 ;
 
-MULTICYCLE TO CELL "THE_CBM_BRIDGE/THE_CBM_PHY/THE_RX_GEAR/THE_DELAY_SYNC/sync_q[*]" 2 X;
+MULTICYCLE TO CELL "THE_CBM_BRIDGE/THE_CBM_PHY/THE_RX_GEAR/THE_DELAY_SYNC/sync_q[2]" 2 X;
 
 UGROUP "CBMNET_PHY_GROUP" BBOX 24 30 
 #   BLKNAME THE_CBM_BRIDGE/THE_CBM_PHY/THE_RX_GEAR
index 1ad56fde6277b31278d4687e9e09259b33676e8f..969037fd64649c6c333c841df4657f81f3c5caf2 100644 (file)
@@ -71,7 +71,6 @@ architecture cbmnet_sync_module_arch of cbmnet_sync_module is
    
    signal cbm_next_epoch_i : std_logic_vector(31 downto 0);
    signal cbm_next_epoch_updated_i : std_logic;
-
    
    signal cbm_from_trb_next_epoch_i : std_logic_vector(31 downto 0);
    signal cbm_from_trb_next_epoch_updated_i : std_logic;
@@ -130,7 +129,7 @@ architecture cbmnet_sync_module_arch of cbmnet_sync_module is
    signal trb_rdo_fsm_i : TRB_RDO_FSM_T;
    signal trb_rdo_fsm_state_i : std_logic_vector(3 downto 0);
    
-   signal trb_rdo_counter_i : integer range 0 to 15;
+   signal trb_rdo_counter_i : integer range 0 to trb_rdo_buffer_i'high;
    signal trb_rdo_finished_i : std_logic;
    
    type CBM_TRB_RDO_FSM_T is (IDLE, WAIT_FOR_RELEASE, WAIT_BEFORE_IDLE);
@@ -172,7 +171,7 @@ begin
                if TRB_TRIGGER_IN = '1' or TRB_RDO_VALID_NO_TIMING_IN = '1' then
                -- store data
                   header_v(31 downto 28) := "0001"; -- version
-                  header_v(23 downto  8) := trb_pulser_threshold_i(15 downto 0);
+                  header_v(23 downto  8) := std_logic_vector(trb_pulser_threshold_i(15 downto 0));
                   header_v( 7 downto  4) := CBM_PHY_BARREL_SHIFTER_POS_IN;
                   header_v( 3 downto  0) := trb_from_cbm_current_epoch_updated_i & "0" & trb_epoch_update_scheme_i;
                   
@@ -181,17 +180,17 @@ begin
                   
                   -- signals commented out are registered in the cbm clock domain in the next process
                   trb_rdo_buffer_i( 0) <= header_v;
-                  trb_rdo_buffer_i( 1) <= trb_timestamp_i;
-               -- trb_rdo_buffer_i( 2) <= cbm_timestamp_i;
-                  trb_rdo_buffer_i( 3) <= trb_timestamp_last_pulse_i;
-               -- trb_rdo_buffer_i( 4) <= cbm_timestamp_last_pulse_i;
-               -- trb_rdo_buffer_i( 5) <= cbm_current_epoch_i;
-               -- trb_rdo_buffer_i( 6) <= cbm_timestamp_last_dlm_i;
-                  trb_rdo_buffer_i( 7) <= trb_timestamp_last_dlm_i;
-               -- trb_rdo_buffer_i( 8) <= cbm_dlm_counter_i;
-               -- trb_rdo_buffer_i( 9) <= cbm_pulse_counter_i;
-                  trb_rdo_buffer_i(10)(31 downto 16) <= trb_reset_counter_i;
-               -- trb_rdo_buffer_i(10)(15 downto  0) <= cbm_reset_counter_i;
+                  trb_rdo_buffer_i( 1) <= std_logic_vector(trb_timestamp_i);
+               -- trb_rdo_buffer_i( 2) <= std_logic_vector(cbm_timestamp_i);
+                  trb_rdo_buffer_i( 3) <= std_logic_vector(trb_timestamp_last_pulse_i);
+               -- trb_rdo_buffer_i( 4) <= std_logic_vector(cbm_timestamp_last_pulse_i);
+               -- trb_rdo_buffer_i( 5) <= std_logic_vector(cbm_current_epoch_i);
+               -- trb_rdo_buffer_i( 6) <= std_logic_vector(cbm_timestamp_last_dlm_i);
+                  trb_rdo_buffer_i( 7) <= std_logic_vector(trb_timestamp_last_dlm_i);
+               -- trb_rdo_buffer_i( 8) <= std_logic_vector(cbm_dlm_counter_i);
+               -- trb_rdo_buffer_i( 9) <= std_logic_vector(cbm_pulse_counter_i);
+                  trb_rdo_buffer_i(10)(31 downto 16) <= std_logic_vector(trb_reset_counter_i);
+               -- trb_rdo_buffer_i(10)(15 downto  0) <= cbm_reset_counter_i);
                
                   trb_rdo_fsm_i <= WAIT_FOR_VALID;
                end if;
@@ -254,13 +253,13 @@ begin
             end if;
          
             if cbm_from_trb_trigger_in = '1' or cbm_from_trb_rdo_valid_no_timing_in = '1' then
-               trb_rdo_buffer_i( 2) <= cbm_timestamp_i;
-               trb_rdo_buffer_i( 4) <= cbm_timestamp_last_pulse_i;
-               trb_rdo_buffer_i( 5) <= cbm_current_epoch_i;
-               trb_rdo_buffer_i( 6) <= cbm_timestamp_last_dlm_i;
-               trb_rdo_buffer_i( 8) <= cbm_dlm_counter_i;
-               trb_rdo_buffer_i( 9) <= cbm_pulse_counter_i;
-               trb_rdo_buffer_i(10)(15 downto  0) <= cbm_reset_counter_i;
+               trb_rdo_buffer_i( 2) <= std_logic_vector(cbm_timestamp_i);
+               trb_rdo_buffer_i( 4) <= std_logic_vector(cbm_timestamp_last_pulse_i);
+               trb_rdo_buffer_i( 5) <= std_logic_vector(cbm_current_epoch_i);
+               trb_rdo_buffer_i( 6) <= std_logic_vector(cbm_timestamp_last_dlm_i);
+               trb_rdo_buffer_i( 8) <= std_logic_vector(cbm_dlm_counter_i);
+               trb_rdo_buffer_i( 9) <= std_logic_vector(cbm_pulse_counter_i);
+               trb_rdo_buffer_i(10)(15 downto  0) <= std_logic_vector(cbm_reset_counter_i);
                
                cbm_trb_rdo_fsm_i <= WAIT_FOR_RELEASE;
             end if;
@@ -287,6 +286,8 @@ begin
       TRB_REGIO_OUT.wack <= TRB_REGIO_IN.write;
       TRB_REGIO_OUT.unknown <= '0';
       TRB_REGIO_OUT.data <= (others => '0');
+      TRB_REGIO_OUT.nack <= '0';
+      TRB_REGIO_OUT.ack <= '0';
       
       if trb_from_cbm_dlm_sensed_i = '1' then
          trb_next_epoch_updated_i <= '0';
@@ -310,24 +311,24 @@ begin
                TRB_REGIO_OUT.data( 3 downto  0) <= "00" & trb_epoch_update_scheme_i;
             
             when 1 =>
-               TRB_REGIO_OUT.data <= trb_pulser_threshold_i;
+               TRB_REGIO_OUT.data <= std_logic_vector(trb_pulser_threshold_i);
                
             when 2 =>
                TRB_REGIO_OUT.data <= trb_next_epoch_i;
             
             when trb_sync_lowest_address_c =>
                TRB_REGIO_OUT.data <= trb_from_cbm_current_epoch_i;
-               trb_sync_buffer_i(trb_sync_lowest_address_c+1) <= trb_from_cbm_timestamp_i;
-               trb_sync_buffer_i(trb_sync_lowest_address_c+2) <= trb_from_cbm_timestamp_last_dlm_i;
-               trb_sync_buffer_i(trb_sync_lowest_address_c+3) <= trb_from_cbm_timestamp_last_pulse_i;
-               trb_sync_buffer_i(trb_sync_lowest_address_c+4) <= trb_timestamp_i;
-               trb_sync_buffer_i(trb_sync_lowest_address_c+5) <= trb_timestamp_last_dlm_i;
-               trb_sync_buffer_i(trb_sync_lowest_address_c+6) <= trb_timestamp_last_pulse_i;
-               trb_sync_buffer_i(trb_sync_lowest_address_c+7) <= trb_from_cbm_dlm_counter_i;
-               trb_sync_buffer_i(trb_sync_lowest_address_c+8) <= trb_from_cbm_pulse_counter_i;
+               trb_sync_buffer_i(trb_sync_lowest_address_c+1) <= std_logic_vector(trb_from_cbm_timestamp_i);
+               trb_sync_buffer_i(trb_sync_lowest_address_c+2) <= std_logic_vector(trb_from_cbm_timestamp_last_dlm_i);
+               trb_sync_buffer_i(trb_sync_lowest_address_c+3) <= std_logic_vector(trb_from_cbm_timestamp_last_pulse_i);
+               trb_sync_buffer_i(trb_sync_lowest_address_c+4) <= std_logic_vector(trb_timestamp_i);
+               trb_sync_buffer_i(trb_sync_lowest_address_c+5) <= std_logic_vector(trb_timestamp_last_dlm_i);
+               trb_sync_buffer_i(trb_sync_lowest_address_c+6) <= std_logic_vector(trb_timestamp_last_pulse_i);
+               trb_sync_buffer_i(trb_sync_lowest_address_c+7) <= std_logic_vector(trb_from_cbm_dlm_counter_i);
+               trb_sync_buffer_i(trb_sync_lowest_address_c+8) <= std_logic_vector(trb_from_cbm_pulse_counter_i);
                trb_sync_buffer_i(trb_sync_lowest_address_c+9) <= STD_LOGIC_VECTOR(trb_reset_counter_i) & STD_LOGIC_VECTOR(trb_from_cbm_reset_counter_i);               
             
-            when trb_sync_lowest_address_c + 1 to trb_sync_lowest_address_c + trb_sync_buffer_i'high =>
+            when trb_sync_lowest_address_c + 1 to trb_sync_lowest_address_c =>
                TRB_REGIO_OUT.data <= trb_sync_buffer_i(trb_regio_addr_i);
                
             when others =>
@@ -400,7 +401,7 @@ begin
       cbm_dlm_sensed_i <= sensed_v;
       
       if CBM_RESET_IN='1' then
-         cbm_dlm_counter_i <= 0;
+         cbm_dlm_counter_i <= (others=>'0');
       elsif sensed_v='1' then
          cbm_dlm_counter_i <= cbm_dlm_counter_i + 1;
       end if;
@@ -458,25 +459,25 @@ begin
    begin
       wait until rising_edge(CBM_CLK_IN);
       
-      cbm_from_trb_pulser_threshold_i <= trb_pulser_threshold_i;
+      cbm_from_trb_pulser_threshold_i <= unsigned(trb_pulser_threshold_i);
       cbm_pulse_i <= '0';
       
       if CBM_RESET_IN='1' then
-         cbm_pulse_counter_i <= 0;
+         cbm_pulse_counter_i <= (others=>'0');
       end if;
       
       
       if CBM_RESET_IN='1' or cbm_from_trb_pulser_threshold_i=x"00000000" then
-         cbm_pulser_period_counter_i <= 0;
+         cbm_pulser_period_counter_i <= (others=>'0');
          
       elsif cbm_pulser_period_counter_i = cbm_from_trb_pulser_threshold_i then
-         cbm_pulser_period_counter_i <= 0;
+         cbm_pulser_period_counter_i <= (others=>'0');
          cbm_pulse_counter_i <= cbm_pulse_counter_i + 1;
          cbm_timestamp_last_pulse_i <= cbm_timestamp_i;
          cbm_pulse_i <= '1';
       
       elsif cbm_pulser_period_counter_i > cbm_from_trb_pulser_threshold_i then
-         cbm_pulser_period_counter_i <= 0;
+         cbm_pulser_period_counter_i <= (others=>'0');
          
       else
          cbm_pulser_period_counter_i <= cbm_pulser_period_counter_i + 1;
@@ -547,4 +548,7 @@ begin
    cbm_from_trb_rdo_finished_i          <= trb_rdo_finished_i          when rising_edge(CBM_CLK_IN);
    cbm_from_trb_reset_in                <= TRB_RESET_IN                when rising_edge(CBM_CLK_IN);
    
+-- DEBUG
+   DEBUG_OUT <= (others => '0');
+   
 end architecture;
\ No newline at end of file
diff --git a/cbmnet/code/strech_sync.vhd b/cbmnet/code/strech_sync.vhd
new file mode 100644 (file)
index 0000000..8ed45d2
--- /dev/null
@@ -0,0 +1,22 @@
+entity POS_EDGE_STRECH_SYNC is
+   generic (
+      LENGTH : positive := 2
+   );
+   port (
+      IN_CLK_IN : std_logic;
+      DATA_IN : std_logic;
+      OUT_CLK_IN : std_logic;
+      DATA_OUT : std_logic
+   )
+end entity;
+
+architecture RTL of STRECH_SYNC is
+   signal in_buffer_i : std_logic_vector(LENGTH - 1 downto 0);
+   signal in_buffer_aggr_i : std_logic;
+   signal out_buffer_i : std_logic;
+begin
+   in_buffer_i <= in_buffer_i(LENGTH-2 downto 0) & DATA_IN when rising_edge(OUT_CLK_IN);
+   in_buffer_aggr_i <= OR_ALL(in_buffer_i);
+   
+   out_buffer_i <= not out_buffer_i and in_buffer_aggr_i when rising_edge(OUT_CLK_IN);
+end architecture;
\ No newline at end of file
index 0d66f504d89ddf1a2a784d37479c1f6f5cd75b6c..f28139d6a43f32d9259defcd4a432c0a490de329 100644 (file)
@@ -85,11 +85,11 @@ begin
             when 0 =>
                REGIO_DATA_OUT(0) <= send_enabled_i;
                
-            when 1 => REGIO_DATA_OUT(15 downto 0) <= send_length_min_i;
-            when 2 => REGIO_DATA_OUT(15 downto 0) <= send_length_max_i;
-            when 3 => REGIO_DATA_OUT(15 downto 0) <= send_length_step_i;
-            when 4 => REGIO_DATA_OUT <= event_id;
-            when 5 => REGIO_DATA_OUT <= event_gap_i;
+            when 1 => REGIO_DATA_OUT(15 downto 0) <= std_logic_vector(send_length_min_i);
+            when 2 => REGIO_DATA_OUT(15 downto 0) <= std_logic_vector(send_length_max_i);
+            when 3 => REGIO_DATA_OUT(15 downto 0) <= std_logic_vector(send_length_step_i);
+            when 4 => REGIO_DATA_OUT <= std_logic_vector(event_id);
+            when 5 => REGIO_DATA_OUT <= std_logic_vector(event_gap_i);
                
             when others => 
                REGIO_UNKNOWN_ADDR_OUT <= REGIO_WRITE_ENABLE_IN or REGIO_READ_ENABLE_IN;
@@ -99,10 +99,10 @@ begin
          if REGIO_WRITE_ENABLE_IN = '1' then
             case address is
                when 0 => send_enabled_i <= REGIO_DATA_IN(0);
-               when 1 => send_length_min_i <= REGIO_DATA_IN(15 downto 0);
-               when 2 => send_length_max_i <= REGIO_DATA_IN(15 downto 0);
-               when 3 => send_length_step_i <= REGIO_DATA_IN(15 downto 0);
-               when 5 => event_gap_i <= REGIO_DATA_IN;
+               when 1 => send_length_min_i <= unsigned(REGIO_DATA_IN(15 downto 0));
+               when 2 => send_length_max_i <= unsigned(REGIO_DATA_IN(15 downto 0));
+               when 3 => send_length_step_i <= unsigned(REGIO_DATA_IN(15 downto 0));
+               when 5 => event_gap_i <= unsigned(REGIO_DATA_IN);
                   
                when others => 
                   REGIO_WRITE_ACK_OUT <= '0';
@@ -209,7 +209,7 @@ begin
                trb_fsm_i <= SEND_PAYLOAD_RT_L;
                
             when SEND_PAYLOAD_RT_L =>
-               HUB_FEE_DATA_OUT <= x"c0de";
+               HUB_FEE_DATA_OUT <= x"affe";
                HUB_FEE_DATAREADY_OUT <= '1';
                trb_fsm_i <= SEND_PAYLOAD_H;
                send_counter_i <= send_counter_i - 1;
index 7cb13d473bf226c9437c221b6ee654b33cb482ac..4dbd0514f2c4e7440d4c92f4ff985786503a8132 100755 (executable)
@@ -109,7 +109,7 @@ execute($c);
 
 my $tpmap = $TOPNAME . "_map" ;
 
-$c=qq|$lattice_path/ispfpga/bin/lin/map -hier  -retime -split_node -a $FAMILYNAME -p $DEVICENAME -t $PACKAGE -s $SPEEDGRADE "$TOPNAME.ngd" -o "$tpmap.ncd"  -mp "$TOPNAME.mrp" "$TOPNAME.lpf"|;
+$c=qq|$lattice_path/ispfpga/bin/lin/map -xref_sig -xref_sym -hier -retime -split_node -a $FAMILYNAME -p $DEVICENAME -t $PACKAGE -s $SPEEDGRADE "$TOPNAME.ngd" -o "$tpmap.ncd"  -mp "$TOPNAME.mrp" "$TOPNAME.lpf"|;
 execute($c);
 
 
@@ -123,10 +123,10 @@ $c=qq|$lattice_path/ispfpga/bin/lin/iotiming -s "$TOPNAME.ncd" "$TOPNAME.prf"|;
 execute($c);
 
 # TWR Timing Report
-$c=qq|$lattice_path/ispfpga/bin/lin/trce -p -c -v 15 -o "$TOPNAME.twr.setup" "$TOPNAME.ncd" "$TOPNAME.prf"|;
+$c=qq|$lattice_path/ispfpga/bin/lin/trce -fullname -p -c -v 15 -o "$TOPNAME.twr.setup" "$TOPNAME.ncd" "$TOPNAME.prf"|;
 execute($c);
 
-$c=qq|$lattice_path/ispfpga/bin/lin/trce -p -hld -c -v 5 -o "$TOPNAME.twr.hold"  "$TOPNAME.ncd" "$TOPNAME.prf"|;
+$c=qq|$lattice_path/ispfpga/bin/lin/trce -fullname -p -hld -c -v 5 -o "$TOPNAME.twr.hold"  "$TOPNAME.ncd" "$TOPNAME.prf"|;
 execute($c);
 
 $c=qq|$lattice_path/ispfpga/bin/lin/ltxt2ptxt $TOPNAME.ncd|;