Overflow란?

Posted 2008. 10. 14. 16:54 by MINOK
※양수+양수=음수 , 음수+음수=양수 >> Overflow
※4bit + 4bit = 4bit를 초과하는 값이 발생 >> Carry

1. 1의보수
2의4제곱 개 표현가능 (16개:0이 2개)
0 1 1 1     >>  +7
    …
0 0 0 0     >>  +0
--------------
1 1 1 1     >>  -0  
    …
1 0 0 0     >>  -7

-0과 +0이 다르게 된다.

2. 2의보수 
(1의보수 +1)
2의 4제곱 -1 개 표현가능(15개:0이 1개) 

1의보수의 음수부에 1의보수를 다시 취하여 1을 더한다.
   0 1 1 1     >>  +7
       …
   0 0 0 0     >>  +0
----------------
1 0 0 0 1     >>  -1
1 0 0 1 0     >>  -2
      …        
1 0 1 1 1     >>  -7

▶최상위 비트가 받아들이는 carry와 최상위비트에서 발생되는 carry의 값이 다를 경우 overflow라고 할수있고, 같을 경우에는 단순 carry만 발생한경우라 할 수 있다.  




2X4 Decoder 설계 VHDL - case & for-loop

Posted 2008. 10. 14. 02:08 by MINOK

Decoder란?
컴퓨터 내부에서 디지털로 코드화된 데이터를 해독하여 그에 대응되는 아날로그 신호로 바꿔주는 컴퓨터 회로이다. 아날로그 데이터를 계산이 가능한 부호, 곧 각 시스템 내에서 사용하는 디지털 코드로 변환시켜 주는 인코더(encoder)의 상대용어로, 흔히 디코더(decoder)라고 한다.

1.case

case문 : 수식값에 따라 문장을 선택한다. when 의 값과 수식값이 일치하면 문장을 수행하고 그렇지 dskg으면 다음의 when의 값을 비교하여 그 문장의 수행여부를 결정한다. 수식을 여러값으로 표현할때는 ‘|’을 사용하면 된다.

<example code>

case sel is

when "00" => y <= d(0);

when "01" => y <= d(1);

when "10" => y <= d(2);

when others => y <= d(3);

end case;

>> 해석 : sel 의 값에 따라 입력단자 (d(0)~d(3))의 값이 출력 y로 연결된다.

*****************************************************************************
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
-----------입출력 포트 설정------------
entity decoder_case is
port (X : in bit_vector (1 downto 0);
     CHK   : in bit;
      Y : out bit_vector (3 downto 0));
end decoder_case;
---------------------------------------
architecture sample of decoder_case is
begin
 process(X,CHK)
  begin
    if (CHK = '1') then
      case X is
       when "00" => Y <= "0001";
       when "01" => Y <= "0010";
       when "10" => Y <= "0100";
       when "11" => Y <= "1000";
      end case;
    else
      Y <= "1111";
    end if;
  end process;
end sample;

*****************************************************************************

2.For-loop

for-loop : 순차처리문이다. 루프변수가 1씩 증가 또는 감소하며 최종값에 도달할 때까지 loop문에 둘러싸인 순차처리문을 반복처리한다.

*****************************************************************************
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.all;

-----------입출력 포트 설정------------
entity decoder_loop is
port ( X : in std_logic_vector(1 downto 0);
       Y : out std_logic_vector(3 downto 0));
end decoder_loop;

architecture sample of decoder_loop is
begin
 process(X)
 begin  
  for i in 3 downto 0 loop
     if( X = i ) then
       Y(i) <='1';
      else
       Y(i) <='0';
      end if;
    end loop;
   end process; 
end sample;

*****************************************************************************



3. waveform file
case문과 for-loop 둘다 동일한 결과값을 갖는다.

Difference of Latch & Flip/flop

Posted 2008. 10. 8. 22:54 by MINOK

