가산기 설계
조합회로 조합회로의 특징 일반적인 조합회로의 종류 값이 저장되지 않음 (저장소자가 아님) 입력 대비 출력값이 모든 경우에 대해 정의됨(정의되지 않는 경우?) 단일 논리게이트 또는 그 조합으로 이루어진 복합회로 일반적인 조합회로의 종류 NAND, NOR, INVERTER(NOT)등의 단일 논리게이트 조합형 가산기, 감산기, 곱셈기, 나눗셈기 등의 산술연산기 다중화기 비교기 여러 종류의 조합형 디코더, 인코더
반가산기(Half Adder) 반가산기(Half Adder) 1비트의 2진수를 2개 더하는 논리회로 2개의 입력과 출력으로 구성 입력 : x, y 출력 : s(sum), c(carry) s = x xor y c = x and y HA x y s c x y s c 1 3
반가산기(Half Adder) Cont’d Half Adder Module library IEEE; use ieee.std_logic_1164.all; entity half_adder is port( x, y : in std_logic; s, c : out std_logic ); end entity half_adder; architecture Behavioral of half_adder is begin s <= x xor y; c <= x and y; end architecture Behavioral;
반가산기(Half Adder) Cont’d Half Adder Testbench library IEEE; use ieee.std_logic_1164.all; entity TB_half_adder is end entity TB_half_adder; architecture Behavioral of TB_half_adder is component half_adder port( x, y : in std_logic; s, c : out std_logic ); end component half_adder; -- input signal signal x, y : std_logic; -- output signl signal s, c : std_logic; begin uut : half_adder port map( x, y, s, c ); process begin x <= '0'; y <= '0'; wait for 10 ns; y <= '1'; x <= '1'; end process; end architecture Behavioral;
반가산기(Half Adder) Cont’d Waveform
전가산기(Full Adder) 전가산기(Full Adder) 1비트의 2진수를 3개 더하는 논리회로 3개의 입력과 출력으로 구성 입력 : x, y, ci(carry in) 출력 : s(sum), co(carry out) s = x xor y xor ci co = (x and y) or (x and ci) or (y and ci) x y ci s co 1 FA x ci s co y
전가산기(Full Adder) Cont’d Full Adder Module library IEEE; use ieee.std_logic_1164.all; entity full_adder is port( x, y, ci : in std_logic; s, co : out std_logic ); end entity full_adder; architecture Behavioral of full_adder is begin s <= x xor y xor ci; co <= ( x and y ) or ( x and ci ) or ( y and ci ); end architecture Behavioral;
전가산기(Full Adder) Cont’d Full Adder Testbench library IEEE; use ieee.std_logic_1164.all; entity TB_full_adder is end entity; architecture Behavioral of TB_full_adder is component full_adder port( x, y, ci : in std_logic; s, co : out std_logic ); end component full_adder; -- input signal signal x, y, ci : std_logic; -- output signal signal s, co : std_logic; begin uut : full_adder port map( x, y, ci, s, co ); process x <= '0'; y <= '0'; ci <= '0'; wait for 10 ns; … x <= '1'; y <= '1'; ci <= '1'; end process; end architecture Behavioral;
전가산기(Full Adder) Cont’d Waveform
4비트 전가산기(4-bit Full Adder) 4개의 FA를 직렬연결 s=x+y FA x4 y4 s4 co x3 y3 s3 c3 x2 y2 s2 c2 x1 y1 s1 c1 ci
4비트 전가산기(4-bit Full Adder) Cont’d 예제 Waveform x y ci s co 0000 0101 0010 0111 1011 1 1100 0100 1111
부호를 가지는 이진수 표현법 Sign-magnitude 1’s complement 2’s complement +3 0011 +2 0010 +1 0001 +0 0000 -0 1000 1111 -1 1001 1110 -2 1010 1101 -3 1011 1100 4비트 표현법의 예 4비트인 경우, 2의 보수 표현법의 범위 : -8 ~ +7
4비트 가/감산기(4-bit Full Adder/Subtractor) 모드입력 M에 따라 가산/감산 모드 결정 M : 0 → s = x + y M : 1 → s = x - y FA x4 y4 s4 co x3 y3 s3 c3 x2 y2 s2 c2 x1 y1 s1 c1 ci M
4비트 가/감산기(4-bit Full Adder/Subtractor) Cont’d 실습내용 FA 4개를 이용한 4비트 가산기/감산기 2’s complement를 이용한 가/감산기 설계 Mode 입력에 따라 덧셈과 뺄셈의 연산을 결정 설계 FA를 이용하여 4비트 가/감산기 설계 Testbench 설계 결과 예제에 나와 있는 값을 입력( 순서대로 입력 할 것 ) Waveform을 조교에게 검사 받을 것( 예제로 나와 있는 파형과 일치해야 함 ) entity bit4_add_sub is port( x, y : in std_logic_vector( 3 downto 0 ); ci, m : in std_logic; s : out std_logic_vector( 3 downto 0 ); co : out std_logic ); end entity bit4_add_sub;
4비트 가/감산기(4-bit Full Adder/Subtractor) Cont’d 예제 Waveform x y ci m s co 0000 0010 0011 0101 1101 1 0001 Over 1100 1111 x y ci m s co 0101 0001 1 0100 1010 0011 Under 1111 1100 1011 Over 0110 1110