Subversion Repositories ngs

Rev

Rev 99 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
99 lvd 1
// (c) NedoPC 2013
2
//
3
// SD data sender to test SD and MP3 dmas
4
 
5
`timescale 1ns/100ps
6
 
7
module sd
8
(
9
        input  wire clk,
100 lvd 10
        input  wire sdi,
11
        output wire sdo
99 lvd 12
);
13
 
14
        reg [7:0] byteout;
15
        reg [7:0] bytein;
16
 
17
        int bitcntout;
18
        int bitcntin;
19
 
20
        int state;
21
        int count;
22
 
100 lvd 23
        reg [7:0] tmp;
24
 
99 lvd 25
        localparam _FF   = 'd0;
26
        localparam _FE   = 'd1;
27
        localparam _DATA = 'd2;
28
        localparam _CRC  = 'd3;
29
 
30
 
31
        initial byteout = 8'hFF;
100 lvd 32
        initial bitcntout = 8;
99 lvd 33
        initial bitcntin = 7;
34
        initial state = _FF;
35
        initial count = 5;
36
 
37
 
38
 
100 lvd 39
        assign sdo = byteout[7];
99 lvd 40
 
41
 
42
        always @(negedge clk)
43
        begin
100 lvd 44
                byteout <= {byteout[6:0],1'b1};
99 lvd 45
                bitcntout = bitcntout - 1;
46
 
47
                if( bitcntout<0 )
48
                begin
49
                        bitcntout = 7;
50
 
51
                        case( state )
52
 
53
                        _FF:begin
54
                                count = count - 1;
100 lvd 55
                                if( count <= 0 )
56
                                        state <= _FE;
99 lvd 57
                                byteout <= 8'hFF;
58
                        end
59
 
60
                        _FE:begin
100 lvd 61
                                state <= _DATA;
99 lvd 62
                                byteout <= 8'hFE;
63
                                count = 512;
64
                        end
65
 
66
                        _DATA:begin
100 lvd 67
                                count = count - 1;
68
                                if( count <= 0 )
69
                                begin
70
                                        state <= _CRC;
71
                                        count <= 2;
72
                                end
73
 
74
                                tmp = $random>>24;
75
                                byteout <= tmp;
76
                                tb.sdmp3_chk.push_back(tmp);
99 lvd 77
                        end
78
 
79
                        _CRC:begin
100 lvd 80
                                count = count - 1;
81
                                if( count <= 0 )
82
                                begin
83
                                        state <= _FF;
84
                                        count <= 1+($random&63);
85
                                end
86
 
87
                                byteout <= $random>>24;
99 lvd 88
                        end
89
 
90
 
91
                        endcase
92
                end
93
        end
94
 
95
 
96
 
97
        always @(posedge clk)
98
        begin
100 lvd 99
                bytein = {bytein[6:0], sdi};
99 lvd 100
 
101
                bitcntin = bitcntin - 1;
102
 
103
                if( bitcntin<0 )
104
                begin
100 lvd 105
                        bitcntin = 7;
99 lvd 106
 
107
                        if( bytein!==8'hFF )
108
                        begin
109
                                $display("sd: received not FF!");
110
                                $stop;
111
                        end
112
                end
113
        end
114
 
115
 
116
endmodule
117