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

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 이지원
,

지난 포스트에 1-bit adder를 만들었으므로

오늘은 4-bit Adder를 만들어보도록 하겠다.

지난 시간에 만든 1-bit adder를 연결하면

4-bit 인 adder를 만들 수 있다.

구조를 살펴보면 다음과 같다.

1bit adder에서 나온 carry out이

다음 adder의 carry in 으로 들어가게 되고

이렇게 4번을 하면서 4-bit 짜리를 만들 수 있는것이다.

따라서 1-bit adder를 이용한다면 간단하게 만들 수 있다.

먼저 1-bit adder를 다음과 같이 적어주고

여기서 이 모듈의 이름이 fa 라는걸 주의깊게 보자

4-bit adder를 만들것이므로

각각의 입출력에 [3:0]을 작성해서 4bit로 만들어준것도 주의해야한다.

(* 작동하려고 쓰는것보다 비트수를 적게 할당하면 오류가 날 수 있다. 추후에 다시 설명하겠다)

그리고 맨 위 그림에서 보듯이 각각의 1-bit adder에서 나온 carry out과

그 다음 adder로 들어가는 carry in은 입출력이 아니므로 wire로 선언해서 적어줘야 한다.

그리고 1-bit adder의 모듈이름이 fa 였으므로

fa 라고 선언해준 후 이름을 적고 각각의 입출력 옆 ( ) 속

넣어줄 입출력들을 적어준다.

첫번째 adder에서 나오는 carry out이

다음 adder의 carry in 으로 들어가고

마지막 carry out은 출력의 carry out 인것에 주의해야 한다.

쿼터스에서 compile을 돌리고 RTL을 확인해보자

생긴건 복잡하게 생겼지만

저 빨간선처럼 각각의 1-bit adder로 들어가면서 합계가 나오는 걸 알 수 있다.

 

Posted by 이지원
,