Source: https://inst.eecs.berkeley.edu/~cs250/sp17/handouts/advanced-chisel.pdf