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

Subversion Repositories m16c5x

[/] [m16c5x/] [trunk/] [RTL/] [Sim/] [tb_M16C5x_SPI.v] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 MichaelA
`timescale 1ns / 1ps
2
 
3
////////////////////////////////////////////////////////////////////////////////
4
// Company: 
5
// Engineer:
6
//
7
// Create Date:   11:38:25 07/06/2013
8
// Design Name:   M16C5x_SPI
9
// Module Name:   C:/XProjects/ISE10.1i/M16C5x/Src/tb_M16C5x_SPI.v
10
// Project Name:  M16C5x
11
// Target Device:  
12
// Tool versions:  
13
// Description: 
14
//
15
// Verilog Test Fixture created by ISE for module: M16C5x_SPI
16
//
17
// Dependencies:
18
// 
19
// Revision:
20
// Revision 0.01 - File Created
21
// Additional Comments:
22
// 
23
////////////////////////////////////////////////////////////////////////////////
24
 
25
module tb_M16C5x_SPI;
26
 
27
reg     Rst;
28
reg     SysClk;
29
reg     ClkEn;
30
//
31
reg     Clk_UART;
32
//
33
reg     WE_CR;
34
reg     WE_TF;
35
reg     RE_RF;
36
reg     [7:0] DI;
37
wire    [7:0] DO;
38
//
39
wire    [1:0] CS;
40
wire    SCK;
41
wire    MOSI;
42
wire    MISO;
43
//
44
wire    SS;
45
//
46
wire    TF_FF;
47
wire    TF_EF;
48
wire    RF_FF;
49
wire    RF_EF;
50
 
51
reg     [7:0] Val;
52
 
53
// Instantiate the Unit Under Test (UUT)
54
 
55
M16C5x_SPI  uut (
56
                .Rst(Rst),
57
                .Clk(SysClk),
58
                .ClkEn(ClkEn),
59
 
60
                .WE_CR(WE_CR),
61
                .WE_TF(WE_TF),
62
                .RE_RF(RE_RF),
63
                .DI(DI),
64
                .DO(DO),
65
 
66
                .CS(CS),
67
                .SCK(SCK),
68
                .MOSI(MOSI),
69
                .MISO(MISO),
70
 
71
                .SS(SS),
72
 
73
                .TF_FF(TF_FF),
74
                .TF_EF(TF_EF),
75
                .RF_FF(RF_FF),
76
                .RF_EF(RF_EF)
77
            );
78
 
79
wire    [2:0] SSP_RA;
80
wire    SSP_WnR;
81
wire    SSP_En;
82
wire    SSP_EOC;
83
wire    [11:0] SSP_DI;
84
wire    [11:0] SSP_DO;
85
wire    [ 3:0] BC;
86
 
87
SSPx_Slv    SSP_Slv (
88
                .Rst(Rst),
89
 
90
                .SSEL(CS[1]),
91
                .SCK(SCK),
92
                .MOSI(MOSI),
93
                .MISO(MISO),
94
 
95
                .RA(SSP_RA),
96
                .WnR(SSP_WnR),
97
                .En(SSP_En),
98
                .EOC(SSP_EOC),
99
                .DI(SSP_DI),
100
                .DO(SSP_DO),
101
 
102
                .BC(BC)
103
            );
104
 
105
wire    TxD_232;
106
wire    xRTS;
107
reg     xCTS;
108
 
109
wire    TxD_485;
110
wire    xDE;
111
 
112
wire    TxIdle;
113
wire    RxIdle;
114
 
115
SSP_UART    UART (
116
                .Rst(Rst),
117
                .Clk(Clk_UART),
118
 
119
                .SSP_SSEL(CS[1]),
120
                .SSP_SCK(SCK),
121
                .SSP_RA(SSP_RA),
122
                .SSP_WnR(SSP_WnR),
123
                .SSP_EOC(SSP_EOC),
124
                .SSP_DI(SSP_DI),
125
                .SSP_DO(SSP_DO),
126
 
127
                .TxD_232(TxD_232),
128
                .RxD_232(TxD_232),
129
                .xRTS(xRTS),
130
                .xCTS(xCTS),
131
 
132
                .TxD_485(TxD_485),
133
                .RxD_485(TxD_485),
134
                .xDE(xDE),
135
 
136
                .IRQ(IRQ),
137
 
138
                .TxIdle(TxIdle),
139
                .RxIdle(RxIdle)
140
            );
141
 
142
initial begin
143
    // Initialize Inputs
144
    Rst      = 1;
145
    SysClk   = 1;
146
    Clk_UART = 1;
147
 
148
    WE_CR    = 0;
149
    WE_TF    = 0;
150
    RE_RF    = 0;
151
    DI       = 0;
152
 
153
    xCTS     = 1;
154
 
155
    // Wait 100 ns for global reset to finish
156
    #101 Rst = 0;
157
 
158
    // Add stimulus here
159
 
160
    WR_CR(8'h0F);   // Enable Reads, Select SSP_UART, Mode 3, Divide by 2, MSB
161
 
162
    @(posedge SysClk);
163
    @(posedge SysClk);
164
    @(posedge SysClk);
165
    @(posedge SysClk);
166
    @(posedge SysClk);
167
    @(posedge SysClk);
168
    @(posedge SysClk);
169
    @(posedge SysClk);
170
 
171
    WR_TF(8'h02);   // Write UART CR, Md = 0, RTSo = 1, Fmt = 8n1, Baud = 1.5M
172
    WR_TF(8'h00);
173
 
174
    @(negedge RF_EF) RD_RF(Val);     // Read out return data (high byte)
175
    @(negedge RF_EF) RD_RF(Val);     // Read out return data (low byte)
176
 
177
    WR_TF(8'h00);   // Read UART CR
178
    WR_TF(8'h00);
179
 
180
    @(negedge RF_EF) RD_RF(Val);     // Read out return data (high byte)
181
    @(negedge RF_EF) RD_RF(Val);     // Read out return data (low byte)
182
 
183
    WR_TF(8'h20);   // Read UART SR
184
    WR_TF(8'h00);
185
 
186
    @(negedge RF_EF) RD_RF(Val);     // Read out return data (high byte)
187
    @(negedge RF_EF) RD_RF(Val);     // Read out return data (low byte)
188
 
189
    WR_CR(8'h0E);   // Select UART but disable capturing input data
190
 
191
    WR_TF(8'h50);   // Write TDR
192
    WR_TF(8'h0F);
193
 
194
end
195
 
196
////////////////////////////////////////////////////////////////////////////////
197
//
198
//  Clocks
199
//
200
 
201
always #8 SysClk = ~SysClk;
202
 
203
always @(posedge SysClk)
204
begin
205
    if(Rst)
206
        ClkEn = #1 0;
207
    else
208
        ClkEn = #1 ~ClkEn;
209
end
210
 
211
always #10.416 Clk_UART = ~Clk_UART;
212
 
213
////////////////////////////////////////////////////////////////////////////////
214
//
215
//  Tasks and Functions
216
//
217
 
218
task WR_CR;
219
    input [7:0] Val;
220
 
221
    begin
222
        @(posedge ClkEn);
223
        WE_CR = 1; DI = Val;
224
        @(posedge SysClk) #1;
225
        WE_CR = 0; DI = 0;
226
    end
227
endtask
228
 
229
task WR_TF;
230
    input [7:0] Val;
231
 
232
    begin
233
        @(posedge ClkEn);
234
        WE_TF = 1; DI = Val;
235
        @(posedge SysClk) #1;
236
        WE_TF = 0; DI = 0;
237
    end
238
endtask
239
 
240
task RD_RF;
241
    output [7:0] Val;
242
 
243
    begin
244
        @(posedge ClkEn);
245
        RE_RF = 1;
246
        @(posedge SysClk) Val = #1 DO;
247
        RE_RF = 0;
248
    end
249
endtask
250
 
251
endmodule
252
 

powered by: WebSVN 2.1.0

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