From b2a67b8ea38017addbad8543c54cc590df364d98 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Gendre?= <sebastien.gendre@etu.hesge.ch>
Date: Sat, 15 Mar 2025 20:36:23 +0100
Subject: [PATCH] Bank registry tb: Adapt to new I/0 and test 2 new register

---
 .../sim_1/new/tb_hog_build_info_regs.vhd      | 66 +++++++++++++++----
 1 file changed, 54 insertions(+), 12 deletions(-)

diff --git a/hog-build-info/hog-build-info.srcs/sim_1/new/tb_hog_build_info_regs.vhd b/hog-build-info/hog-build-info.srcs/sim_1/new/tb_hog_build_info_regs.vhd
index 812f30f..98f0926 100644
--- a/hog-build-info/hog-build-info.srcs/sim_1/new/tb_hog_build_info_regs.vhd
+++ b/hog-build-info/hog-build-info.srcs/sim_1/new/tb_hog_build_info_regs.vhd
@@ -42,8 +42,13 @@ architecture Behavioral of tb_hog_build_info_regs is
       rd_valid_i        : in std_logic; -- AXI4-lite R interface, validation
       rd_addr_i         : in std_logic_vector(C_ADDR_WIDTH-1 downto 0); -- AXI4-lite R, address
       rd_data_o         : out std_logic_vector(31 downto 0); -- AXI4-lite R, data
+      wr_valid_i        : in std_logic := '0'; -- AXI4-lite W interface, validation
+      wr_addr_i         : in std_logic_vector(C_ADDR_WIDTH-1 downto 0) := (others => '0'); -- AXI4-lite W, address
+      wr_data_i         : in std_logic_vector(31 downto 0) := (others => '0'); -- AXI4-lite W, data
       hog_global_date_i : in std_logic_vector(31 downto 0); -- Hog build global date
-      hog_global_time_i : in std_logic_vector(31 downto 0) -- Hog build global time
+      hog_global_time_i : in std_logic_vector(31 downto 0); -- Hog build global time
+      Hog_global_ver_i  : in std_logic_vector(31 downto 0); -- Hog build global version
+      hog_global_sha_i  : in std_logic_vector(31 downto 0) -- Hog build global latest commit SHA
       );
   end component;
 
@@ -60,25 +65,37 @@ architecture Behavioral of tb_hog_build_info_regs is
   -- Registers addresses
   constant GDR_BASEADDR : integer := 0; -- Global date register
   constant GTR_BASEADDR : integer := 4; -- Global time register
+  constant GVR_BASEADDR : integer := 8; -- Global version register
+  constant GSR_BASEADDR : integer := 12; -- Global SHA register
   constant UNK_BASEADDR : integer := 100; -- Unknown register
 
   -- Fake Hog build info
   constant hog_global_date : std_logic_vector(31 downto 0) := X"13032025";
   constant hog_global_time : std_logic_vector(31 downto 0) := X"00123456";
+  constant hog_global_ver  : std_logic_vector(31 downto 0) := X"01020006";
+  constant hog_global_sha  : std_logic_vector(31 downto 0) := X"A98B90F0";
 
   -- AXI4-lite interface bus
   signal rd_valid_s : std_logic := '0';
   signal rd_addr_s  : std_logic_vector(C_ADDR_WIDTH-1 downto 0) := (others => '0');
   signal rd_data_s  : std_logic_vector(31 downto 0) := (others => '0');
+  signal wr_valid_s : std_logic := '0';
+  signal wr_addr_s  : std_logic_vector(C_ADDR_WIDTH-1 downto 0) := (others => '0');
+  signal wr_data_s  : std_logic_vector(31 downto 0) := (others => '0');
+
 
   -- Hog build info inputs
   signal hog_global_date_s : std_logic_vector(31 downto 0) := (others => '0');
   signal hog_global_time_s : std_logic_vector(31 downto 0) := (others => '0');
