연산회로
1. 가산(adder)
Half Adder
두개의 입력(A, B)와 두개의 출력(S, Cout)로 구성되 있다. S는 A, B의 SUM이며 만약 A, B가 모두 1이라면 1비트로 표현할 수 없으므로 Carry out인 Cout으로 나타낸다. Half adder는 XOR과 AND 게이트로 구성할 수 있다. Multi-bit adder에서 Cout은 다음 비트의 MSB에 더해지거나 carried in(Cin)된다. 하지만 Half adder의 경우 Cout을 받을 수 있는 Cin이 존재하지 않는다.
Full adder
full adder는 Cin으로 carry in을 받는다 .
CPA(Carry Propagate Adder)
N-bit adder는 두개의 N-bit 입력 A, B와 Cin을 받고 N-bit result인 S와 Cout을 생산한다. 이를 CPA라 부른다, 왜냐면 한 비트의 carry out이 다음 비트를 propagate(유전)시키기 때문이다.
CPA는 다음 세가지 종류로 사용될 수 있다.
1. ripple-carry adders(slow)
2. Carry-lookahead adders(fast)
3. Prefix adders(faster)
Carry-lookahead와 prefix adders는 큰 연산에 대해 빠르게 동작하지만 더 많은 하드웨어를 필요로한다.
Ripple-carry adders
가장 단순한 방식으로 N-bit carry propagate를 만드는 방식으로서 N개의 full adder를 연결시킨형태이다. 이는 Cn이 cn-1에 의존하 므로 큰 수의 연산시 속도가 느리다. 이러한 지연은 비트의 개수에 직접적인 영향을 받는다. 이러한 지연을t(ripple)이라 하고 t(FA)는 모든 adder의 총 지연시간이다
2. 감산(subtracter)
감산은 두번째 숫자의 부호를 반대로 하고 더하는 것이다. 2의 보수를 사용한다.
3. 비교연산(Comparator)
Equality
Equality는 A, B가 동일한지를 나타내는 하나의 출력을 생산한다.
Less than
'<'연산은 A - B의 MSB를 보고 판단을 한다. 만약 결과가 음수면 A < B이고 아니면 A >= B이다
4. ALU(Arithmetic/Logical Unit)
ALU는 다양한 수학적, 논리적 연산을 하나의 유닛으로 만든것이다. ALU는 가감승제, AND, OR등을 수행할 수 있다.
5. Shifter, Rotator
6. Multipliers
Counter
N-bit binary counter는 클럭, 리셋입력돠 N-bit 출력인 Q를 가지는 순차 산술 회로(sequential arithmetic circuit)이다. 리셋은 출력을 0으로 초기화 한다. 카운터는 가능한 모든 2^N개의 출력을 이진순서로 진행해 클럭의 상승 엣지에서 증가시킨다.
Memory Arrays
위에서는 산술과 순차회로에 대해 다루었다. 디지털 시스템은 이러한 회로들에 의해 나타내어지고, 사용되는 데이터를 저장하기 위해 메모리를 필요로 한다. Flip-flops로 만들어진 레지스터들역시 일종의 메모리로 적은 양의 데이터를 담는다. Memory arrays는 효과적으로 큰 양의 데이터를 저장할 수 있다.
위 그림은 전형적인 memory array의 symbol을 보여준다. 이 메모리는 memory cell의 2차원 배열로 조직되어 있다. 이 메모리는 배열의 행 중 한 행의 내용에 대해 일기, 쓰기를 한다. 이 행들은 주솟값(address)에 의해 특정된다. 읽고 쓰여지는 값들은 데이터라 부른다. N-bit주소값과 M-bit데이터를 가지고 있는 배열은 2^N개의 행과 M개의 열을 가지고 있다. 각 행에 있는 데이터를 word라 부르기에 배열은 2^N개의 M-bit word들을 가지고 있다.
여기서 width또는 word size는 배열의 열 갯수, depth는 배열의 행 갯수, 배열의 size는 width * depth이다
Bit cells
Memory arrays는 bit cell들의 배열로 만들어져 있다. 각 bit cell은 1비트의 데이터를 담고 있다.
위 그림에서 볼수있듯이 각 bit cell은 하나의 wordline과 하나의 bitline에 연결되 있다. 따라서 wordline이 1이면 저장된 비트가 bitline으로 욺겨진다.
wordline은 메모리에 있는 하나의 행이 한번에 읽혀지고 쓰여지게 한다. 각 wordline은 유니크한 주소값에 대응된다. 한번에 하나의 wordline만 high일 수 있다.