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

Subversion Repositories ds1621

[/] [ds1621/] [trunk/] [files/] [eeprom_macros.sv] - Blame information for rev 7

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 7 akhachat
// Timing with undefined `DS1621_STANDARD ( more than 100kHz)
2
 
3
// for Opencores users:
4
// Delays are system bus specific. Adapt them to your system bus timing.
5
// Tasks are acceptable by both 24LC16B and DS1621S devices.
6
// "write/read" are the tasks from the bus interface
7
// (create your own interface or change the write read just to be the tasks).
8
// "data" is the value returned by the interface task.
9
// Format: Bit      2,      1,      0
10
//                  WP     SCL     SDA
11
//              if EEPROM
12
//              is present
13
//
14
 
15
task  iic__stop();
16
 #500  write( 3'b000 );
17
 #1100 write( 3'b010 );
18
 #900  write( 3'b011 );
19
endtask
20
 
21
task  iic_ctlop( bit [3:0] EE_or_DS, bit [2:0] blk_adr, bit op, output bit ACK );
22
 #1150 write( 3'b011 );
23
 #650  write( 3'b010 );
24
 #650  write( 3'b000 );
25
 #650  write( {2'b00, EE_or_DS[3]} );
26
 #650  write( {2'b01, EE_or_DS[3]} );
27
 #650  write( {2'b00, EE_or_DS[3]} );
28
 #650  write( {2'b00, EE_or_DS[2]} );
29
 #650  write( {2'b01, EE_or_DS[2]} );
30
 #650  write( {2'b00, EE_or_DS[2]} );
31
 #650  write( {2'b00, EE_or_DS[1]} );
32
 #650  write( {2'b01, EE_or_DS[1]} );
33
 #650  write( {2'b00, EE_or_DS[1]} );
34
 #650  write( {2'b00, EE_or_DS[0]} );
35
 #650  write( {2'b01, EE_or_DS[0]} );
36
 #650  write( {2'b00, EE_or_DS[0]} );
37
 #650  write( {2'b00, blk_adr[2]} );
38
 #650  write( {2'b01, blk_adr[2]} );
39
 #650  write( {2'b00, blk_adr[2]} );
40
 #650  write( {2'b00, blk_adr[1]} );
41
 #650  write( {2'b01, blk_adr[1]} );
42
 #650  write( {2'b00, blk_adr[1]} );
43
 #650  write( {2'b00, blk_adr[0]} );
44
 #650  write( {2'b01, blk_adr[0]} );
45
 #650  write( {2'b00, blk_adr[0]} );
46
 #650  write( {2'b00, op} );
47
 #650  write( {2'b01, op} );
48
 #650  write( 3'b001 );  // ACK check
49
 #1250 write( 3'b011 );  //
50
 #650  read( ACK );
51
 #650  write( 3'b000 );  // ACK end with SCL=0 & SDA=0 (hold time is 0 for devices on IIC)
52
 #650  write( 3'b001 );
53
endtask
54
 
55
task  iic_write( bit stop, bit [7:0] data, output bit ACK );
56
 #750  write( {2'b00, data[7]} );
57
 #650  write( {2'b01, data[7]} );
58
 #650  write( {2'b00, data[7]} );
59
 #650  write( {2'b00, data[6]} );
60
 #650  write( {2'b01, data[6]} );
61
 #650  write( {2'b00, data[6]} );
62
 #650  write( {2'b00, data[5]} );
63
 #650  write( {2'b01, data[5]} );
64
 #650  write( {2'b00, data[5]} );
65
 #650  write( {2'b00, data[4]} );
66
 #650  write( {2'b01, data[4]} );
67
 #650  write( {2'b00, data[4]} );
68
 #650  write( {2'b00, data[3]} );
69
 #650  write( {2'b01, data[3]} );
70
 #650  write( {2'b00, data[3]} );
71
 #650  write( {2'b00, data[2]} );
72
 #650  write( {2'b01, data[2]} );
73
 #650  write( {2'b00, data[2]} );
74
 #650  write( {2'b00, data[1]} );
75
 #650  write( {2'b01, data[1]} );
76
 #650  write( {2'b00, data[1]} );
77
 #650  write( {2'b00, data[0]} );
78
 #650  write( {2'b01, data[0]} );
79
 #650  write( {2'b00, data[0]} );
80
 #650  write( 3'b001 );  // ACK check
81
 #650  write( 3'b011 );  //
82
 #650  read( ACK );
83
 #650  write( 3'b000 );  // ACK end with SCL=0 & SDA=0 (hold time is 0 for devices on IIC)
84
    if ( stop )  iic__stop;
85
    else
86
 #650  write( 3'b001 );
87
endtask
88
 
89
task  iic__read( bit stop, output bit [7:0] data );
90
bit  data_bit;
91
 #1250 write( 3'b011 );
92
 #650  read( data_bit );  data = {data[6:0], data_bit};
93
       write( 3'b001 );
94
 #1250 write( 3'b011 );
95
 #650  read( data_bit );  data = {data[6:0], data_bit};
96
       write( 3'b001 );
97
 #1250 write( 3'b011 );
98
 #650  read( data_bit );  data = {data[6:0], data_bit};
99
       write( 3'b001 );
100
 #1250 write( 3'b011 );
101
 #650  read( data_bit );  data = {data[6:0], data_bit};
102
       write( 3'b001 );
103
 #1250 write( 3'b011 );
104
 #650  read( data_bit );  data = {data[6:0], data_bit};
105
       write( 3'b001 );
106
 #1250 write( 3'b011 );
107
 #650  read( data_bit );  data = {data[6:0], data_bit};
108
       write( 3'b001 );
109
 #1250 write( 3'b011 );
110
 #650  read( data_bit );  data = {data[6:0], data_bit};
111
       write( 3'b001 );
112
 #1250 write( 3'b011 );
113
 #650  read( data_bit );  data = {data[6:0], data_bit};
114
    if ( stop ) begin
115
 #650  write( 3'b001 ); // NO ACK
116
 #1250 write( 3'b011 );
117
       iic__stop;
118
    end
119
    else begin
120
 #650  write( 3'b000 ); // ACK
121
 #1250 write( 3'b010 );
122
 #650  write( 3'b000 );
123
 #650  write( 3'b001 );
124
    end
125
endtask

powered by: WebSVN 2.1.0

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