use ieee.std_logic_arith.all; is missing in i2c_master_top.vhd, therefore unsigned type is not recognized.
should be "use ieee.numeric_std.all;". it's also wrong in i2c_master_byte_ctrl, breaking some compilers/simulators (Xilinx)
Not really a bug, just outdated coding style. Instead of 'unsigned' nowadays std_logic_vector is used anyways.
better use ieee.numeric_std instead of ieee.std_logi_arith. The former grants coherent simulation/implementation behaviour among different vendors