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 |