The memristor, theorized by Leon Chua in 1971 and physically realized in 2008, is governed by the fundamental relationship between charge (q) and flux (φ):
Where M(q) is the memristance, which depends on the charge that has passed through the device. For practical devices, we often use the current-voltage relationship:
Our implementation uses a hafnium oxide (HfO₂) based memristor with the following characteristics:
| Parameter | Symbol | Value | Unit | Description |
|---|---|---|---|---|
| ON Resistance | RON | 10 | kΩ | Low resistance state |
| OFF Resistance | ROFF | 1 | MΩ | High resistance state |
| SET Voltage | VSET | 0.9 | V | Voltage to switch to LRS |
| RESET Voltage | VRESET | -0.9 | V | Voltage to switch to HRS |
| Switching Time | tswitch | 20 | ns | Typical switching duration |
| Endurance | Ncycles | 106 | cycles | Write/erase cycles |
| Retention | tret | 10 | years | Data retention time |
In HfO₂-based memristors, switching occurs through the formation and rupture of conductive filaments composed of oxygen vacancies:
Application of positive voltage causes oxygen ions to migrate, leaving behind oxygen vacancies that form a conductive path.
Negative voltage drives oxygen ions back, rupturing the filament and returning to high resistance state.
Switching occurs at the metal-oxide interface through modulation of the Schottky barrier:
Some memristors use phase transitions between crystalline and amorphous states:
The crossbar array is the fundamental building block for memristor-based computing:
// Crossbar Array Structure
class CrossbarArray {
constructor(rows, cols) {
this.rows = rows;
this.cols = cols;
this.devices = new Array(rows);
// Initialize memristor array
for (let i = 0; i < rows; i++) {
this.devices[i] = new Array(cols);
for (let j = 0; j < cols; j++) {
this.devices[i][j] = new Memristor();
}
}
}
// Vector-Matrix Multiplication
computeVMM(inputVector) {
let output = new Array(this.cols).fill(0);
for (let j = 0; j < this.cols; j++) {
for (let i = 0; i < this.rows; i++) {
// Ohm's law: I = V/R = V·G
let current = inputVector[i] * this.devices[i][j].conductance;
output[j] += current; // Kirchhoff's current law
}
}
return output;
}
}
Wire resistance causes voltage drops that degrade computation accuracy:
Neural network weights are mapped to memristor conductances using differential encoding:
for W > 0
for W < 0
The actual weight is computed as: W = G⁺ - G⁻
For higher precision, we use multiple memristors per weight:
| Operation | GPU (pJ) | ASIC (pJ) | Memristor (pJ) | Improvement |
|---|---|---|---|---|
| 8-bit MAC | 10 | 0.5 | 0.1 | 100× |
| Memory Access | 100 | 10 | 0 | ∞ |
| Data Movement | 50 | 5 | 0 | ∞ |
Manufacturing variations cause ~10% spread in resistance values
Stochastic switching leads to ~5% variation between cycles
Resistance drift with temperature following Arrhenius law
Logarithmic drift over time: R(t) = R₀ × (1 + α×log(t))