The design of circuits and systems whose inputs and outputs are represented as discrete variables. These variables are commonly binary, i.e. two-state, in nature. Design at the circuit level is usually done with truth tables and state tables; design at the system level is done with block diagrams or digital design languages.