diff --git a/hog-build-info/hog-build-info.srcs/sim/axi4lite_interface_tb/tb_axi4lite_hog_build_info.vhd b/hog-build-info/hog-build-info.srcs/sim/axi4lite_interface_tb/tb_axi4lite_hog_build_info.vhd index 713bf403586f975a86ed2d242eead1bb817ecb0d..5ca87972324e20258403fa1cb88b407283009b09 100644 --- a/hog-build-info/hog-build-info.srcs/sim/axi4lite_interface_tb/tb_axi4lite_hog_build_info.vhd +++ b/hog-build-info/hog-build-info.srcs/sim/axi4lite_interface_tb/tb_axi4lite_hog_build_info.vhd @@ -83,8 +83,8 @@ architecture Behavioral of tb_axi4lite_hog_build_info is -- Resetn signal signal resetn_s : std_logic := '1'; - -- Config - constant C_ADDR_WIDTH: integer := 32; + -- Config the address width + constant C_ADDR_WIDTH: integer := 8; -- Registers addresses constant GDR_BASEADDR : integer := 0; -- Global date register @@ -92,6 +92,8 @@ architecture Behavioral of tb_axi4lite_hog_build_info is constant GVR_BASEADDR : integer := 8; -- Global version register constant GSR_BASEADDR : integer := 12; -- Global SHA register constant UNK_BASEADDR : integer := 14; -- Unknown register + constant OOB_BASEADDR: integer := 256; -- Register, 1 bit out of the max + -- address for 8 bits -- Fake Hog build info constant hog_global_date : std_logic_vector(31 downto 0) := X"13032025"; @@ -155,6 +157,7 @@ architecture Behavioral of tb_axi4lite_hog_build_info is 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'; + signal check_reg_oob_data_s : std_logic := '0'; begin @@ -239,6 +242,11 @@ begin axi4lite_read(UNK_BASEADDR, rd_data_s, axi4lite_rd_bus_i, axi4lite_rd_bus_o); check_reg_unk_data_s <= '1'; + -- Request to read a register 1 bit above the max permitted by address width + -- It should be truncated the MSB and read the register 0 + axi4lite_read(OOB_BASEADDR, rd_data_s, axi4lite_rd_bus_i, axi4lite_rd_bus_o); + check_reg_oob_data_s <= '1'; + -- Wait endlessly wait; @@ -263,13 +271,13 @@ begin -- 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)) + report ">>> register 2 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)) + report ">>> register 3 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 @@ -278,6 +286,13 @@ begin report ">>> rd_data_s is not at 0x0 when unknown register is requested. Instead, get: " & to_hstring(to_bitvector(rd_data_s)) severity failure; + -- Check the MSB truncate work and by requesting 1 bit above max address, + -- we got the register 0 value + wait until check_reg_oob_data_s = '1'; + assert rd_data_s = hog_global_date + report ">>> after truncate MSB in address to get 0x0, value get from registers bank do not correspond to the value of register 0. Instead, get: " & to_hstring(to_bitvector(rd_data_s)) + severity failure; + -- If arrive here, the simulation have completed successfully wait for CLK_PERIOD * 10; report ">>> Simulation completed successfully";