OpenCores
URL https://opencores.org/ocsvn/spi_master_lightweight/spi_master_lightweight/trunk

Subversion Repositories spi_master_lightweight

[/] [spi_master_lightweight/] [trunk/] [sim/] [tb_lw_spi_master.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 bbinb
LIBRARY ieee;
2
USE ieee.std_logic_1164.ALL;
3
 
4
ENTITY tb_lw_spi_master IS
5
END tb_lw_spi_master;
6
 
7
ARCHITECTURE behavior OF tb_lw_spi_master IS
8
 
9
    -- Component Declaration for the Unit Under Test (UUT)
10
 
11
    COMPONENT lw_spi_master
12
    PORT(
13
         clk_i : IN  std_logic;
14
         en_i : IN  std_logic;
15
         mosi_data_i : IN  std_logic_vector(7 downto 0);
16
         miso_data_o : OUT  std_logic_vector(7 downto 0);
17
         data_ready_o : OUT  std_logic;
18
         cs_o : OUT  std_logic;
19
         sclk_o : OUT  std_logic;
20
         mosi_o : OUT  std_logic;
21
         miso_i : IN  std_logic
22
        );
23
    END COMPONENT;
24
 
25
 
26
   --Inputs
27
   signal clk_i : std_logic := '0';
28
   signal en_i : std_logic := '0';
29
   signal mosi_data_i : std_logic_vector(7 downto 0) := (others => '0');
30
   signal miso_i : std_logic := '0';
31
 
32
        --Outputs
33
   signal miso_data_o : std_logic_vector(7 downto 0);
34
   signal data_ready_o : std_logic;
35
   signal cs_o : std_logic;
36
   signal sclk_o : std_logic;
37
   signal mosi_o : std_logic;
38
 
39
   -- Clock period definitions
40
-- Clock period definitions
41
constant clk_i_period   : time := 20 ns;
42
constant sckPeriod              : time := 200 ns;
43
 
44
signal SPISIGNAL : std_logic_vector(7 downto 0) := (others => '0');
45
signal spiWrite : std_logic := '0';
46
signal spiWriteDone : std_logic := '0';
47
 
48
BEGIN
49
 
50
 
51
 
52
-- Instantiate the Unit Under Test (UUT)
53
uut: lw_spi_master PORT MAP (
54
clk_i => clk_i,
55
en_i => en_i,
56
mosi_data_i => mosi_data_i,
57
miso_data_o => miso_data_o,
58
data_ready_o => data_ready_o,
59
cs_o => cs_o,
60
sclk_o => sclk_o,
61
mosi_o => mosi_o,
62
miso_i => miso_i
63
);
64
 
65
-- Clock process definitions
66
clk_i_process :process
67
begin
68
        clk_i <= '0';
69
        wait for clk_i_period/2;
70
        clk_i <= '1';
71
        wait for clk_i_period/2;
72
end process;
73
 
74
SPIWRITE_P : process begin
75
 
76
        wait until rising_edge(spiWrite);
77
 
78
        -- for cpol = 1 cpha = 1
79
        -- for cpol = 0 cpha = 0
80
 
81
        miso_i <= SPISIGNAL(7);
82
        wait until falling_edge(sclk_o);
83
        miso_i <= SPISIGNAL(6);
84
        wait until falling_edge(sclk_o);
85
        miso_i <= SPISIGNAL(5);
86
        wait until falling_edge(sclk_o);
87
        miso_i <= SPISIGNAL(4);
88
        wait until falling_edge(sclk_o);
89
        miso_i <= SPISIGNAL(3);
90
        wait until falling_edge(sclk_o);
91
        miso_i <= SPISIGNAL(2);
92
        wait until falling_edge(sclk_o);
93
        miso_i <= SPISIGNAL(1);
94
        wait until falling_edge(sclk_o);
95
        miso_i <= SPISIGNAL(0);
96
 
97
        -- for cpol = 0 cpha = 1
98
        -- for cpol = 1 cpha = 0
99
 
100
        -- miso_i <= SPISIGNAL(7);
101
        -- wait until rising_edge(sclk_o);
102
        -- miso_i <= SPISIGNAL(6);
103
        -- wait until rising_edge(sclk_o);
104
        -- miso_i <= SPISIGNAL(5);
105
        -- wait until rising_edge(sclk_o);
106
        -- miso_i <= SPISIGNAL(4);
107
        -- wait until rising_edge(sclk_o);
108
        -- miso_i <= SPISIGNAL(3);
109
        -- wait until rising_edge(sclk_o);
110
        -- miso_i <= SPISIGNAL(2);
111
        -- wait until rising_edge(sclk_o);
112
        -- miso_i <= SPISIGNAL(1);
113
        -- wait until rising_edge(sclk_o);
114
        -- miso_i <= SPISIGNAL(0);      
115
 
116
        spiWriteDone    <= '1';
117
        wait for 1 ps;
118
        spiWriteDone    <= '0';
119
 
120
end process;
121
 
122
 
123
-- Stimulus process
124
stim_proc: process
125
begin
126
  -- hold reset state for 100 ns.
127
  wait for 100 ns;
128
 
129
  wait for clk_i_period*10;
130
 
131
  -- insert stimulus here 
132
 
133
----------------------------------------------------------------
134
--      -- CPOL,CPHA = 00
135
        en_i            <= '1';
136
 
137
        -- write 0xA7, read 0xB2
138
        mosi_data_i     <= x"A7";
139
        wait until falling_edge(cs_o);
140
        SPISIGNAL <= x"B2";
141
        spiWrite    <= '1';
142
        wait until rising_edge(spiWriteDone);
143
        spiWrite    <= '0';
144
 
145
        -- write 0xB8, read 0xC3
146
        wait until rising_edge(data_ready_o);
147
        mosi_data_i     <= x"B8";
148
        wait until falling_edge(data_ready_o);
149
        SPISIGNAL <= x"C3";
150
        spiWrite    <= '1';
151
        wait until rising_edge(spiWriteDone);
152
        spiWrite    <= '0';
153
        en_i            <= '0';
154
 
155
----------------------------------------------------------------
156
--      -- CPOL,CPHA = 10
157
--      en_i            <= '1';  
158
--      
159
--      -- write 0xA7, read 0xB2
160
--      mosi_data_i     <= x"A7";
161
--      wait until falling_edge(cs_o);
162
--      wait for 50 ns;
163
--      SPISIGNAL <= x"B2";
164
--      spiWrite    <= '1';
165
--      wait until rising_edge(spiWriteDone);
166
--      spiWrite    <= '0';
167
--      
168
--      -- write 0xB8, read 0xC3
169
--      wait until rising_edge(data_ready_o);
170
--      mosi_data_i     <= x"B8";       
171
--      wait until falling_edge(data_ready_o);
172
--      SPISIGNAL <= x"C3";
173
--      spiWrite    <= '1';
174
--      wait until rising_edge(spiWriteDone);
175
--      spiWrite    <= '0';
176
--      en_i            <= '0'; 
177
 
178
----------------------------------------------------------------
179
        -- CPOL,CPHA = 01
180
--      en_i            <= '1';  
181
--      
182
--      -- write 0xA7, read 0xB2
183
--      mosi_data_i     <= x"A7";
184
--      wait until falling_edge(cs_o);
185
--      wait until rising_edge(sclk_o);
186
--      SPISIGNAL <= x"B2";
187
--      spiWrite    <= '1';
188
--      wait until rising_edge(spiWriteDone);
189
--      spiWrite    <= '0';
190
--      
191
--      -- write 0xB8, read 0xC3
192
--      wait until rising_edge(data_ready_o);
193
--      mosi_data_i     <= x"B8";       
194
--      wait until rising_edge(sclk_o);
195
--      SPISIGNAL <= x"C3";
196
--      spiWrite    <= '1';
197
--      wait until rising_edge(spiWriteDone);
198
--      spiWrite    <= '0';
199
--      en_i            <= '0'; 
200
 
201
----------------------------------------------------------------
202
--      -- CPOL,CPHA = 11
203
--      en_i            <= '1';  
204
--      
205
--      -- write 0xA7, read 0xB2
206
--      mosi_data_i     <= x"A7";
207
--      wait until falling_edge(cs_o);
208
--      wait until falling_edge(sclk_o);
209
--      SPISIGNAL <= x"B2";
210
--      spiWrite    <= '1';
211
--      wait until rising_edge(spiWriteDone);
212
--      spiWrite    <= '0';
213
--      
214
--      -- write 0xB8, read 0xC3
215
--      wait until rising_edge(data_ready_o);
216
--      mosi_data_i     <= x"B8";       
217
--      wait until falling_edge(sclk_o);
218
--      SPISIGNAL <= x"C3";
219
--      spiWrite    <= '1';
220
--      wait until rising_edge(spiWriteDone);
221
--      spiWrite    <= '0';
222
--      en_i            <= '0';         
223
 
224
 
225
 
226
        wait for 1 us;
227
 
228
        assert false
229
        report "SIM DONE"
230
        severity failure;
231
end process;
232
 
233
END;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.