You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
1.6 KiB

  1. library ieee;
  2. use ieee.std_logic_1164.all;
  3. use ieee.numeric_std.all;
  4. use std.env.all;
  5. use work.risc_v_pkg.all;
  6. entity tb_risc_v is
  7. end entity tb_risc_v;
  8. architecture sim of tb_risc_v is
  9. signal s_clk : std_logic := '1';
  10. signal s_reset_n : std_logic := '0';
  11. signal s_reg_file : t_reg_file;
  12. signal s_dmem : t_dmem;
  13. begin
  14. s_clk <= not s_clk after 5 ns;
  15. s_reset_n <= '1' after 20 ns;
  16. DUT : entity work.risc_v
  17. port map (
  18. reset_n_i => s_reset_n,
  19. clk_i => s_clk,
  20. reg_file_o => s_reg_file,
  21. dmem_o => s_dmem
  22. );
  23. -- Checker
  24. process is
  25. variable v_expected : std_logic_vector(31 downto 0);
  26. begin
  27. wait until s_reset_n = '1';
  28. -- until program is finished
  29. wait for c_imem'length * 10 ns;
  30. -- Check register file entries
  31. for i in t_reg_file'range loop
  32. case i is
  33. when 0 => v_expected := 32x"0";
  34. when 1 => v_expected := 32x"15";
  35. when 2 => v_expected := 32x"7";
  36. when 3 => v_expected := x"FFFFFFFC";
  37. when 4 => v_expected := 32x"B4";
  38. when 31 => v_expected := 32x"1F";
  39. when others => v_expected := 32x"1";
  40. end case;
  41. check_equal(s_reg_file(i), v_expected, "Reg. x" & to_string(i) & ": ");
  42. end loop;
  43. -- Check data memory entries
  44. for i in t_dmem'range loop
  45. case i is
  46. when 2 => v_expected := 32x"15";
  47. when others => v_expected := std_logic_vector(to_unsigned(t_dmem'high-i, 32));
  48. end case;
  49. check_equal(s_dmem(i), v_expected, "Dmem @" & to_string(i) & ": ");
  50. end loop;
  51. stop(0);
  52. end process;
  53. end architecture sim;