지난 포스팅에 애더까지 만들고

testbench를 이용하여 시뮬레이션도 돌려보았다.

오늘은 MUX (먹스) 를 만들어보겠다.


먹스 (MUX) 란 Multiplexer로

출력에 연결하는 N개의 입력 중 하나를 선택하는것이다.

예를 들면 위와 같은 구조에서

S가 0이라면 D0의 값이 Y가 되고

S가 1이라면 D1의 값이 Y가 되는것이다.


그렇다면 이제 verilog를 이용하여 이러한 mux를 어떻게 디자인하냐,,,!

먼저 2:1 mux를 생각해보자

2:1 mux라면 선택지가 d0와 d1 이렇게 두가지만 있는

위의 예시에서 보여준 형태이다.

module 이름을 써주고 입출력을 써준 후

assign으로 할당하여준다.

assign 문에서 ?의 역할이

s에 따라 d1과 d0중 선택하겠다는 뜻이다.

따라서 mux에서는 이렇게 써준다.

여기서 주의할건 뒤에가 0일때라는거임!

그래서 0일 때 d0를 택할거니까 d1:d0로 써줌

그렇다면 이번에도 마찬가지로 내가 짠 이 mux가 제대로 작동하는지를 확인하기 위해

testbench를 간단히 짜서 확인해보자

간단히 module 이름은 tbformux로 하고

입력은 reg 출력은 wire 선언을 해준다.

그리고 우리가 확인해볼 mux를 써서 불러와주고

각각의 입출력 옆에 들어갈 값들을 써준다.

그리고 display를 이용하여 화면에 나타나는걸 적어준다.

s가 0과 1에 따라 달라지므로 0을 넣었을때와 1을 넣었을때를 보여주기 위해

0과 1을 넣어주고

그에 따라 d0와 d1이 나오는걸 보여주기 위해

d0와 d1에도 다른 입력값을 넣어준다.

그리고 시뮬을 돌려보면

s의 값이

0일때는 d0 의 값이 y로 나오고

1일때는 d1의 값이 y로 나오는 것을 확인할 수 있다.

Posted by 이지원
,