본문내용
1. 기본적인 디지털 논리회로 설계
1.1. 실습 목적
본 실습의 목적은 기본 논리 게이트로 구성된 회로를 Schematic과 VHDL로 각각 설계하여 시뮬레이션 후, 시뮬레이션 결과가 작성한 진리표와 일치하는지 확인함으로써 논리회로 설계 과정과 설계 방식의 차이점과 장단점을 비교하는 것이다."
1.2. 실습 내용
1.2.1. Schematic 설계
ISE 또는 Quartus에서 새로운 프로젝트를 생성하고 Block Diagram/Schematic을 이용해 [그림 3-14]의 회로를 설계하는 것이다"" [그림 3-14]의 회로는 3개의 입력 A, B, C와 2개의 출력 F1, F2로 구성된다. Schematic 설계에서는 논리 게이트 기호를 이용하여 입출력 관계를 직관적으로 표현할 수 있다. 이를 통해 논리 회로의 동작을 한눈에 파악할 수 있으며, 회로 간의 연결 관계와 논리 구조를 쉽게 확인할 수 있다. Schematic 설계는 회로 시뮬레이션을 통해 입출력 관계를 검증할 수 있고, 실제 회로 구현을 위한 기반이 된다""
1.2.2. HDL 설계
HDL 설계는 Schematic 설계와 달리 하드웨어 기술 언어(Hardware Description Language)를 사용하여 논리회로를 구현하는 방법이다. HDL 코드를 작성하여 디지털 회로를 설계하는 것은 Schematic 설계보다 회로 구현이 간편하고 수정이 용이한 장점이 있다.
먼저 카르노 맵을 이용해 주어진 회로를 간소화하여 논리식을 도출한다. 이때 F1 = AB'C' + ABC + A'B'C + A'B'C' , F2 = AC + AB + AC의 논리식으로 간소화할 수 있다.
그리고 새로운 프로젝트를 생성하고 위의 간소화된 논리식을 VHDL 코드로 설계한다. VHDL 코드 설계 시 entity와 architecture로 구성된 VHDL 템플릿에 맞추어 코드를 작성한다. entity에는 입출력 포트를 정의하고, architecture에는 간소화된 논리식을 VHDL 문법에 맞게 기술한다.
예를 들어 F1 논리식을 VHDL로 표현하면 다음과 같다:
library ieee;
use ieee.std_logic_1164.all;
entity logic_circuit is
port(
A, B, C : in std_logic;
F1, F2 : out std_logic
);
end entity logic_circuit;
architecture behav of logic_circuit is
begin
F1 <= (A and (not B) and (not C)) or (A and B and C) or ((not A) and (not B) and C) or ((not A) and (not B) and (not C));
F2 <= (A and C) or (A and B) or (A and C);
end architecture behav;
이와 같이 VHDL로 설계한 회로를 컴파일하고 시뮬레이션하여 Schematic으로 설계했을 때와 동일한 결과가 나오는지 확인한다. 이를 통해 HDL 설계 방식의 장단점과 Schematic 설계와의 차이점을 이해할 수 있다.
1.3. 연습문제
1.3.1. 논리식 도출 및 진리표 작성
기본적인 디지털 논리회로 설계 실습에서는 주어진 논리회로의 진리표 작성과 이를 토대로 한 논리식 도출이 중요한 부분이다. 우선 주어진 회로의 입력 변수 A, B, C와 출력 변수 F1, F2에 대한 진리표를 작성한다. 진리표는 입력 변수의 모든 가능한 조합에 대해 해당하는 출력 값을 나타내는 표이다.
[표 3-6]에서와 같이 입력 변수 A, B, C의 조합에 따른 출력 변수 F1, F2의 값을 정리하면 다음과 같다.
A B C F1 F2
0 0 0 0 0
0 0 1 1 0
0 1 0 0 0
0 1 1 1 0
1 0 0 1 0
1 0 1 0 1
1 1 0 0 0
1 1 1 1 1
이 진리표를 바탕으로 논리식을 도출할 수 있다. 카르노 맵을 이용하여 논리식을 간소화하면 다음과 같다.
F1 = AB'C' + ABC + A'B'C + A'B'C'
F2 = AC + AB + AC'
이렇게 도출된 논리식은 간단한 조건 논리식으로, 설계된 회로의 동작을 효과적으로 표현할 수 있다. 논리식의 도출과 진리표 작성은 디지털 논리회로 설계의 핵심 요소로, 이를 통해 회로의 동작을 정확히 이해하고 논리적으로 설계할 수 있게 된다."
1.3.2. Verilog 또는 VHDL 코드 작성
HDL 설계
1. 카르노 맵을 이용해 위의 회로를 간소화한 결과, F1 = AB'C' + ABC + A'B'C + A'B'C' 및 F2 = AC + AB + AC로 표현할 수 있다. 이는 기존의 복잡한 논리식을 보다 단순화한 것이다.
2. 새로운 프로젝트를 생성하고, 위에서 간소화된 논리식을 HDL로 코딩하면 다음과 같다.
Verilog 코드:
module digital_logic (
input A, B, C,
output F1, F2
);
assign F1 = (A & ~B & ~C) | (A & B & C) | (~A & ~B & C) | (~A & ~B & ~C);
assign F2 = (A & C) | (A & B) | (B & C);
endmodule
VHDL 코드:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity digital_logic is
Port ( A : in STD_LOGIC;
B : in STD_LOGIC;
C : in STD_LOGIC;
F1 : out STD_LOGIC;
F2 : out STD_LOGIC);
end digital_logic;
architecture Behavioral of digital_logic is
begin
F1 <= (A and (not B) and (not C)) or (A and B and C) or ((not A) and (not B) and C) or ((not A) and (not B) and (not C));
F2 <= (A and C) or (A and B) or (B and C);
end Behavioral;
3. 설계한 HDL 코드를 컴파일하고 시뮬레이션한 결과는 Schematic으로 설계했을 때의 결과와 동일하게 나왔으며, 진리표의 F1, F2 값이 일치하였다. 이를 통해 HDL 코드가 정확하게 구현되었음을 확인할 수 있다.
위의 Verilog와 VHDL 코드는 [1]에 제시된 간소화된 논리식을 구현한 것이다. 카르노 맵을 이용하여 복잡한 논리식을 단순화한 후, 이를 각각의 HDL 언어로 표현하였다. 이렇게 작성된 코드는 Schematic으로 설계한 회로와 동일한 동작 결과를 보이므로, HDL 설계 방식이 논리회로 설계에 효과적으로 활용될 수 있음을 알 수 있다.
1.4. 시뮬레이션 결과 분석
설계된 Schematic과 HDL 코드의 시뮬레이션 결과가 동일하게 나왔으며, 사전에 작성한 진리표의 값과 일치하였다. 이를 통해 Schematic과 HDL 코드의 설계가 정확히 이루어졌음을 확인할 수 있었다.
시뮬레이션을 Timing 모드로 실행한 경우 글리치가 발생하는 것을 관찰할 수 있었다. 입력 신호 A, B, C가 160ns에서 변경되었지만, 실제 출력 신호 F1, F2가 약 11ns 지연되어 변경되는 것을 확인하였다. 이는 게이트 지연 시간으로 인한 것으로, 실제 회로 구현 시 고려해야 할 중요한 요소이다.
반면 Functional 모드로 시뮬레이션을 실행한 경우에는 입력 변화 즉시 출력이 변경되는 것을 볼 수 있었다. Functional 모드는 순수한...