top_tb.vhd 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. library ieee;
  2. use ieee.std_logic_1164.all;
  3. use work.top_pkg.all;
  4. entity top_tb is
  5. end entity;
  6. architecture bench of top_tb is
  7. -- component definition copied from top
  8. component top is
  9. generic (
  10. CYCLES_SEC : integer := 100e6;
  11. CYCLES_7_SEGMENT_REFRESH : integer := 16e5;
  12. MAX_SECS_LOG2 : integer := 16;
  13. LED_LOW : integer := 0;
  14. LED_HIGH : integer := 15;
  15. SEG_LOW : integer := 0;
  16. SEG_HIGH : integer := 3;
  17. SEG_MIN : integer := 0;
  18. SEG_MAX : integer := 6
  19. );
  20. port (
  21. -- general control signals
  22. clk : in std_logic;
  23. res : in std_logic;
  24. -- led controller signals
  25. led : out std_logic_vector(LED_HIGH downto LED_LOW);
  26. -- ssd controller signals
  27. seg_n : out std_logic_vector(SEG_MAX downto SEG_MIN);
  28. dp_n : out std_logic;
  29. an_n : out std_logic_vector(SEG_HIGH downto SEG_LOW)
  30. );
  31. end component;
  32. -- tb constants
  33. constant HALF_PERIOD : time := 5ns;
  34. -- top constants
  35. constant CYCLES_SEC : integer := 15; -- shorter for sim
  36. constant CYCLES_7_SEGMENT_REFRESH : integer := 15; -- shorter for sim
  37. constant MAX_SECS_LOG2 : integer := 4; -- fewer leds for sim
  38. constant LED_LOW : integer := 0;
  39. constant LED_HIGH : integer := 15;
  40. constant SEG_LOW : integer := 0;
  41. constant SEG_HIGH : integer := 3;
  42. constant SEG_MIN : integer := 0;
  43. constant SEG_MAX : integer := 6;
  44. -- tb signals
  45. -- these need default assignments (uut signals must be set correctly by unit itself)
  46. signal finished : boolean := false;
  47. -- general control signals
  48. signal clk : std_logic := '0';
  49. signal res : std_logic := '0';
  50. -- top signals
  51. -- led controller signals
  52. signal led : std_logic_vector(LED_HIGH downto LED_LOW);
  53. -- ssd controller signals
  54. signal seg_n : std_logic_vector(SEG_MAX downto SEG_MIN);
  55. signal dp_n : std_logic;
  56. signal an_n : std_logic_vector(SEG_HIGH downto SEG_LOW);
  57. begin
  58. uut : top
  59. generic map (
  60. CYCLES_SEC => CYCLES_SEC,
  61. CYCLES_7_SEGMENT_REFRESH => CYCLES_7_SEGMENT_REFRESH,
  62. MAX_SECS_LOG2 => MAX_SECS_LOG2,
  63. LED_LOW => LED_LOW,
  64. LED_HIGH => LED_HIGH,
  65. SEG_LOW => SEG_LOW,
  66. SEG_HIGH => SEG_HIGH,
  67. SEG_MIN => SEG_MIN,
  68. SEG_MAX => SEG_MAX
  69. )
  70. port map (
  71. clk => clk,
  72. res => res,
  73. led => led,
  74. seg_n => seg_n,
  75. dp_n => dp_n,
  76. an_n => an_n
  77. );
  78. -- generate the test signal and stop
  79. put_uut : process
  80. begin
  81. finished <= false;
  82. --LED <= "0000000000000000"; -- should be done by reset
  83. res <= '1';
  84. wait for 10ns;
  85. res <= '0';
  86. wait for 10ms;
  87. finished <= true;
  88. end process;
  89. -- generate clk signal for test
  90. clk <= not clk after HALF_PERIOD when not finished else '0';
  91. end bench;