The metal-oxide-semiconductor field-effect transistor, or MOSFET for short, is the most frequently manufactured device in history, with close to 10^23 MOSFETs produced since 1960. As the basic building block of almost all modern electronics, it revolutionized the world economy and triggered our ascent into the information age.
#import "@preview/cetz:0.5.2": canvas, draw
#import draw: content, line, rect
#set page(width: auto, height: auto, margin: 8pt, fill: none)
#set text(size: 12pt)
#canvas({
// Circuit board (base)
rect((0, 0), (11, -0.25), fill: rgb("#008080"), name: "board")
content("board.south", [circuit board], anchor: "north", padding: (top: 3pt))
// Dielectric layer with brick pattern
let brick-width = 0.4
let brick-height = 0.2
let start-x = 3.8
let end-x = 7.2
let start-y = 2
let end-y = 3
rect(
(start-x, start-y),
(end-x, end-y),
fill: rgb("#cdd3da"),
stroke: rgb("#f00"),
name: "dielectric-box",
)
for y in range(int((end-y - start-y) / brick-height + 1)) {
let y-pos = start-y + y * brick-height
if y-pos < end-y {
line((start-x, y-pos), (end-x, y-pos), stroke: rgb("#f00"))
}
}
for x in range(int((end-x - start-x) / brick-width + 1)) {
for y in range(int((end-y - start-y) / brick-height)) {
let x-offset = if calc.rem(y, 2) == 0 { 0 } else { brick-width / 2 }
let x-pos = start-x + x * brick-width + x-offset
if x-pos < end-x {
let y-start = start-y + y * brick-height
let y-end = calc.min(y-start + brick-height, end-y)
line((x-pos, y-start), (x-pos, y-end), stroke: rgb("#f00"))
}
}
}
// P-type semiconductor substrate
rect((0, 0), (11, 2), fill: rgb("#ffa500").lighten(50%), name: "substrate")
content("substrate", align(center)[$p$-type\ semiconductor])
for (start, end, name) in (
((1, 1), (4, 2), "source-n"),
((7, 1), (10, 2), "drain-n"),
) {
rect(start, end, fill: rgb("#90ee90"), name: name)
content(name, align(center)[$n$-type\ semiconductor])
}
content(
"dielectric-box",
[dielectric],
frame: "rect",
padding: 2pt,
fill: rgb("#cdd3da"),
stroke: (thickness: .5pt),
)
for (start, end, name, label) in (
((4, 3), (7, 3.5), "gate-metal", [gate]),
((1.25, 2), (3, 2.5), "source-metal", [source]),
((8, 2), (9.75, 2.5), "drain-metal", [drain]),
) {
rect(start, end, fill: rgb("#c8c8e1"), name: name)
content(name, label)
}
// Title
content("gate-metal.north", [$n$-type channel], anchor: "south", padding: (
bottom: 2mm,
))
})