+  signal hog_global_ver_s  : std_logic_vector(31 downto 0) := (others => '0');
+  signal hog_global_sha_s  : std_logic_vector(31 downto 0) := (others => '0');
 
   -- Test bench steps
   signal reset_done_s: std_logic := '0';
   signal check_reg_0_data_s: std_logic := '0';
   signal check_reg_1_data_s: std_logic := '0';
+  signal check_reg_2_data_s: std_logic := '0';
+  signal check_reg_3_data_s: std_logic := '0';
   signal check_reg_unk_data_s: std_logic := '0';
 
   procedure request_access_to_reg(
@@ -111,19 +128,26 @@ begin
     generic map (
       C_ADDR_WIDTH => C_ADDR_WIDTH
       )
-  port map (
-    clk_i => clk_s,
-    resetn => resetn_s,
-    rd_valid_i => rd_valid_s,
-    rd_addr_i => rd_addr_s,
-    rd_data_o => rd_data_s,
-    hog_global_date_i => hog_global_date_s,
-    hog_global_time_i => hog_global_time_s
-    );
+    port map (
+      clk_i => clk_s,
+      resetn => resetn_s,
+      rd_valid_i => rd_valid_s,
+      rd_addr_i => rd_addr_s,
+      rd_data_o => rd_data_s,
+      wr_valid_i => wr_valid_s,
+      wr_addr_i => wr_addr_s,
+      wr_data_i => wr_data_s,
+      hog_global_date_i => hog_global_date_s,
+      hog_global_time_i => hog_global_time_s,
+      hog_global_ver_i => hog_global_ver_s,
+      hog_global_sha_i => hog_global_sha_s
+      );
 
   -- Feed the register bank with fake Hog build info
-  hog_global_date_s <=hog_global_date;
-  hog_global_time_s <=hog_global_time;
+  hog_global_date_s <= hog_global_date;
+  hog_global_time_s <= hog_global_time;
+  hog_global_ver_s <= hog_global_ver;
+  hog_global_sha_s <= hog_global_sha;
   
 
   -- Clock generator process
@@ -152,6 +176,12 @@ begin
     
     -- Write the addr of the reg 1, validate it and wait a bit
     request_access_to_reg(GTR_BASEADDR, rd_valid_s, rd_addr_s, check_reg_1_data_s);
+
+    -- Write the addr of the reg 2, validate it and wait a bit
+    request_access_to_reg(GVR_BASEADDR, rd_valid_s, rd_addr_s, check_reg_2_data_s);
+
+    -- Write the addr of the reg 3, validate it and wait a bit
+    request_access_to_reg(GSR_BASEADDR, rd_valid_s, rd_addr_s, check_reg_3_data_s);
     
     -- Write the addr of an unknown reg, validate it and wait a bit
     request_access_to_reg(UNK_BASEADDR, rd_valid_s, rd_addr_s, check_reg_unk_data_s);
@@ -182,6 +212,18 @@ begin
       report ">>> register 1 value do not correspond to the value feed to the register bank. Instead, get: " & to_hstring(to_bitvector(rd_data_s))
       severity failure;
 
+    -- Check we get register 2 value on data out
+    wait until check_reg_2_data_s = '1';
+    assert rd_data_s = hog_global_ver
+      report ">>> register 1 value do not correspond to the value feed to the register bank. Instead, get: " & to_hstring(to_bitvector(rd_data_s))
+      severity failure;
+
+    -- Check we get register 3 value on data out
+    wait until check_reg_3_data_s = '1';
+    assert rd_data_s = hog_global_sha
+      report ">>> register 1 value do not correspond to the value feed to the register bank. Instead, get: " & to_hstring(to_bitvector(rd_data_s))
+      severity failure;
+    
     -- Check we get 0x0 on data out because of unknown register requested
     wait until check_reg_unk_data_s = '1';
     assert rd_data_s = X"00000000"
-- 
GitLab