/src/testbench_txrx.vhdl

http://github.com/whois/ece446_project · VHDL · 92 lines · 68 code · 12 blank · 12 comment · 6 complexity · af840944657bb870a5c6c5f0d22e9dae MD5 · raw file

  1. ---------------------------------------------------------------------------
  2. -- Author(s) : Jay Mundrawala <mundra@ir.iit.edu>
  3. --
  4. -- File : testbench_txrx.vhdl
  5. -- Creation Date : 13/11/2009
  6. -- Description:
  7. --
  8. ---------------------------------------------------------------------------
  9. library IEEE;
  10. use IEEE.STD_LOGIC_1164.ALL;
  11. use IEEE.numeric_std.all;
  12. ---------------------------------------------------------------------------
  13. Entity testbench_txrx is
  14. ---------------------------------------------------------------------------
  15. end entity;
  16. ---------------------------------------------------------------------------
  17. Architecture testbench_txrx_1 of testbench_txrx is
  18. ---------------------------------------------------------------------------
  19. constant T_R : time := 10 ns;
  20. constant T_T : time := 160 ns;
  21. signal clk_r, clk_t, start, rdy_t, rdy_r, ferr : std_logic;
  22. signal rx_d : std_logic := '1';
  23. signal data : std_logic_vector(7 downto 0);
  24. signal data_in : std_logic_vector(7 downto 0);
  25. begin
  26. DUT0: entity work.receiver
  27. port map(
  28. clk => clk_r,
  29. rx_d => rx_d,
  30. reset => '0',
  31. data => data,
  32. rdy => rdy_r,
  33. ferr => ferr
  34. );
  35. DUT1: entity work.transmitter
  36. port map(
  37. clk => clk_t,
  38. start => start,
  39. data => data_in,
  40. reset => '0',
  41. tx_d => rx_d,
  42. rdy => rdy_t
  43. );
  44. process
  45. begin
  46. clk_r <= '0';
  47. wait for T_R/2;
  48. clk_r <= '1';
  49. wait for T_R/2;
  50. end process;
  51. process
  52. begin
  53. clk_t <= '0';
  54. wait for T_T/2;
  55. clk_t <= '1';
  56. wait for T_T/2;
  57. end process;
  58. process
  59. begin
  60. start <= '0';
  61. data_in <= X"99";
  62. wait for T_R*2;
  63. start <= '1';
  64. assert rdy_t = '1'
  65. report "rdy_t changed too fast...the following TB will not work"
  66. severity failure;
  67. wait until rdy_t = '0';
  68. wait until rdy_t = '1';
  69. wait until rdy_r = '1' or ferr ='1';
  70. assert ferr = '0'
  71. report "Framing Error...Data will probably be bad"
  72. severity error;
  73. assert data = data_in
  74. report "Data != Data_in"
  75. severity error;
  76. assert false
  77. report "End of Simulation"
  78. severity failure;
  79. end process;
  80. end architecture testbench_txrx_1;