File size: 1,215 Bytes
e9bc512
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class MultiLevelCell:
    def __init__(self, channel_length, drift_velocity, levels):
        self.channel_length = channel_length
        self.drift_velocity = drift_velocity
        self.levels = levels
        self.trapped_electrons = 0
        self.value = 0
        self.wear_count = 0
        self.retention_loss = 0.0

    def program(self, value):
        self.value = max(0, min(self.levels-1, value))
        self.trapped_electrons = self.value
        self.wear_count += 1
        self.retention_loss = 0.0
        prog_time = self.channel_length / self.drift_velocity
        return prog_time

    def erase(self):
        self.trapped_electrons = 0
        self.value = 0
        self.wear_count += 1
        self.retention_loss = 0.0
        erase_time = self.channel_length / self.drift_velocity
        return erase_time

    def read(self):
        import random
        if self.value > 0:
            self.retention_loss += random.uniform(0, 0.01)
            if self.retention_loss > 0.5:
                self.value = max(0, self.value - 1)
                self.trapped_electrons = self.value
                self.retention_loss = 0.0
        return self.value