What is Latch?
1.하나 이상의 Bit들을 저장하기 위한 디지털 논리회로이다.
2.Latch는 하나의 데이터 입력, 하나의 클록 입력 그리고 하나의 출력을 갖는다.
3.클록 입력이 활성화되면, 입력되고 있는 데이터가 입수되어 저장되고,
즉시 또는 클록 입력이 비활성화될 때 출력 측으로 전달된다.
출력은 클록이 다시 활성화될 때까지 그 값을 유지한다.

특징
 1.비동기(클럭을 사용 안 함. static)
 2.회로가 비교적 간단하다.
 3.출력은 입력 신호가 바뀌는 순간에 결정되어 나타난다.
 4.데이터를 잠시 저장했다 그대로 전달할 때 사용한다.
 5.D Latch, S-R Latch 등이 있다.
What is Flip-Flop?
1.Flip-Flop은 두 가지 상태 사이를 번갈아 동작하는 전자회로를 말한다. Flip-Flop 에 전류가 부가되면, 현재의 반대 상태 (0 에서 1 로, 또는 1 에서 0 으로)로 변하며, 그 상태를 계속 유지하므로 한 Bit의 정보를 저장할 수 있는 능력을 가지고 있다.
2.여러 개의 Transistor로 만들어지며, SRAM이나 Hardware Register 등을 구성하는데 사용된다.
3.종류 :  RS, D, T, JK Flip-Flop등이 있다.
        특징
