Four bit adder/C++: Difference between revisions

m
Nicer formatting of intro.
(subpage)
 
m (Nicer formatting of intro.)
 
Line 1:
Remarks before we start:
*'...aim of this task is to simulate a four-bit adder chip.' According to this, the class design is laid out like this: starting with 'I/O pins' of our 'chip', we represent its 'inner circuit' by a 'logic block'. Logic blocks have a transfer function which creates signals for the output pins from the signals at the input pins (and the inner state of the block, if necessary). Logic blocks may be connected to form a more complex logic block; thereby we work our way up from the simple gates (AND, OR etc.) via more complex circuits (XOR, half adder, etc.) to the four bit adder. In order to avoid the tedious work of encoding numbers to bits and vice versa, we added conveniency blocks: a source (logic block without input pins) which sets its output pins according to a given decimal number, and a sink (logic block without output pins) which calculates a decimal number from the state of its input pins.
*'...aim of this task is to simulate a four-bit adder chip.' According to this,
*'... gates ... can be imitated by using the bitwise operators...' I decided to use a boolean for a bit - firstly because the largest 'numbers' in this example are 5 bits wide and secondly because this is should become rather a prove of concept than highly efficient code.
the class design is laid out like this: starting with 'I/O pins' of our 'chip', we represent
its 'inner circuit' by a 'logic block'. Logic blocks have a transfer function which creates signals for the
output pins from the signals at the input pins (and the inner state of the block, if necessary). Logic blocks may be
connected to form a more complex logic block; thereby we work our way up from the simple gates (AND, OR etc.) via more
complex circuits (XOR, half adder, etc.) to the four bit adder. In order to avoid the tedious work of encoding numbers
to bits and vice versa, we added conveniency blocks: a source (logic block without input pins) which sets its output pins according
to a given decimal number, and a sink (logic block without output pins) which calculates a decimal number from the state of
its input pins.
*'... gates ... can be imitated by using the bitwise operators...' I decided to use a boolean for a bit - firstly because
the largest 'numbers' in this example are 5 bits wide and secondly because this is should become rather a prove of concept
than highly efficient code.
*As C++ provides nice operator overloading and sophisticated templates, we'll make heavy use of these features - just for fun and elegance of syntax!
 
So, then...
 
A Pin just stores just its signal value; declared as follows (Pin.h)...