목차
1. 개요
2. 디자인
3. 결론
4. 느낀점
2. 디자인
3. 결론
4. 느낀점
본문내용
gic;
G, P, Sum : out std_logic);
end component;
component Lookahead_carry_generator
port(G, P : in std_logic_vector (3 downto 0);
Ci : in std_logic;
m : in std_logic;
C : out std_logic_vector (4 downto 1);
PG, GG : out std_logic);
end component;
begin
B_sig(0) <= B(0) Xor m;
B_sig(1) <= B(1) Xor m;
B_sig(2) <= B(2) Xor m;
B_sig(3) <= B(3) Xor m;
LCG: Lookahead_carry_generator port map (G_sig, P_sig, Cin, m ,C_sig, Pout, Gout);
Cout <=C_sig(4);
GPFA0: GPFullAdder port map (A(0), B_sig(0), (Cin xor m), G_sig(0), P_sig(0), Sum(0));
GPFA1: GPFullAdder port map (A(1), B_sig(1), c_sig(1), G_sig(1), P_sig(1), Sum(1));
GPFA2: GPFullAdder port map (A(2), B_sig(2), c_sig(2), G_sig(2), P_sig(2), Sum(2));
GPFA3: GPFullAdder port map (A(3), B_sig(3), c_sig(3), G_sig(3), P_sig(3), Sum(3));
end Behavioral;
가산기에서 감산기도 겸할 수 있는 가/감산기 설계는 저번 시간의 배움을 통해 크게 어렵지 않다. 단지 입력 B 벡터와 m을 xor 연산하여 미리 선언한 B_sig에 설정하고 이를 A와 덧셈연산을 하면 될 뿐이다. 물론 제일 처음 carry in 은 m 이 1일 경우 1로 설정하여 B의 2의 보수 연산을 완료한 후에 A와 더하게 된다. 이하는 위의 소스 코드를 테스트하기 위한 테스트 벤치 코드이다.
TB
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY CLA_4bit_TB IS
END CLA_4bit_TB;
ARCHITECTURE behavior OF CLA_4bit_TB IS
COMPONENT cla_4bit
PORT(
Cin : IN std_logic;
A : IN std_logic_vector(3 downto 0);
B : IN std_logic_vector(3 downto 0);
m : IN std_logic;
Sum : OUT std_logic_vector(3 downto 0);
Cout : OUT std_logic;
Pout : OUT std_logic;
Gout : OUT std_logic
);
END COMPONENT;
--Inputs
signal Ci : std_logic := '0';
signal m : std_logic := '0';
signal x : std_logic_vector(3 downto 0) := (others => '0');
signal y : std_logic_vector(3 downto 0) := (others => '0');
--Outputs
signal Sum : std_logic_vector(3 downto 0);
signal Cout : std_logic;
signal Pout : std_logic;
signal Gout : std_logic;
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: cla_4bit PORT MAP (
Cin => Ci,
A => x,
B => y,
m => m,
Sum => Sum,
Cout => Cout,
Pout => Pout,
Gout => Gout
);
process
begin
x<="0000";
y<="0000";
Ci <='0';
m<='0';
wait for 10 ns;
x<="0010";
y<="0011";
Ci <='0';
m<='0';
wait for 10 ns;
x<="0011";
y<="1101";
Ci <='1';
m<='0';
wait for 10 ns;
x<="0101";
y<="0010";
Ci <='1';
m<='0';
wait for 10 ns;
x<="1100";
y<="1111";
Ci <='1';
m<='0';
wait for 10 ns;
x<="0101";
y<="0001";
Ci <='0';
m<='1';
wait for 10 ns;
x<="1010";
y<="0011";
Ci <='0';
m<='1';
wait for 10 ns;
x<="1111";
y<="1100";
Ci <='0';
m<='1';
wait for 10 ns;
x<="0011";
y<="1011";
Ci <='0';
m<='1';
wait for 10 ns;
x<="0100";
y<="0110";
Ci <='0';
m<='1';
wait for 10 ns;
end process;
END;
이하는 결과 파형이다.
모범답안과 동일함을 알 수 있다.
실제 결과 값이 다른 것은 overflow가 생겨서 그렇다.
추가내용2. 장단점 설명
Ripple Carry Adder
장점 : ① 1bit Full Adder 1개를 만들어 놓으면 module로 사용이 가능하다.
② 코드가 짧아서 단순하다.
단점 : ① carry 전달 과정에서 delay가 생긴다. bit가 커지면 연산이 길어진다. 만약에 64bit만 되도 carry 전달을 63번을 해야 한다.
Carry Lookahead Adder
장점 : ① carry 전달 과정이 생략된다. 따라서 delay가 줄어든다. 즉, bit가 커져도 연산의 속도가 빠르다.
단점 : ① lookahead carry logic이 단순하지는 않다. bit가 커질수록 carry를 표현하는 식이 복잡해진다. 그리고 carry를 계산하는데 복잡해지면서 거기서 delay가 생길 수 있다. 하지만 이는 '4bit CLA'를 module로 사용하게 되면 해결이 되기는 한다.
G, P, Sum : out std_logic);
end component;
component Lookahead_carry_generator
port(G, P : in std_logic_vector (3 downto 0);
Ci : in std_logic;
m : in std_logic;
C : out std_logic_vector (4 downto 1);
PG, GG : out std_logic);
end component;
begin
B_sig(0) <= B(0) Xor m;
B_sig(1) <= B(1) Xor m;
B_sig(2) <= B(2) Xor m;
B_sig(3) <= B(3) Xor m;
LCG: Lookahead_carry_generator port map (G_sig, P_sig, Cin, m ,C_sig, Pout, Gout);
Cout <=C_sig(4);
GPFA0: GPFullAdder port map (A(0), B_sig(0), (Cin xor m), G_sig(0), P_sig(0), Sum(0));
GPFA1: GPFullAdder port map (A(1), B_sig(1), c_sig(1), G_sig(1), P_sig(1), Sum(1));
GPFA2: GPFullAdder port map (A(2), B_sig(2), c_sig(2), G_sig(2), P_sig(2), Sum(2));
GPFA3: GPFullAdder port map (A(3), B_sig(3), c_sig(3), G_sig(3), P_sig(3), Sum(3));
end Behavioral;
가산기에서 감산기도 겸할 수 있는 가/감산기 설계는 저번 시간의 배움을 통해 크게 어렵지 않다. 단지 입력 B 벡터와 m을 xor 연산하여 미리 선언한 B_sig에 설정하고 이를 A와 덧셈연산을 하면 될 뿐이다. 물론 제일 처음 carry in 은 m 이 1일 경우 1로 설정하여 B의 2의 보수 연산을 완료한 후에 A와 더하게 된다. 이하는 위의 소스 코드를 테스트하기 위한 테스트 벤치 코드이다.
TB
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY CLA_4bit_TB IS
END CLA_4bit_TB;
ARCHITECTURE behavior OF CLA_4bit_TB IS
COMPONENT cla_4bit
PORT(
Cin : IN std_logic;
A : IN std_logic_vector(3 downto 0);
B : IN std_logic_vector(3 downto 0);
m : IN std_logic;
Sum : OUT std_logic_vector(3 downto 0);
Cout : OUT std_logic;
Pout : OUT std_logic;
Gout : OUT std_logic
);
END COMPONENT;
--Inputs
signal Ci : std_logic := '0';
signal m : std_logic := '0';
signal x : std_logic_vector(3 downto 0) := (others => '0');
signal y : std_logic_vector(3 downto 0) := (others => '0');
--Outputs
signal Sum : std_logic_vector(3 downto 0);
signal Cout : std_logic;
signal Pout : std_logic;
signal Gout : std_logic;
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: cla_4bit PORT MAP (
Cin => Ci,
A => x,
B => y,
m => m,
Sum => Sum,
Cout => Cout,
Pout => Pout,
Gout => Gout
);
process
begin
x<="0000";
y<="0000";
Ci <='0';
m<='0';
wait for 10 ns;
x<="0010";
y<="0011";
Ci <='0';
m<='0';
wait for 10 ns;
x<="0011";
y<="1101";
Ci <='1';
m<='0';
wait for 10 ns;
x<="0101";
y<="0010";
Ci <='1';
m<='0';
wait for 10 ns;
x<="1100";
y<="1111";
Ci <='1';
m<='0';
wait for 10 ns;
x<="0101";
y<="0001";
Ci <='0';
m<='1';
wait for 10 ns;
x<="1010";
y<="0011";
Ci <='0';
m<='1';
wait for 10 ns;
x<="1111";
y<="1100";
Ci <='0';
m<='1';
wait for 10 ns;
x<="0011";
y<="1011";
Ci <='0';
m<='1';
wait for 10 ns;
x<="0100";
y<="0110";
Ci <='0';
m<='1';
wait for 10 ns;
end process;
END;
이하는 결과 파형이다.
모범답안과 동일함을 알 수 있다.
실제 결과 값이 다른 것은 overflow가 생겨서 그렇다.
추가내용2. 장단점 설명
Ripple Carry Adder
장점 : ① 1bit Full Adder 1개를 만들어 놓으면 module로 사용이 가능하다.
② 코드가 짧아서 단순하다.
단점 : ① carry 전달 과정에서 delay가 생긴다. bit가 커지면 연산이 길어진다. 만약에 64bit만 되도 carry 전달을 63번을 해야 한다.
Carry Lookahead Adder
장점 : ① carry 전달 과정이 생략된다. 따라서 delay가 줄어든다. 즉, bit가 커져도 연산의 속도가 빠르다.
단점 : ① lookahead carry logic이 단순하지는 않다. bit가 커질수록 carry를 표현하는 식이 복잡해진다. 그리고 carry를 계산하는데 복잡해지면서 거기서 delay가 생길 수 있다. 하지만 이는 '4bit CLA'를 module로 사용하게 되면 해결이 되기는 한다.
추천자료
- 전자전기실험 결과레포트 2장 [전원의 내부저항, 전압안정 직류전원, DMM의 내부저항]
- 전자전기실험 - 실험 3 결과보고서 [분압기의 설계]
- 전자전기실험 - 실험 4 결과보고서 [Thevenin의 정리]
- 전자전기실험 - 실험 8 결과보고서 [인덕터, RL회로의 과도응답]
- 전자전기실험 - 실험 11 결과보고서 [직렬 및 병렬공진회로와 필터]
- 전자전기실험 - 실험 12 결과보고서 [저항, 커패시터,인덕터의 등가회로와 주파수응답]
- 전자전기실험 - 실험 1 결과보고서 [저항, 전압, 전류의 측정]
- 전자전기실험 - 실험 5 결과보고서 [오실로스코프]
- 전기전자통신 교수 설계
- 전기전자 실험 -RLC회로
- 전기전자 - 부울 대수 개념
- 전기전자실험 - 오실로스코프[Oscilloscope and Function Generator]
- 전기전자 실험 - 키리히호프의 법칙
- 전기전자실험 - 전압계, 전류계 사용법 실험
소개글