[베릴로그] 4:1 mux 만들기 (먹스 만들기)
지난 포스팅에 2:1 mux를 만들었으니
오늘은 4:1 먹스를 만들것이다.
저번에 만든 2:1 먹스를 활용하여
비트수를 늘려 만들 수 있다.
먼저 4:1 mux는 이렇게 생겼다.
4개의 입력이 들어오고 중에서 셀렉션 신호 ( S) 에 따라 output이 결정되는 것이다.
먼저 지난번에 2:1 mux를 만들 때는
s ? d1 : d0 를 사용했었다. 이와 마찬가지로 생각해서 코드를 보면
s0가 0이면 뒤의 괄호 1이면 앞의 괄호를 선택하고
괄호 안에 있는
s1 ? d3 :d2 와 s1 ? d1 : d0
를 보면 s0에 의해 선택된 괄호 중
s1의 신호에 따라
0이면 뒤 1이면 앞을 선택하는 것이다.
그렇다면 최종적으로 1개의 출력이 나올 것이다.
이렇게 2:1 먹스 3개로 구성한 4:1 먹스가 있고
다른 방식으로는 if 문을 사용하여 만들 수 있다.
4:1 mux 이므로 각각 입출력에 1:0으로 비트를 할당해주고
s의 신호에 따라 나오는 출력을 if문을 사용하여 적어주면 된다.
그렇다면 제대로 작동하는지를 확인하기 위해 오늘도
testbench를 만들어보면
두개를 한번에 적어 같은 4:1 mux 이므로 같은 값이 나올것이다.
먼저 항상 그렇듯이 입력을 reg 출력을 wire로 적어주고
우리가 만들었던 dut의 이름을 적어 불러온 뒤 각각 입출력을 적어준다.
옆에 display 내용이 잘렸는데 위에 표처럼 나오기 위해
d0 d1 d2 d3 s0 s1 y1 y2 를 순서대로 display 창에 적어주었다.
s0와 s1의 각각 신호일 때를 확인하기 위해
00, 01 , 10, 11 를 적어주었고
그때 어떤 값이 y에 나오는지 확인하기 위해
각각 d0는 00 d1은 01 d2는 10 d3는 11 로 적어주었다.
(만약 y에 d0가 출력으로 나온다면 00 이 찍힐 것)
시뮬레이션을 돌려보면
보면 s 신호가 00 일때 d0가 output으로 나오고
01 일때 d1이 output으로 나오고
11일때 d3가 output으로 나오는 걸 확인할 수 있다.
더 늘리면 8:1 mux도 만들 수 있을것이다. 얏호!