From 963f4f8e4716bcb6922ac330d8bfa5d1625210eb Mon Sep 17 00:00:00 2001
From: Erik Kooistra <kooistra@astron.nl>
Date: Wed, 11 Jun 2014 12:36:15 +0000
Subject: [PATCH] Use tech_hton() from technology_pkg.vhd instead of from
 common_pkg.vhd. Similar for tech_ceil_div().

---
 .../vhdl/tb_ip_stratixiv_tse_sgmii_lvds.vhd   | 22 +++++++++---------
 libraries/technology/technology_pkg.vhd       | 23 +++++++++++++++++++
 2 files changed, 34 insertions(+), 11 deletions(-)

diff --git a/libraries/technology/ip_stratixiv/tse_sgmii_lvds/tb/vhdl/tb_ip_stratixiv_tse_sgmii_lvds.vhd b/libraries/technology/ip_stratixiv/tse_sgmii_lvds/tb/vhdl/tb_ip_stratixiv_tse_sgmii_lvds.vhd
index 3e52d14989..4a8642d220 100644
--- a/libraries/technology/ip_stratixiv/tse_sgmii_lvds/tb/vhdl/tb_ip_stratixiv_tse_sgmii_lvds.vhd
+++ b/libraries/technology/ip_stratixiv/tse_sgmii_lvds/tb/vhdl/tb_ip_stratixiv_tse_sgmii_lvds.vhd
@@ -30,10 +30,10 @@
 --   > as 10
 --   > run 50 us
 
-LIBRARY IEEE, common_lib;
+LIBRARY IEEE, technology_lib;
 USE IEEE.std_logic_1164.ALL;
 USE IEEE.numeric_std.ALL;
-USE common_lib.common_pkg.ALL;
+USE technology_lib.technology_pkg.ALL;
 
 
 ENTITY tb_ip_stratixiv_tse_sgmii_lvds IS
@@ -258,15 +258,15 @@ ARCHITECTURE tb OF tb_ip_stratixiv_tse_sgmii_lvds IS
     -- DST MAC
     dp_src_out.empty <= STD_LOGIC_VECTOR(TO_UNSIGNED(0, c_tse_empty_w));
     dp_src_out.data              <= (OTHERS=>'0');
-    dp_src_out.data(15 DOWNTO 0) <= hton(dst_mac_addr(15 DOWNTO 0));  -- send to itself
+    dp_src_out.data(15 DOWNTO 0) <= tech_hton(dst_mac_addr(15 DOWNTO 0));  -- send to itself
     proc_ready_latency(c_tx_ready_latency, dp_clk, dp_src_in.ready, '1', '1', '0', dp_src_out.valid, dp_src_out.sop, dp_src_out.eop);
-    dp_src_out.data  <= hton(dst_mac_addr(47 DOWNTO 16));
+    dp_src_out.data  <= tech_hton(dst_mac_addr(47 DOWNTO 16));
     proc_ready_latency(c_tx_ready_latency, dp_clk, dp_src_in.ready, '1', '0', '0', dp_src_out.valid, dp_src_out.sop, dp_src_out.eop);
     -- SRC MAC
-    dp_src_out.data  <= hton(src_mac_addr(31 DOWNTO 0));
+    dp_src_out.data  <= tech_hton(src_mac_addr(31 DOWNTO 0));
     proc_ready_latency(c_tx_ready_latency, dp_clk, dp_src_in.ready, '1', '0', '0', dp_src_out.valid, dp_src_out.sop, dp_src_out.eop);
     -- SRC MAC & ETHERTYPE
-    dp_src_out.data  <= hton(src_mac_addr(47 DOWNTO 32)) & hton(c_eth_ethertype);
+    dp_src_out.data  <= tech_hton(src_mac_addr(47 DOWNTO 32)) & tech_hton(c_eth_ethertype);
     -- DATA
     FOR I IN 0 TO c_nof_data_beats-1 LOOP
       proc_ready_latency(c_tx_ready_latency, dp_clk, dp_src_in.ready, '1', '0', '0', dp_src_out.valid, dp_src_out.sop, dp_src_out.eop);
@@ -344,16 +344,16 @@ ARCHITECTURE tb OF tb_ip_stratixiv_tse_sgmii_lvds IS
     -- Verify DST MAC
     proc_valid_sop(dp_clk, dp_snk_in.valid, dp_snk_in.sop);
     ASSERT dp_snk_in.data(31 DOWNTO 16) = X"0000"                           REPORT "RX: Alignment half word not zero" SEVERITY ERROR;
-    ASSERT dp_snk_in.data(15 DOWNTO  0) = hton(dst_mac_addr(15 DOWNTO 0))   REPORT "RX: Wrong dst_mac_addr(15 DOWNTO 0)" SEVERITY ERROR;
+    ASSERT dp_snk_in.data(15 DOWNTO  0) = tech_hton(dst_mac_addr(15 DOWNTO 0))   REPORT "RX: Wrong dst_mac_addr(15 DOWNTO 0)" SEVERITY ERROR;
     proc_valid(dp_clk, dp_snk_in.valid);
