FServe / vram /nand_cell.py
Factor Studios
Upload 37 files
e9bc512 verified
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