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;
|