-    ASSERT dp_snk_in.data(31 DOWNTO  0) = hton(dst_mac_addr(47 DOWNTO 16))  REPORT "RX: Wrong dst_mac_addr(47 DOWNTO 16)" SEVERITY ERROR;
+    ASSERT dp_snk_in.data(31 DOWNTO  0) = tech_hton(dst_mac_addr(47 DOWNTO 16))  REPORT "RX: Wrong dst_mac_addr(47 DOWNTO 16)" SEVERITY ERROR;
     -- Verify SRC MAC
     proc_valid(dp_clk, dp_snk_in.valid);
-    ASSERT dp_snk_in.data(31 DOWNTO  0) = hton(src_mac_addr(31 DOWNTO 0))   REPORT "RX: Wrong src_mac_addr(31 DOWNTO 0)" SEVERITY ERROR;
+    ASSERT dp_snk_in.data(31 DOWNTO  0) = tech_hton(src_mac_addr(31 DOWNTO 0))   REPORT "RX: Wrong src_mac_addr(31 DOWNTO 0)" SEVERITY ERROR;
     -- Verify SRC MAC & ETHERTYPE
     proc_valid(dp_clk, dp_snk_in.valid);
-    ASSERT dp_snk_in.data(31 DOWNTO 16) = hton(src_mac_addr(47 DOWNTO 32))  REPORT "RX: Wrong src_mac_addr(47 DOWNTO 32)" SEVERITY ERROR;
-    ASSERT dp_snk_in.data(15 DOWNTO  0) = hton(c_eth_ethertype)             REPORT "RX: Wrong ethertype" SEVERITY ERROR;
+    ASSERT dp_snk_in.data(31 DOWNTO 16) = tech_hton(src_mac_addr(47 DOWNTO 32))  REPORT "RX: Wrong src_mac_addr(47 DOWNTO 32)" SEVERITY ERROR;
+    ASSERT dp_snk_in.data(15 DOWNTO  0) = tech_hton(c_eth_ethertype)             REPORT "RX: Wrong ethertype" SEVERITY ERROR;
     -- Verify DATA
     v_first := TRUE;
     proc_valid(dp_clk, dp_snk_in.valid);
diff --git a/libraries/technology/technology_pkg.vhd b/libraries/technology/technology_pkg.vhd
index 8a8d0299b0..53d62326c5 100644
--- a/libraries/technology/technology_pkg.vhd
+++ b/libraries/technology/technology_pkg.vhd
@@ -40,6 +40,10 @@ PACKAGE technology_pkg IS
   FUNCTION tech_true_log2(n : NATURAL) RETURN NATURAL;  -- tech_true_log2(n) = log2(n)
   FUNCTION tech_ceil_log2(n : NATURAL) RETURN NATURAL;  -- tech_ceil_log2(n) = log2(n), but force tech_ceil_log2(1) = 1
   
+  FUNCTION tech_ceil_div(n, d : NATURAL) RETURN NATURAL;   -- tech_ceil_div    = n/d + (n MOD d)/=0
+  
+  FUNCTION tech_hton(a :IN STD_LOGIC_VECTOR) RETURN STD_LOGIC_VECTOR;  -- convert endianity from host to network byte order or vice versa
+  
   FUNCTION tech_nat_to_mbps_str( n : IN NATURAL ) RETURN STRING;
   
 END technology_pkg;
@@ -84,6 +88,25 @@ PACKAGE BODY technology_pkg IS
     END IF;
   END;
   
+  FUNCTION tech_ceil_div(n, d : NATURAL) RETURN NATURAL IS
+  BEGIN
+    RETURN n/d + sel_a_b(n MOD d = 0, 0, 1);
+  END;
+  
+  FUNCTION tech_hton(a :IN STD_LOGIC_VECTOR) RETURN STD_LOGIC_VECTOR IS
+    CONSTANT c_sz : NATURAL := a'LENGTH/c_byte_w;
+    VARIABLE vA : STD_LOGIC_VECTOR(a'LENGTH-1 DOWNTO 0) := a;  -- map a to range [h:0]
+  BEGIN
+    CASE c_sz IS
+      WHEN 1 => NULL;
+      WHEN 2 => vA := a(7 DOWNTO 0) & a(15 DOWNTO 8);
+      WHEN 4 => vA := a(7 DOWNTO 0) & a(15 DOWNTO 8) & a(23 DOWNTO 16) & a(31 DOWNTO 24);
+      WHEN OTHERS =>
+        REPORT "tech_hton only supports size of 1, 2 or 4 bytes" SEVERITY FAILURE;
+    END CASE;
+    RETURN vA;
+  END;
+  
   FUNCTION tech_nat_to_mbps_str( n : IN NATURAL ) RETURN STRING IS  -- Converts a selection of naturals to Mbps strings, used for edited MegaWizard file in ip_stratixiv_hssi_*_generic.vhd
     VARIABLE r : STRING(1 TO 9);
   BEGIN
-- 
GitLab