Implemented the photodiode device in the parameterized device
generator for magic.
diff --git a/sky130/magic/sky130.tech b/sky130/magic/sky130.tech
index b5546bf..7c5e949 100644
--- a/sky130/magic/sky130.tech
+++ b/sky130/magic/sky130.tech
@@ -82,6 +82,7 @@
 # sky130_fd_pr__res_iso_pw	rpw		pwell resistor (in deep nwell)
 # sky130_fd_pr__esd_nfet_g5v0d10v5 mvnfetesd	ESD thickox nFET
 # sky130_fd_pr__esd_pfet_g5v0d10v5 mvpfetesd	ESD thickox pFET
+# sky130_fd_pr__photodiode	photo		Photodiode
 #
 # (*) Note that ppres may extract into some generic type called
 # "sky130_fd_pr__res_xhigh_po", but only specific sizes of xhrpoly are
@@ -142,6 +143,7 @@
 # Deep nwell
   dwell dnwell,dnw
   dwell isosubstrate,isosub
+  dwell photodiode,photo
 
 # Wells
   well nwell,nw
@@ -474,6 +476,7 @@
   nwell     nwell
   pwell	    pwell
   rpwell    pwell 	ptransistor_stripes
+  photo	    nwell	nwell_field_implant
   ndiff     ndiffusion
   fomfill   ndiffusion
   pdiff     pdiffusion
@@ -693,7 +696,7 @@
 #-----------------------------------------------------
 
 connect
-  *nwell,*nsd,*mvnsd,dnwell,pnp *nwell,*nsd,*mvnsd,dnwell,pnp
+  *nwell,*nsd,*mvnsd,dnwell,pnp,photo *nwell,*nsd,*mvnsd,dnwell,pnp,photo
   pwell,*psd,*mvpsd,npn  pwell,*psd,*mvpsd,npn
   *li,coreli,lifill	*li,coreli,lifill
   *m1,m1fill,obsmcon	*m1,m1fill,obsmcon
@@ -751,7 +754,7 @@
 # DNWELL
 #----------------------------------------------------------------
 
- layer DNWELL	dnwell,npn
+ layer DNWELL	dnwell,npn,photo
 	calma	64 18
 
  layer PWRES    rpw
@@ -974,6 +977,9 @@
 	mask-hints PNPID
 	calma	82 44
 
+ layer PHOTO photo
+	calma	81 81
+
 #----------------------------------------------------------------
 # RPM
 #----------------------------------------------------------------
@@ -2387,6 +2393,9 @@
  and-not NWELL,nwelcheck
  and NPNID
 
+ layer photo DNWELL
+ and PHOTO
+
  layer rpw PWRES
  and DNWELL
  labels PWRES
@@ -3927,6 +3936,8 @@
  calma CAPID 82 64
  # Core area ID mark
  calma COREID 81 2
+ # Photodiode ID mark
+ calma PHOTO 81 81
  # Standard cell ID mark
  calma STDCELL 81 4
  # Padframe cell ID mark
@@ -4104,6 +4115,11 @@
 	"P+ diff cannot straddle Deep N-well (dnwell.5)"
  variants (fast),(full)
 
+ width photo 3000 "Photodiode width < %d (photo.2)"
+ spacing photo photo 5000 touching_ok "Photodiode spacing < %d (photo.3)"
+ spacing photo dnwell 5300 touching_illegal \
+	"Photodiode spacing to deep nwell < %d (photo.4)"
+
 #-----------------------------
 # NWELL
 #-----------------------------
@@ -5394,6 +5410,8 @@
  device resistor sky130_fd_pr__res_generic_m4 rm4 *m4
  device resistor sky130_fd_pr__res_generic_m5 rm5 *m5
 #endif (METAL5)
+ device ndiode   sky130_fd_pr__model__parasitic__diode_ps2dn \
+	photo pwell,space/w error a=area
 
  device rsubcircuit sky130_fd_pr__res_high_po_0p35 xhrpoly \
 	xpc pwell,space/w error +res0p35 l=l