diff --git a/board/vfchd/wr_vfchd_pkg.vhd b/board/vfchd/wr_vfchd_pkg.vhd
index d61aa0f2cd34a321f3ae7f35d3f8da3d6ad66994..b727fc079b231e9d63ff4815cc0ff76f8bb39790 100644
--- a/board/vfchd/wr_vfchd_pkg.vhd
+++ b/board/vfchd/wr_vfchd_pkg.vhd
@@ -15,7 +15,11 @@ package wr_vfchd_pkg is
       g_pcs_16bit                 : boolean              := FALSE;
       g_fabric_iface              : t_board_fabric_iface := PLAIN;
       g_streamer_width            : integer              := 32;
-      g_dpram_initf               : string               := "../../bin/wrpc/wrc_phy8.mif");
+      g_dpram_initf               : string               := "../../bin/wrpc/wrc_phy8.mif";
+      g_diag_id                   : integer              := 0;
+      g_diag_ver                  : integer              := 0;
+      g_diag_ro_size              : integer              := 0;
+      g_diag_rw_size              : integer              := 0);
     port (
       clk_board_125m_i  : in  std_logic;
       clk_board_20m_i   : in  std_logic;
@@ -66,6 +70,8 @@ package wr_vfchd_pkg is
       tm_tai_o          : out std_logic_vector(39 downto 0);
       tm_cycles_o       : out std_logic_vector(27 downto 0);
       led_link_o        : out std_logic;
+      aux_diag_i        : in  t_generic_word_array(g_diag_ro_size-1 downto 0) := (others =>(others=>'0'));
+      aux_diag_o        : out t_generic_word_array(g_diag_rw_size-1 downto 0);
       led_act_o         : out std_logic);
   end component xwrc_board_vfchd;
 
@@ -76,7 +82,11 @@ package wr_vfchd_pkg is
       g_pcs_16bit                 : integer := 0;
       g_fabric_iface              : string  := "PLAINFBRC";
       g_streamer_width            : integer := 32;
-      g_dpram_initf               : string  := "../../bin/wrpc/wrc_phy8.mif");
+      g_dpram_initf               : string  := "../../bin/wrpc/wrc_phy8.mif";
+      g_diag_id                   : integer                        := 0;
+      g_diag_ver                  : integer                        := 0;
+      g_diag_ro_vector_width      : integer                        := 0;
+      g_diag_rw_vector_width      : integer                        := 0);
     port (
       clk_board_125m_i  : in  std_logic;
       clk_board_20m_i   : in  std_logic;
@@ -163,6 +173,8 @@ package wr_vfchd_pkg is
       tm_tai_o          : out std_logic_vector(39 downto 0);
       tm_cycles_o       : out std_logic_vector(27 downto 0);
       led_link_o        : out std_logic;
+      aux_diag_i        : in  std_logic_vector(g_diag_ro_vector_width - 1 downto 0) := (others => '0');
+      aux_diag_o        : out std_logic_vector(g_diag_rw_vector_width - 1 downto 0) := (others => '0');
       led_act_o         : out std_logic);
   end component wrc_board_vfchd;
 
diff --git a/board/vfchd/wrc_board_vfchd.vhd b/board/vfchd/wrc_board_vfchd.vhd
index 31194a6f4da8697289ec86482912bfaa4b1ec2d6..f4ed17223fe5209bfde45bdd262779ae3fd9b044 100644
--- a/board/vfchd/wrc_board_vfchd.vhd
+++ b/board/vfchd/wrc_board_vfchd.vhd
@@ -68,7 +68,13 @@ entity wrc_board_vfchd is
     -- data width when g_fabric_iface = "streamers" (otherwise ignored)
     g_streamer_width            : integer := 32;
     -- memory initialisation file for embedded CPU
