]> jspc29.x-matter.uni-frankfurt.de Git - trb3.git/commitdiff
Add a Sensor ID to data frames.
authorTobias Weber <webert@kph.uni-mainz.de>
Wed, 21 Jan 2015 11:21:08 +0000 (12:21 +0100)
committerTobias Weber <webert@kph.uni-mainz.de>
Wed, 21 Jan 2015 11:21:08 +0000 (12:21 +0100)
mupix/sources/MuPix3_board.vhd
mupix/sources/MuPix3_interface.vhd

index 7170186e09097c8d3714d1e48395a169aa56700e..1e8bdbd30a78ee3f7865ffd0e7c7df90aa8c53d1 100644 (file)
@@ -146,7 +146,7 @@ begin  -- Behavioral
           others => x"0000"),
 
       PORT_ADDR_MASK
-                 => (0 => 4,            -- MuPix Interface Control
+                 => (0 => 6,            -- MuPix Interface Control
           1      => 4,                  -- Sensorboard DACs
           2      => 4,                  -- Injection Control
           3      => 4,                  -- MuPix DACs
index 7791a08bf693ae23e7620344b26a2f33d5b07c7a..f818077340064e85a3d8b22a0c25e61e1e607890 100644 (file)
@@ -72,6 +72,7 @@ architecture RTL of mupix_interface is
   signal eventcounter : unsigned(31 downto 0) := (others => '0');
   signal hitcounter : unsigned(10 downto 0) := (others => '0');
   signal graycounter_clkdiv_counter : std_logic_vector(31 downto 0) := (others => '0');
+  signal sensor_id : std_logic_vector(31 downto 0) := (others => '0');
 
   signal triggering            : std_logic := '0';
   signal busy_r                : std_logic := '0';
@@ -120,6 +121,7 @@ begin
   --x0028: Divider for graycounter clock
   --x0029: mask flag for (col,row) = (0,0)
   --x0030: testoutro
+  --x0031: Sensor-ID
   -----------------------------------------------------------------------------
 
   SLV_HANDLER : process(clk)
@@ -166,6 +168,9 @@ begin
           when x"0030" =>
             SLV_DATA_OUT <= testoutro;
             SLV_ACK_OUT <= '1';
+          when x"0031" =>
+            SLV_DATA_OUT <= sensor_id;
+            SLV_ACK_OUT <= '1';
           when others =>
             SLV_UNKNOWN_ADDR_OUT <= '1';
         end case;
@@ -201,6 +206,9 @@ begin
           when x"0029" =>
             ignorehitflag <= SLV_DATA_IN(0);
             SLV_ACK_OUT <= '1';
+          when x"0031" =>
+            sensor_id <= SLV_DATA_IN;
+            SLV_ACK_OUT <= '1';
           when others =>
             SLV_UNKNOWN_ADDR_OUT <= '1';
         end case;
@@ -357,9 +365,12 @@ begin
           memwren      <= '0';
           state        <= loadpix;
           if(delcounter = "00000100") then   -- write event header
+            memdata <= sensor_id;
+            memwren <= '1';
+          elsif(delcounter = "0000011") then   -- write event header
             memdata <= "11111010101111101010101110111010";     --0xFABEABBA
             memwren <= '1';
-          elsif(delcounter = "00000011") then  -- write event counter
+          elsif(delcounter = "00000010") then  -- write event counter
             memdata <= std_logic_vector(eventcounter);
             memwren <= '1';
           end if;
@@ -444,33 +455,35 @@ begin
           ro_busy_int  <= '1';
           testoutro(6) <= '1';
           state        <= hitgenerator;
+          delcounter   <= delcounter - 1;
           if(delcounter = "00000100") then   -- write event header
             state                   <= hitgenerator;
-            memdata                 <= "11111010101111101010101110111010";  --0xFABEABBA
+            memdata                 <= sensor_id;
             memwren                 <= '1';
             ngeneratehitscounter    <= unsigned(ngeneratehits);
             generatehitswaitcounter <= unsigned(generatehitswait);
             gen_hit_col             <= (others => '0');
             gen_hit_row             <= (others => '0');
             gen_hit_time            <= (others => '0');
-            delcounter              <= delcounter - 1;
             endofevent              <= '0';
-          elsif(delcounter = "00000011") then    -- write event counter
+          elsif(delcounter = "00000011") then   -- write event header
+            state                   <= hitgenerator;
+            memdata                 <= "11111010101111101010101110111010";  --0xFABEABBA
+            memwren                 <= '1';
+            endofevent              <= '0';
+          elsif(delcounter = "00000010") then    -- write event counter
             state      <= hitgenerator;
             memdata    <= std_logic_vector(eventcounter);
             memwren    <= '1';
-            delcounter <= delcounter - 1;
             endofevent <= '0';
           elsif(delcounter = "00000010") then
             state      <= hitgenerator;
             memwren    <= '0';
-            delcounter <= delcounter - 1;
             endofevent <= '0';
           elsif(delcounter = "00000001") then    -- write trigger number
             state      <= hitgenerator;
             memdata    <= (others => '0');  --empty trigger number
             memwren    <= '1';
-            delcounter <= delcounter - 1;
             endofevent <= '0';
           elsif(delcounter = "00000000" and ngeneratehitscounter > "0000000000000000") then
             state                <= hitgenerator;