강의

[디지털 로직 설계] - #5. 흐름제어

gybak 2024. 5. 7. 19:20

이번 글에서는 Combinational logic의 세 번째 유형, '흐름제어' 로직에 대해 이야기합니다.

 

이 유형의 로직은 앞의 두 유형과 쓰임새가 조금 다릅니다. 이름에서 알 수 있듯이, '연산'이 아니라 '제어'죠. 입력 신호를 어디로 전달할 것인지 결정해 줍니다. 즉, 전달 경로를 선택하는(제어하는) 로직입니다.

 

우리가 설계한 디자인을 철도 시스템에 비유해 볼까요. 열차는 '신호'이고 선로는 '노드'라 할 수 있습니다. 처음부터 끝까지 선로가 일자로 쭉 이어져 있다면, 운용하기가 정말 쉬울 겁니다. 선로를 제어할 필요도 없고, 열차는 선로 위로만 달릴 것이니 앞 뒤 간격만 잘 띄워주면 사고 날 일도 없죠. 한바퀴 돌아서 제자리로 연결되는 경우도 마찬가지입니다.

 

선로가 갈라지거나 합쳐지는 형태라면 지금부터는 제어가 필요합니다. 열차가 무사히 목적지로 향하도록 선로를 올바르게 잡아줘야 하기 때문이죠. 선로 분기점에는 그래서 아래 사진과 같은 선로전환기가 있습니다.

 

디지털 로직 중에도 선로전환기와 같은 역할을 하는 것이 있습니다. 바로, multiplexer와 demultiplexer입니다. 보통은 부르기 쉽게 mux, demux라고 합니다. 이 두 로직이 바로 '흐름제어' 유형에 해당됩니다. 기본적인 형태는 아래 그림과 같습니다.

 

mux는 여러 '채널(channel)' 중에서 하나를 '선택'해 출력 포트로 신호를 전달해 줍니다. '채널'은 선택 가능한 포트를 가리킵니다. 아래 그림 예시에서는 입력 포트 IN0와 IN1이 되겠네요. 그러면, 채널은 어떻게 선택하나요? 채널 선택을 위한 제어 신호가 있어야겠죠. 사다리꼴 심볼 한가운데에 있는 포트 SEL을 통해 그 제어 신호를 받습니다. 정리하자면, mux의 동작은 다음과 같습니다.

    - SEL 포트에 0이 입력되면, IN0에 들어오는 신호를 OUT으로 전달

    - SEL 포트에 1이 입력되면, IN1에 들어오는 신호를 OUT으로 전달

 

demux는 입력 포트의 신호를 여러 출력 포트(채널) 중에서 한 곳에 전달해 줍니다. 앞서 설명한 mux처럼 여러 채널 중 하나를 선택해 신호를 전달한다는 점은 동일합니다. 그 선택하는 채널이 출력 포트라는 게 다를 뿐이죠.

 

흐름제어 유형, 즉 mux/demux 로직을 써서 신호의 흐름을 원하는 대로 바꿔줄 수 있습니다. 이 유형의 로직을 활용해 CPU와 주변 장치들을 묶어주는 통로를 설계할 수 있습니다. 이것이 '시스템 버스'입니다. 시스템 버스에 대해서는 나중에 아주 자세히 다뤄볼 생각입니다.


목차 (연재 순서)

0. 강의 개요
1. 기초 논리 소자 (Basic Logic Elements)
2. Combinational Logic
    1) 논리연산 -- 3-input AND, 2-input XOR
    2) 산술연산 -- Half Adder, Full Adder
    3) 흐름제어 -- Mux, Demux
3. Truth Table 및 Look-Up Table
    1) 우리는 어떤 목적으로, 왜 truth table을 작성하는가?
    2) 설계한 로직은 어떻게 FPGA에서 작동하는가?
4. 메모리 소자 (Memory Elements)
    1) Flip-Flop
    2) Memory Block
5. Sequential Logic
    1) D-FF with synchronous reset
    2) 2진법 반올림(round-up) 로직
6. Timing Diagram