-    g_dpram_initf               : string  := "../../bin/wrpc/wrc_phy8.mif"
+    g_dpram_initf               : string  := "../../bin/wrpc/wrc_phy8.mif";
+    -- identification (id and ver) of the layout of words in the generic diag interface
+    g_diag_id                   : integer                        := 0;
+    g_diag_ver                  : integer                        := 0;
+    -- size the generic diag interface
+    g_diag_ro_vector_width      : integer                        := 0;
+    g_diag_rw_vector_width      : integer                        := 0
     );
   port (
     ---------------------------------------------------------------------------
@@ -212,6 +218,13 @@ entity wrc_board_vfchd is
     wb_eth_rty_i   : in  std_logic                                          := '0';
     wb_eth_stall_i : in  std_logic                                          := '0';
 
+    ---------------------------------------------------------------------------
+    -- Generic diagnostics interface (access from WRPC via SNMP or uart console
+    ---------------------------------------------------------------------------
+
+    aux_diag_i      : in  std_logic_vector(g_diag_ro_vector_width - 1 downto 0) := (others => '0');
+    aux_diag_o      : out std_logic_vector(g_diag_rw_vector_width - 1 downto 0) := (others => '0');
+
     ---------------------------------------------------------------------------
     -- WRPC timing interface and status
     ---------------------------------------------------------------------------
@@ -247,6 +260,13 @@ architecture std_wrapper of wrc_board_vfchd is
   signal wb_eth_master_out : t_wishbone_master_out;
   signal wb_eth_master_in  : t_wishbone_master_in;
 
+  -- Aux diagnostics
+  constant c_diag_ro_size  : integer:= g_diag_ro_vector_width/32;
+  constant c_diag_rw_size  : integer:= g_diag_rw_vector_width/32;
+
+  signal aux_diag_in  : t_generic_word_array(c_diag_ro_size-1 downto 0);
+  signal aux_diag_out : t_generic_word_array(c_diag_rw_size-1 downto 0);
+
 begin  -- architecture struct
 
   -- Map top-level signals to internal records
@@ -301,6 +321,10 @@ begin  -- architecture struct
   wb_eth_master_in.rty   <= wb_eth_rty_i;
   wb_eth_master_in.stall <= wb_eth_stall_i;
 
+  -- auxiliary diagnostics
+  aux_diag_in <= f_de_vectorize_diag(aux_diag_i,g_diag_ro_vector_width);
+  aux_diag_o  <= f_vectorize_diag(aux_diag_out, g_diag_rw_vector_width);
+
   -- Instantiate the records-based module
   cmp_xwrc_board_vfchd : xwrc_board_vfchd
     generic map (
@@ -309,7 +333,11 @@ begin  -- architecture struct
       g_pcs_16bit                 => f_int2bool(g_pcs_16bit),
       g_fabric_iface              => f_str2iface_type(g_fabric_iface),
       g_streamer_width            => g_streamer_width,
-      g_dpram_initf               => g_dpram_initf)
+      g_dpram_initf               => g_dpram_initf,
+      g_diag_id                   => g_diag_id,
+      g_diag_ver                  => g_diag_ver,
+      g_diag_ro_size              => c_diag_ro_size,
+      g_diag_rw_size              => c_diag_rw_size)
     port map (
       clk_board_125m_i  => clk_board_125m_i,
       clk_board_20m_i   => clk_board_20m_i,
@@ -359,6 +387,8 @@ begin  -- architecture struct
       tm_tai_o          => tm_tai_o,
       tm_cycles_o       => tm_cycles_o,
       led_link_o        => led_link_o,
+      aux_diag_i        => aux_diag_in,
+      aux_diag_o        => aux_diag_out,
       led_act_o         => led_act_o);
 
 end architecture std_wrapper;
diff --git a/board/vfchd/xwrc_board_vfchd.vhd b/board/vfchd/xwrc_board_vfchd.vhd
index f9bef3f5d19c53f10ecc9cf4cbdd59087e026973..b41c8a61789968bcdecbe086464da2c200f2501e 100644
--- a/board/vfchd/xwrc_board_vfchd.vhd
+++ b/board/vfchd/xwrc_board_vfchd.vhd
@@ -66,7 +66,13 @@ entity xwrc_board_vfchd is
     -- data width when g_fabric_iface = "streamers" (otherwise ignored)
     g_streamer_width            : integer              := 32;
     -- memory initialisation file for embedded CPU
-    g_dpram_initf               : string               := "../../bin/wrpc/wrc_phy8.mif"
+    g_dpram_initf               : string               := "../../bin/wrpc/wrc_phy8.mif";
+    -- identification (id and ver) of the layout of words in the generic diag interface
+    g_diag_id                   : integer                        := 0;
+    g_diag_ver                  : integer                        := 0;
+    -- size the generic diag interface
+    g_diag_ro_size              : integer                        := 0;
+    g_diag_rw_size              : integer                        := 0
     );
   port (
     ---------------------------------------------------------------------------
@@ -174,6 +180,13 @@ entity xwrc_board_vfchd is
     wb_eth_master_o : out t_wishbone_master_out;
     wb_eth_master_i : in  t_wishbone_master_in := cc_dummy_master_in;
 
+    ---------------------------------------------------------------------------
+    -- Generic diagnostics interface (access from WRPC via SNMP or uart console
+    ---------------------------------------------------------------------------
+
+    aux_diag_i           : in  t_generic_word_array(g_diag_ro_size-1 downto 0) := (others =>(others=>'0'));
+    aux_diag_o           : out t_generic_word_array(g_diag_rw_size-1 downto 0);
+
     ---------------------------------------------------------------------------
     -- WRPC timing interface and status
     ---------------------------------------------------------------------------
@@ -369,10 +382,10 @@ begin  -- architecture struct
       g_softpll_enable_debugger   => FALSE,
       g_vuart_fifo_size           => 1024,
       g_pcs_16bit                 => g_pcs_16bit,
-      g_diag_id                   => 0,
-      g_diag_ver                  => 0,
-      g_diag_ro_size              => c_WR_TRANS_ARR_SIZE_OUT,
-      g_diag_rw_size              => c_WR_TRANS_ARR_SIZE_IN,
+      g_diag_id                   => g_diag_id,
+      g_diag_ver                  => g_diag_ver,
+      g_diag_ro_size              => g_diag_ro_size,
+      g_diag_rw_size              => g_diag_rw_size,
       g_streamer_width            => g_streamer_width,
       g_fabric_iface              => g_fabric_iface
       )
@@ -451,6 +464,8 @@ begin  -- architecture struct
       tm_cycles_o          => tm_cycles_o,
       pps_p_o              => pps_p_o,
       pps_led_o            => pps_led_o,
+      aux_diag_i           => aux_diag_i,
+      aux_diag_o           => aux_diag_o,
       link_ok_o            => open);
 
 end architecture struct;