The program counter stores an eight bit number used to track the current position/instruction in program memory.
It’s similar to a regular register but has some extra functionality:
- It can add one to it’s current value.
- It’s value can be asynchronously reset to 0.
Interface and Operation¶
This is the interface to the program counter:
This is how it operates:
|data||8||Reads bits from, or asserts bits onto this connection.|
|contents||8||Always outputs the current value held in the program counter.|
|clock||1||Clock signal from the clock module.|
|input_enable||1||While high, the program counter stores the value on data on a rising clock edge.|
|count||1||While high, the program counter increments the stored value by one on a rising clock edge.|
|output_enable||1||While high, the program counter asserts it’s content onto data.|
- Two 74HCT161s are used to store, increment and clear the 8 bit value.
- A 74HCT245 is used to provide a tri-state output to allow asserting values onto the bus, or not.
- A 74HCT04 is used to invert the incoming input_enable, output_enable and count signals to drive the active low inputs on the 74HCT161s and 74HCT245.
- LEDs with current limiting resistors are used to display the current contents.
The electronics are laid out on the breadboard like so: