Yuo can describe a gate using transistors. Then you can describe a circiuit using gates and so on.
This is wildly popular in functional programming, and in Haskell in particular.
Take a look at those two libraries: Lava: http://hackage.haskell.org/package/chalmers-lava2000 and http://hackage.haskell.org/package/york-lava
and Wired: http://hackage.haskell.org/package/Wired
Wired is especially interesting because it let you simultaneously describe a circuit and its layout.