지난 포스팅에는 1-bit adder를 연결하여

4-bit adder를 만들었다.

이번 포스팅은 그렇게 만든 adder를 실험할 수 있는 testbench를 짜 볼 것이다.

우선 testbench 란 우리가 만든 dut (device under test) 를 말 그대로 test 할 수 있게 해주는 것이다.

앞에서 만든 adder는 dut이다. 이 dut만 가지고서는 제대로 작동하는지 알 수 없기 때문에

testbench를 이용하여 시험해주는 것이다.

예를 들어 함수 f(x)를 만들었다면 그 함수 f(x)의 x에 어떤 값을 넣었을 때

우리가 생각한 값이 나와야지 함수 f(x)가 제대로 작동하는지 알 것이다.

그런 x에 값을 넣는 동작을 testbench로 해주는 것이다.

testbench 또한 우리가 만든 dut를 test 하는 것이므로

시험하려는 dut와 입출력이 똑같아야 한다.

(다르면 오류 뜨므로 주.의. 오류 뜨면 짜증남)

* dut에서는 입력을 input , 출력을 output으로 적었지만

testbench를 작성할 때는 입력은 reg로 선언하여 적고 출력은 wire로 적어준다.

그리고 각 모듈의 이름을 써주고 입출력 옆에 ( ) 에 각각 넣을 입력을 적어준다.

예시로 저번 포스팅에서 만든 adder에 관해 testbench를 작성하면 다음과 같다.

항상 시작은 module로 시작한다.

그리고 dut와 다르게 입력은 reg 출력은 wire 선언 후 작성한 걸 볼 수 있다.

그리고 각각 입력을 random하게 넣어주면서 화면에 출력되는 output 값을 확인하면 adder가 제대로 작동하는지

확인할 수 있다.

이와 같이 작성한 testbench를 modelsim을 이용하여 돌려보면

이러한 웨이브 형태가 나온다.

우리는 이진수보다는 역시 10진수가 알아보기도 편하고 마음도 편하므로 ^^,,,

상큼하게 10진수로 바꿔준다

그리고 웨이브를 잘 살펴보면

a와 b 그리고 carry in이 랜덤하게 들어오는 것을 볼 수 있다.

그리고 그에 따라 sum인 출력값 s1을 보면 2+4+1=7

로 7이라는 값을 가지는것을 볼 수 있다.

 

또한 이는 다른 방법으로 작성한 두개의 4-bit adder에서

동일한 결과 값이 나오는걸 볼 수 있다.

(s1과 s2의 값이 같고, co1과 co2의 값이 같다.)

다음 웨이브를 보면 ci (carry in ) 값이 없고

a,b 값이 8과 1이므로

8+1+0 = 9

로 s1, s2의 값이 9인것을 볼 수 있다.

이를 display 창 (화면에 표시되게끔 작성했으므로)

을 통해 보면 다음과 같다.

각각 표에서 ci와 a,b 를 더한값이 s1, s2 인것을 확인할 수 있다.

이렇게 adder (덧셈기) 를 만들었다.

 

 

Posted by 이지원
,