home

MOSFET

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.


MOSFET

Download

PNG PDF SVG

Code

mosfet.typ (82 lines)

#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,
  ))
})