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

Subversion Repositories asynchronous_master_spi

[/] [asynchronous_master_spi/] [trunk/] [testbanch/] [simulate.v] - Blame information for rev 3

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 morgothcre
`timescale 1ns / 1ps
2
//////////////////////////////////////////////////////////////////////////////////
3
// Company: 
4
// Engineer: 
5
// 
6
// Create Date: 01/14/2017 06:20:37 PM
7
// Design Name: 
8
// Module Name: simulate
9
// Project Name: 
10
// Target Devices: 
11
// Tool Versions: 
12
// Description: 
13
// 
14
// Dependencies: 
15
// 
16
// Revision:
17
// Revision 0.01 - File Created
18
// Additional Comments:
19
// 
20
//////////////////////////////////////////////////////////////////////////////////
21
module simulate(
22
 
23
    );
24
 
25
    wire rst;
26
    reg _rst = 0;
27
    wire [7:0]data;
28
    reg [7:0]_datasend;
29
    reg [7:0]_datarec;
30
    wire wr;
31
    reg _wr = 0;
32
    wire rd;
33
    reg _rd = 0;
34
    wire buffempty;
35
    wire sck;
36
    wire mosi;
37
    reg miso = 0;
38
    wire ss;
39
    wire senderr;
40
    reg res_senderr = 0;
41
    wire charreceived;
42
 
43
 
44
    wire busy;
45
    reg [2:0]clk = 3'b000;
46
 
47
    reg clk_in = 0;
48
    reg clk_out = 0;
49
    parameter tck = 2; ///< clock tick
50
 
51
    always #(tck/2) clk_in <= ~clk_in; // clocking device
52
 
53
    spi_master # (
54
    .WORD_LEN(8),/* Default 8 */
55
    .PRESCALLER_SIZE(8)/* Default 8 / Max 8*/
56
    )
57
    spi0 (
58
            .clk(clk[2]),
59
            .rst(rst),
60
            .data(data),
61
            .wr(wr),
62
            .rd(rd),
63
            .buffempty(buffempty),
64
            .prescaller(3'h0),
65
            .sck(sck),
66
            .mosi(mosi),
67
            .miso(miso),
68
            .ss(ss),
69
            .lsbfirst(1'b0),
70
            .mode(2'h1),
71
            .senderr(senderr),
72
            .res_senderr(res_senderr),
73
            .charreceived(charreceived)
74
    );
75
 
76
 
77
    initial begin
78
        _rst <= 1;
79
        #2;
80
         _rst <= 0;
81
        #2;
82
         miso <= 1'b1;
83
         /* Send first char */
84
        _datasend <= 8'h55;
85
        /* Wait half core clock for propagation*/
86
        #1;
87
        _wr <= 1'b1;
88
        #1;
89
        _wr <= 1'b0;
90
        #1;
91
        /* Wait until send buffer is transfered to shift register */
92
         wait(buffempty == 1'b1);
93
         /* Let 'miso' unchanged because first char has been transfered to shift reg, the second will be writed to send buffer */
94
         //miso <= 1'b1;
95
         /* Send second char */
96
        _datasend <= 8'hAA;
97
        /* Wait half core clock for propagation*/
98
        #1;
99
        _wr <= 1'b1;
100
        #1;
101
        _wr <= 1'b0;
102
        /* Wait some cicles */
103
        #10;
104
        /* Send another char with buffer full to see the returned 'senderr' */
105
        _datasend <= 8'h55;
106
        _wr <= 1'b1;
107
        #1;
108
        _wr <= 1'b0;
109
        /*If 'senderr' is asserted, reset it*/
110
        if(senderr)
111
        begin
112
            res_senderr <= 1'b1;
113
            #1;
114
            res_senderr <= 1'b0;
115
        end
116
        /* Wait until send buffer is transfered to shift register and send the third byte */
117
        /* Wait half 'clk_in' for internal timming */
118
        #1;
119
        /* Wait until first char has been received*/
120
        wait(charreceived == 1'b1);
121
        /* Put 'data' to tri state */
122
        _datasend = 8'bz;
123
        /* Wait half core clock */
124
        #1;
125
        /* Assert 'rd' */
126
        _rd = 1'b1;
127
        /* Wait half core clock for propagation */
128
        #1;
129
        /* Read data into '_datarec' register */
130
        _datarec = data;
131
        _rd = 1'b0;
132
        #1;
133
        /* Wait until interface is ready to rake the third character */
134
        wait(buffempty == 1'b1);
135
        /* Wait half 'clk_in' for internal timming */
136
        #1;
137
        /* If the buffer send register become empty */
138
        /* Send second char */
139
        miso <= 1'b0;
140
        _datasend <= 8'h55;
141
        #1;
142
        _wr <= 1'b1;
143
        #1;
144
        _wr <= 1'b0;
145
        #1;
146
        /* Wait until second char has been received*/
147
        wait(charreceived == 1'b1);
148
        /* Put 'data' to tri state */
149
        _datasend = 8'bz;
150
        /* Wait half core clock */
151
        #1;
152
        /* Assert 'rd' */
153
        _rd = 1'b1;
154
        /* Wait half core clock for propagation */
155
        #1;
156
        /* Read data into '_datarec' register */
157
        _datarec = data;
158
        _rd = 1'b0;
159
        miso <= 1'b1;
160
        /* Wait until second char has been received*/
161
        wait(charreceived == 1'b1);
162
        /* Put 'data' to tri state */
163
        _datasend = 8'bz;
164
        /* Wait half core clock */
165
        #1;
166
        /* Assert 'rd' */
167
        _rd = 1'b1;
168
        /* Wait half core clock for propagation */
169
        #1;
170
        /* Read data into '_datarec' register */
171
        _datarec = data;
172
        _rd = 1'b0;
173
        #10;
174
        $finish;
175
    end
176
 
177
    assign rst = _rst;
178
    assign wr = _wr;
179
    assign rd = _rd;
180
    assign data = _datasend;
181
 
182
always @ (posedge clk_in)
183
begin
184
    clk <= clk + 1;
185
end
186
endmodule

powered by: WebSVN 2.1.0

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