1. 문제
- 위의 VHDL 설계에서 입력신호 A에서 B를 뺀 값 결과를 y_out에 출력하는 VHDL을 작성하라.
2. 문제 분석
- 덧셈을 하는 과정과 달리 뺄셈은 음수의 영역에 대한 이해가 필요하다.
1의 보수를 취해 덧셈을 하는 방법과 2의 보수를 취해 덧셈을 하는 방법이 있다. 1의 보수를 사용하는 경우 캐리의 발생 여부에 따라 결과값에 1을 더하거나 않거나 하는 경우가 생기지만 2의 보수를 사용하는 경우는 캐리를 무시할 수 있어 더욱 편하고 효율적이다. 만약 캐리가 발생하지 않으면 결과값이 음수인 것이 되어 2의 보수인 경우는 다시 2의 보수로 1의 보수인 경우는 다시 1의 보수로 바꾸어줍니다 대신 부호는 음수가 된다.
Ex) 15-28
28의 1의 보수를 이용한 방법
15 = 0000 1111
28'= 1110 0011
----------------
1111 0010 캐리가 발생하지 않았으므로 다시 1의 보수로 바꾼다. 0000 1101 이 되어 - 13 이다.
28의 2의 보수를 이용한 방법
15 = 0000 1111
28' = 1110 0100
--------------
1111 0011 캐리가 발생하지 않았으므로 다시 2의 보수로 바꾼다. 0000 1101 이 되어 역시 -13 이다.
3. VHDL code
4. Simulation
5. 결론 및 고찰
- 결론 : 0 - 6 = 1A (-6)
1A => 1 1010 최상위비트 1은 음수를 뜻하고 뒤의 A을 2의 보수를 취하면 -6이 됨을 알 수 있다.
만약 출력값의 범위를 (5 downto 0)로 설정해주면 출력값이 3A가 나온다.
이 역시 3A => 11 1010 이 되어 최상위비트를 제외한뒤 2의 보수를 취하면 역시 -6이 됨을 알 수 있다.
And 연산기 VHDL (Clock 이용) (0) | 2008.10.08 |
---|---|
4bit 감가산기 VHDL (SIgnal : Integer) (0) | 2008.10.08 |
Masking (Constant) (0) | 2008.10.08 |
Variable을 이용한 전가산기의 구현 VHDL (0) | 2008.10.08 |
Signal을 이용한 전가산기의 구현 VHDL (0) | 2008.10.08 |