SET/RESET Pulse Programming
Intermediate LevelIntroduction
Mastering pulse programming is crucial for reliable PCM operation. This tutorial covers the design and optimization of SET and RESET pulses, including voltage levels, timing, energy efficiency, and multi-level programming techniques. You'll learn how to balance speed, power, and reliability in your pulse designs.
Learning Objectives
- Design optimal RESET pulses for complete amorphization
- Create SET pulses for controlled crystallization
- Minimize programming energy and time
- Implement verify and iterative programming
- Understand thermal constraints and crosstalk
Pulse Fundamentals
1
RESET Pulse Design
RESET pulses create the high-resistance amorphous state through melt-quench process:
- High Voltage: 2.5-4.0V (device-dependent)
- Short Duration: 10-100ns
- Fast Fall Time: <5ns for rapid quenching
- Peak Temperature: >900K (above melting)
Excessive RESET voltage can cause device degradation. Always stay within safe operating limits!
2
SET Pulse Design
SET pulses crystallize the material to create the low-resistance state:
- Medium Voltage: 1.0-2.0V
- Longer Duration: 100-1000ns
- Temperature Window: 450-700K
- Gradual Cooling: Allows crystal growth
Multi-step SET pulses can improve crystallization uniformity and reduce variability!
Interactive Pulse Designer
Design and Test Your Pulses
Pulse Parameters
Device Parameters
--
Peak Temp (K)
--
Energy (pJ)
--
Final R (Ω)
--
Success
Advanced Techniques
# Iterative Programming Algorithm
def iterative_program(target_state, max_iterations=10):
"""
Iterative programming with verify steps
"""
for i in range(max_iterations):
# Apply programming pulse
if target_state == 'RESET':
apply_pulse(voltage=3.0, duration=50e-9)
else: # SET
apply_pulse(voltage=1.5, duration=500e-9)
# Verify operation
resistance = read_resistance()
# Check if target achieved
if target_state == 'RESET' and resistance > 500e3:
return True, i+1
elif target_state == 'SET' and resistance < 2e3:
return True, i+1
# Adjust pulse for next iteration
if i < max_iterations - 1:
adjust_pulse_parameters()
return False, max_iterations
# Multi-level programming
def program_multilevel(level, num_levels=4):
"""
Program to intermediate resistance levels
"""
# Calculate target resistance
R_min, R_max = 1e3, 1e6
R_target = R_min * (R_max/R_min)**(level/(num_levels-1))
# Start from RESET state
apply_reset_pulse()
# Apply partial SET pulses
for pulse_num in range(20):
apply_pulse(voltage=1.2, duration=50e-9)
R_current = read_resistance()
if abs(R_current - R_target) / R_target < 0.1:
return True
return False
Optimization Challenge
Pulse Optimization Challenge
Using the pulse designer, try to achieve:
- Successful RESET with <30 pJ energy
- Successful SET with <100 pJ energy
- RESET-to-SET transition in <200ns total
- Design a pulse that works at both 25°C and 85°C
Hint: Consider using stepped pulses or
pre-conditioning pulses to improve reliability!