From c7821632b8a0b9314b73effb9da0251a28c30b5d Mon Sep 17 00:00:00 2001
From: David Monk <dmonk@cern.ch>
Date: Tue, 18 Jul 2023 22:58:15 +0200
Subject: [PATCH] Added data rate

---
 top/firmware/hdl/emp_payload.vhd |  3 ++-
 top/firmware/hdl/link_maps.vhd   | 20 ++++++++++++++++----
 2 files changed, 18 insertions(+), 5 deletions(-)

diff --git a/top/firmware/hdl/emp_payload.vhd b/top/firmware/hdl/emp_payload.vhd
index 20aecfaa..ec50cba8 100644
--- a/top/firmware/hdl/emp_payload.vhd
+++ b/top/firmware/hdl/emp_payload.vhd
@@ -204,7 +204,8 @@ begin
         LinkInterfaceInstance : entity work.LinkInterface
         --==============================--
         generic map (
-            module_type => cDTCInputLinkMap(i).module_type
+            module_type => cDTCInputLinkMap(i).module_type,
+            data_rate   => cDTCInputLinkMap(i).data_rate
         )
         port map (
             --- Input Ports ---
diff --git a/top/firmware/hdl/link_maps.vhd b/top/firmware/hdl/link_maps.vhd
index 711c7cec..1490a95c 100644
--- a/top/firmware/hdl/link_maps.vhd
+++ b/top/firmware/hdl/link_maps.vhd
@@ -10,10 +10,10 @@ package dtc_link_maps is
 
     type tDTCInputLinkMap is array(0 to cNumberOfFEModules - 1) of tDTCInputLinkConfig;
     constant cDTCInputLinkMap     : tDTCInputLinkMap := (
-        0 => (8,  "2S", "CIC2"),
-        1 => (9,  "2S", "CIC2"),
-        2 => (10, "2S", "CIC2"),
-        3 => (11, "2S", "CIC2")
+        0 => (8,  "2S", 5, "CIC2"),
+        1 => (9,  "2S", 5, "CIC2"),
+        2 => (10, "2S", 5, "CIC2"),
+        3 => (11, "2S", 5, "CIC2")
     );
 
     type tDTCOutputLinkMap is array(0 to cNumberOfOutputLinks - 1) of integer;
@@ -22,6 +22,7 @@ package dtc_link_maps is
     );
 
     function selectModuleTypeFromChannel(channel : in integer) return string;
+    function selectDataRateFromChannel(channel : in integer) return integer;
 end package dtc_link_maps;
 
 package body dtc_link_maps is
@@ -35,4 +36,15 @@ package body dtc_link_maps is
         end loop;
     end selectModuleTypeFromChannel;
 
+    function selectDataRateFromChannel(channel : in integer) return integer is
+        variable data_rate : integer;
+    begin
+        for i in 0 to cDTCInputLinkMap'length - 1 loop
+            if cDTCInputLinkMap(i).index = channel then
+                data_rate := cDTCInputLinkMap(i).data_rate;
+            end if;
+        end loop;
+        return data_rate;
+    end selectDataRateFromChannel;
+
 end package body dtc_link_maps;
-- 
GitLab