1.클럭을 사용한다.
2.두 개의 출력(Q, Q`)을 갖는다.
3.1또는 2개의 입력을 갖는다.
4.출력은 클럭이 천이(상승 또는 하강)될 때 결정되어 나타난다.
5.초기화를 위한 비동기 입력도 있을 수 있다(clear, preset)
6.데이터 기억, 데이터 토글, 데이터 기록, 삭제에 사용한다.
Difference of latch & flip-flop.
특징
◎Latch : 회로는 간단하나 동기시키는 동작시간이 클럭이 1혹은 0으로
             유지되는 비교적 긴 시간이므로 고속 동작에 유리하다.
◎Flip-Flop : 회로가 Latch보다 복잡하고 동기시키는 동작이 클럭 edge 부근의 
             짧은 시간에 이루어지므로 동기시키기가 쉽고 고속 동작에는 불리하다.
         입력>>출력
◎Latch는 클럭 신호가 1(Active High) 혹은 0(Active Low)상태의 모든 신호를
 다 데이터 D로 인정한다.
          ◎Flip-Flop은 클럭 신호가 0 >> 1의 순간 (Riging Edge) 혹은
  1 >> 0의 순간(Falling Edge)에만 입력 신호 D를 인정하고
  출력이 바뀐다. 그 외에 입력 신호 D자체의 변화는 무시한
  다.



위의 그림에서 쉽게 차이점을 확인할수있다.

Latch : 처음 CK신호가 1인 동안 입력신호 D의 변화를 모두 Q에서 출력함을 알 수 있다. 이후 CK신호가 0이 되고 그 동안에는 입력 D와는 무고나하게 Q는 현상태를 유지한다. 다시 CK신호가 1이되면 입력 신호D의 변화를 Q에 반영한다.
 이처럼 Latch는 클락신호가 Active High일 때만 입력신호가 출력신호로 전달된다.  

Flip-Flop : CK신호가 변화하는 순간에만 입력신호가 출력신호로 전달된다. 위의 회로도는 Rising Edge Trigger로써 0에서 1로 변화할 때만 입력이 전달된다. 최초 0에서 1로 변화할떄 입력신호 D의 값인 1이 Q로 전달되어 저장된다. 이후 CK신호가 0에서 1로변화하는 순간이 올때까지 그 상태를 유지하고있는다. CK이 0에서 1로 변화하는 부분오면 그 순간 입력신호 D의 값인 0을 Q로 전달하여 저장하고 다시 그상태를 유지하게 된다. 
 이처럼 Flip-Flop은 클락신호의 변화에만 신호가 전달된다.

감가산 연산시 Overflow 해결법

Posted 2008. 10. 8. 22:35 by MINOK

1. 문제

- 4비트 감가산 연산시 발생할 수 있는 오류 overflow를 해결하는 방법을 서술하시오.

2. 문제 분석

- 4비트 감가산시 입력의 연산 결과값이 출력범위를 넘어서면 overflow가 발생한다. 이를 해결하지 않으면 결과값이 쓰레기값이 출력되어 원하는 값을 얻어낼 수 없다.

 

3. VHDL code

4. Simulation

 

5. 결론 및 고찰

-결론 : 감가산시 Overflow가 방생하여 원하지 않은 결과값이 발생하는 것을 방지하기위해 출력값의 범위를 입력값보다 더 넓게 설정한다.

가산시(출력=out1) : 출력값의 범위를 넓혀 Overflow의 발생을 방지하였다.

감산시(출력=out2) : 이진수 뺄셈을 하는 절차에 따라 문제를 해결하기위해서 tem1과 tem1라는 변수를 만들었다. 예를 들어 a - b를 하는데 a가 클 경우에는 Overflow가 발생하지않는다. 하지만 b가 더 크게 될 경우 결과값이 음수의 범위로 넘어가게 되고 이를 처리해 주어야한다. b를 2의보수를 취해 a와 더하고 그 값에 다시 2의 보수를 취하여 빼기 연산의 결과값을 얻었고 이를 함수 구현에 적용하였다.

Simulation상의 out2에서 보면 결과값이 음수의 범위로 넘어간 경우 최상위비트를 1로 주어 음수임을 표시하였다.

And 연산기 VHDL (Clock 이용)

Posted 2008. 10. 8. 22:34 by MINOK

1. 문제

- clock의 변화를 이용하여 And 연산을 처리하는 VHDL을 작성하라.

 

2. 문제 분석

- latch : if의 조건이 레벨(lever trigger)에 의해 출력이 변화된다.

- flip/flop : if의 조건이 신호의 상승 혹은 하강에 의해(rising edge,혹은 falling edge trigger) 출력이 변화된다.

- 출력의 상승과 하강을 event라는 속성으로 표현한다.

 

3. VHDL code





















 

4. Simulation

 






5. 결론 및 고찰

-결론 : 출력값에 변화가 있는 부분은 100.0ns를 조금 지나친 부분과 300.0ns를 조금 지나친 부분이다. 100.0ns에서 입력 in_a와 in_b의 값이 각각 1이고 clk이 0에서 1로 변화하였으므로 out_c의 값이 1로 변화하였다. 300.0ns에서도 입력 in_a와 in_b의 값이 각각 1과 0이고 clk의 값이 0에서 1로 변화하였다. 따라서 out_c의 값이 1에서 0으로 변화하였다.

설계된 VHDL문 상에 선언하길 clk이 ‘0‘에서 ’1‘이 될 때 주어진 명령문 And 연산을 실행하게 하였다.

'Computer Engineering > Digital System Architenture' 카테고리의 다른 글

Difference of Latch & Flip/flop  (0) 2008.10.08
감가산 연산시 Overflow 해결법  (0) 2008.10.08
4bit 감가산기 VHDL (SIgnal : Integer)  (0) 2008.10.08
감산기 VHDL  (0) 2008.10.08
Masking (Constant)  (0) 2008.10.08

4bit 감가산기 VHDL (SIgnal : Integer)

Posted 2008. 10. 8. 22:32 by MINOK

1. 문제

- Signal의 Type 지정을 정수형(Integer)으로 하여 4bit의 감가산기를 설계하라. (출력범위 Range에 주의 할 것)

 

2. 문제 분석

- ieee.std_logic_arith.all 파일을 불러옴 으로써 입.출력 범위를 integer로 선언하여 쓸 수 있다.

- range 15 to 0 -> 3 downto 0 과 같은 범위로 설정된다.

 

3. VHDL code

 

4. Simulation

 

감산기 VHDL

Posted 2008. 10. 8. 22:31 by MINOK

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이 됨을 알 수 있다.

Masking (Constant)

Posted 2008. 10. 8. 22:27 by MINOK

1. 문제

- 위의 VHDL 설계에서 sel의 값에 의해서 하위 2비트, 혹은 상위 2비트가 출력으로 전송되었다. 이 때 mask된 비트는 '0'으로 고정되어 있다. mask된 비트가 '1'로 고정되는 회로를 설계하여라.

 

2. 문제 분석

- constant : 초기에 선언한 상수의 값을 유지하는데 사용하며, VHDL문장 작성에 있어 수정이나 확장에 도움을 준다. 대입기호 :=를 사용하며 초기값이 즉시 대입되고 한번 대입된값을 바꿀수 없다.

 

3. VHDL code

library ieee;

use ieee.std_logic_1164.all;

 

entity exam5 is

port (k1: in std_logic_vector(3 downto 0);

sel: in std_logic;

y_out: out std_logic_vector(3 downto 0) );

end exam5;

 

architecture exam of exam5 is

constant mark1 : std_logic_vector := "0011";

constant mark2 : std_logic_vector := "1100";

begin

process(sel,k1)

begin

if(sel='1') then

y_out <= not(k1 xor mark1) or k1 ;

else

y_out <= k1 and mark2;

end if;

end process;

end exam;

 

 

4. Simulation


Variable을 이용한 전가산기의 구현 VHDL

Posted 2008. 10. 8. 22:26 by MINOK

Variable 방식 : process나 부프로그램(function과 procedure)에서만 사용되며 variable이 지니는 값도 내적변수이다. 대입기호 :=는 즉시라는 의미를 가지고 있으며 <=과 달리 즉시 대입된다.

VHDL code

library ieee;

use ieee.std_logic_1164.all;

 

entity exam4 is

port( a, b, c_in : in std_logic;

s, c_out : out std_logic);

end exam4;

 

architecture exam of exam4 is

begin

process(a, b, c_in)

variable s1,c1,c2 : std_logic;

begin

s1 := a xor b;

c1 := a and b;

s <= s1 xor c_in;

c2 := s1 and c_in;

c_out <= c1 or c2;

end process;

end exam;

Signal을 이용한 전가산기의 구현 VHDL

Posted 2008. 10. 8. 22:25 by MINOK

1. 문제

- 다음의 전가산기를 signal을 이용하여 구현하여 보아라.

2. 문제 분석

- signal방식 : 대입기호 <=는 즉시 대입되는 것이 아니라 필요한 시점에서 대입된다. signal 선언을 architecture와 begin 사이에 선언된다.

- 전가산기 : 반가산기가 2진수의 한 자릿수만 계산할 수 있는 것과는 달리 전가산기는 n bit의 2진수 덧셈을 위해 아랫자리에서 올라온 자리올림을 함께 계산한다. 즉, 두 개의 2진수 A와 B에 자리올림까지 함께 더하는 회로이다.

- 진리표

a

b

c_in

s

c_out

0

0

0

0

0

0

0

1

1

0

0

1

0

1

0

0

1

1

0

1

1

0

0

1

0

1

0

1

0

1

1

1

0

0

1

1

1

1

1

1

- 논리 회로

 

3. VHDL code

 

library ieee;

use ieee.std_logic_1164.all;

 

entity exam3 is

port( a, b, c_in : in std_logic;

s, c_out : out std_logic);

end exam3;

 

architecture exam of exam3 is

signal s1,c1,c2 : std_logic;

begin

s1 <= a xor b;

c1 <= a and b;

s <= s1 xor c_in;

c2 <= s1 and c_in;

c_out <= c1 or c2;

end exam;

 

 

4. Simulation