mirror of
https://github.com/soconnor0919/eceg431.git
synced 2025-12-11 06:34:43 -05:00
34 lines
1.0 KiB
Plaintext
34 lines
1.0 KiB
Plaintext
// This file is part of www.nand2tetris.org
|
|
// and the book "The Elements of Computing Systems"
|
|
// by Nisan and Schocken, MIT Press.
|
|
// File name: projects/3/a/PC.hdl
|
|
/**
|
|
* A 16-bit counter.
|
|
* if reset(t): out(t+1) = 0
|
|
* else if load(t): out(t+1) = in(t)
|
|
* else if inc(t): out(t+1) = out(t) + 1
|
|
* else out(t+1) = out(t)
|
|
*/
|
|
CHIP PC {
|
|
IN in[16],inc, load, reset;
|
|
OUT out[16];
|
|
|
|
PARTS:
|
|
// inc current value
|
|
Inc16(in=regOut, out=incOut);
|
|
|
|
// choose current or inc'd val (based on inc)
|
|
Mux16(a=regOut, b=incOut, sel=inc, out=postInc);
|
|
// choose ^ vs input (based on load)
|
|
Mux16(a=postInc, b=in, sel=load, out=postLoad);
|
|
// choose ^ vs zero (based on reset)
|
|
Mux16(a=postLoad, b=false, sel=reset, out=nextVal);
|
|
|
|
// load register if any control signal is active
|
|
Or(a=reset, b=load, out=resetOrLoad);
|
|
Or(a=resetOrLoad, b=inc, out=shouldLoad);
|
|
|
|
// stores state
|
|
Register(in=nextVal, load=shouldLoad, out=regOut, out=out);
|
|
}
|