lx9_FT245_bench.vhd


1
LIBRARY ieee;
2
USE ieee.std_logic_1164.ALL;
3
use IEEE.std_logic_textio.all;
4
use STD.textio.all;
5
use IEEE.numeric_std.all;
6
 
7
ENTITY lx9_FT245_bench IS
8
END lx9_FT245_bench;
9
 
10
ARCHITECTURE behavior OF lx9_FT245_bench IS 
11
 
12
COMPONENT lx9_FT245 PORT(
13
  CLK : IN  std_logic;
14
  D : INOUT  std_logic_vector(7 downto 0);
15
  RXF : IN  std_logic;
16
  TXE : IN  std_logic;
17
  RD : OUT  std_logic;
18
  WR : OUT  std_logic;
19
  SIWU : OUT  std_logic;
20
  CLKOUT : IN  std_logic;
21
  OE : OUT  std_logic;
22
  PWRSAV : OUT  std_logic;
23
  ACBUS8 : OUT  std_logic;
24
  ACBUS9 : OUT  std_logic;
25
  RST : OUT  std_logic;
26
  PIN : OUT  std_logic_vector(26 downto 3);
27
  LED : OUT  std_logic_vector(1 downto 0);
28
  BTN : IN  std_logic);
29
END COMPONENT;
30
    
31
--Inputs
32
signal CLK : std_logic := '0';
33
signal RXF : std_logic := '0';
34
signal TXE : std_logic := '0';
35
signal CLKOUT : std_logic := '0';
36
signal BTN : std_logic := '0';
37
38
--BiDirs
39
signal D : std_logic_vector(7 downto 0);
40
41
--Outputs
42
signal RD : std_logic;
43
signal WR : std_logic;
44
signal SIWU : std_logic;
45
signal OE : std_logic;
46
signal PWRSAV : std_logic;
47
signal ACBUS8 : std_logic;
48
signal ACBUS9 : std_logic;
49
signal RST : std_logic;
50
signal PIN : std_logic_vector(26 downto 3);
51
signal LED : std_logic_vector(1 downto 0);
52
53
-- Clock period definitions
54
constant CLK_period : time := 20 ns;
55
constant CLKOUT_period : time := 16.66 ns;
56
  
57
signal D_old_u, D_u : unsigned(7 downto 0):=(others => '0');
58
 
59
BEGIN
60
 
61
-- Instantiate the Unit Under Test (UUT)
62
uut: lx9_FT245 PORT MAP(
63
  CLK => CLK,
64
  D => D,
65
  RXF => RXF,
66
  TXE => TXE,
67
  RD => RD,
68
  WR => WR,
69
  SIWU => SIWU,
70
  CLKOUT => CLKOUT,
71
  OE => OE,
72
  PWRSAV => PWRSAV,
73
  ACBUS8 => ACBUS8,
74
  ACBUS9 => ACBUS9,
75
  RST => RST,
76
  PIN => PIN,
77
  LED => LED,
78
  BTN => BTN);
79
80
CLK_process :process begin
81
  CLK <= '0';
82
  wait for CLK_period/2;
83
  CLK <= '1';
84
  wait for CLK_period/2;
85
  end process;
86
 
87
CLKOUT_process :process begin
88
  CLKOUT <= '0';
89
  wait for CLKOUT_period/2;
90
  CLKOUT <= '1';
91
  wait for CLKOUT_period/2;
92
  end process;
93
 
94
stim_proc: process begin    
95
  wait for 1.815 us;
96
  TXE <= '1';
97
  wait for 200 ns;
98
  TXE <= '0';
99
    wait for CLK_period*10;
100
    wait;
101
  end process;
102
   
103
write_io: process
104
  file my_output : TEXT open WRITE_MODE is "file_io.txt";
105
  variable my_line : LINE;
106
  variable whatsTheTime : time;
107
begin    
108
  wait until rising_edge(CLKOUT);
109
  if WR = '0' then
110
    D_old_u <= D_u;
111
    D_u <= unsigned(D);
112
    if D_u /= D_old_u +1 and D_u /= 0 then
113
      whatsTheTime := now;
114
      write(my_line,"FAIL - ");
115
      write(my_line,to_integer(D_old_u));
116
      write(my_line," - ");
117
      write(my_line,to_integer(D_u));
118
      write(my_line," - ");
119
      write(my_line,whatsTheTime);
120
      writeline(output,my_line);
121
    end if;
122
  end if;
123
124
  end process;
125
END;