10. 논리합성및설계기법 한동일 -...
TRANSCRIPT
VHDL 프로그래밍VHDL 프로그래밍
10. 논리 합성 및 설계 기법
한 동 일
학습 목표학습 목표VHDL을 이용한 시스템 구현 과정을 이해한다 VHDL을 이용한 시스템 구현 과정을 이해한다.
논리 합성이 가능한 RTL 코드의 개념을 이해한다.
ASIC 제작 과정을 이해한다.
FPGA 제작 과정을 이해한다 FPGA 제작 과정을 이해한다.
RTL 시뮬레이션 과정을 이해한다.
논리 합성이 되는 구문과 되지 않는 구문을 파악한다다.
좋은 VHDL 코딩 스타일을 따른다.
준안정 상태의 개념을 이해한다.
비동기 신호 인터페이스를 구현할 수 있다
2/36
비동기 신호 인터페이스를 구현할 수 있다.
VHDL을 이용한 설계 기법VHDL을 이용한 설계 기법
VHDL을 이용한 시스템 구현 과정 VHDL을 이용한 시스템 구현 과정 시스템 사양(specification) 및 구조 결정
VHDL 코딩(RTL 코드)
테스트 벤치 작성
시뮬레이션( ) RTL 시뮬레이션(simulation)
논리 합성(synthesis)
게이트 레벨 시뮬레이션(G t L l i l ti ) 게이트 레벨 시뮬레이션(Gate Level simulation)
배치 및 배선(Place and Route)
배치 후 시뮬레이션(Post Layout Simulation) 배치 후 시뮬레이션(Post Layout Simulation)
타이밍 분석(Static Timing Analysis)
ASIC FPGA 구현(Chip Fabrication) ASIC, FPGA 구현(Chip Fabrication)
테스트용 보드 제작
실장 테스트
3/36
실장 테스트
.
VHDL을 이용한 설계 기법VHDL을 이용한 설계 기법
ASIC 제작 과정 S S ifi i ASIC 제작 과정 System Specification
VHDL Coding(RTL Level) Test BenchVHDL Coding(RTL Level) Test Bench
RTL SimulationLogic Synthesis RTL SimulationLogic Synthesis
Gate-Level SimulationPlace and Route
Technology Library
Gate eve S u at o
Static Timing Analysis
ace a d oute
Post-Layout Simulationy
4/36 Board TestASIC
VHDL을 이용한 설계 기법VHDL을 이용한 설계 기법
FPGA를 이용한 설계 검증 과정 FPGA를 이용한 설계 검증 과정System Specification
VHDL Coding(RTL Level) Test Bench
RTL SimulationLogic Synthesis
Gate-Level SimulationDevice Mapping
5/36 FPGA Board TestFPGA
RTL 시뮬레이션RTL 시뮬레이션
RTL 시뮬레이션 과정 RTL 시뮬레이션 과정
VHDLVHDL VHDLVHDLModel
VHDLLibrary
VHDLTest Bench
SimulationC ilCompiler
Si l ti T tSimulationModel
Test Vectors
VHDLWaveform File
6/36
SimulationOutput Output
RTL 시뮬레이션RTL 시뮬레이션
시뮬레이션을 통한 출력 파형 예 시뮬레이션을 통한 출력 파형 예
7/36
RTL 시뮬레이션RTL 시뮬레이션
리스트를 통한 시뮬레이션 검증 예 리스트를 통한 시뮬레이션 검증 예
8/36
논리 합성논리 합성
논리 합성(l i th i )이란? 논리 합성(logic synthesis)이란? RTL 형태로 추상적으로 서술된 코드를 논리 회로로 이
루어진 하드웨어 형태로 변환하는 과정
FPGA를 위한 논리 합성 툴들 Xilinx사에서 제공하는 XST(ISE에 포함되어 있음)
Altera사에서 제공하는 Quartus II
Synopsis사에서 제공하는 DesignCompiler Ultra, IC Compiler
Cadence Design Systems사에서 제공하는 Encounter RTL Compiler
Mentor Graphics사에서 제공하는 LeonardoSpectrum Mentor Graphics사에서 제공하는 LeonardoSpectrum
Synplicity사에서 제공하는 Synplify, etc.
ASIC을 위한 논리 합성 툴들 ASIC을 위한 논리 합성 툴들 Synopsis사에서 제공하는 Design Compiler
Cadence Design Systems사에서 제공하는 Encounter RTL Compiler
9/36
Cadence esign Systems사에서 제공하는 ncounter RT Compiler
Magma Design Automation사에서 제공하는 TalusDesign , etc..
논리 합성 및 이후 과정논리 합성 및 이후 과정VHDLVHDL T h l C iVHDLModel
VHDLLibrary
TechnologyLibrary
Constraints(Area, Speed, Power)
SynthesisCompiler
Gate-LevelNetlist
Gate-LevelSimulation
VHDLTest Bench
Netlist SimulationTest
VectorsFloor Formal
Place and
FileOutput
Timing
Planning
Post-Layout
Verification
WaveformOutput
Place and Route
Timing Analysis
Post LayoutSimulation
Chi
10/36
ChipFabrication
논리 합성 및 이후 과정논리 합성 및 이후 과정
플로어 플래닝 단계에서의 신호 배치 예 플로어 플래닝 단계에서의 신호 배치 예
bad good
11/36
논리 합성 및 이후 과정논리 합성 및 이후 과정
플로어 플래닝 예 플로어 플래닝 예
I2CI2C H tH t I tfI tf C I t fC I t fI2CI2CIntfIntf
Host Host IntfIntf Camera InterfaceCamera Interface
Color and FrameColor and FrameSDRAMSDRAMDisplayDisplayMainMain
PLLPLL
ControlControlControlControlInterfaceInterfaceDACDAC
SubSubDACDAC
12/36
DACDAC
논리 합성 및 이후 과정논리 합성 및 이후 과정
배치 및 배선 예 배치 및 배선 예
13/36
BIST(Built In Self Test)BIST(Built-In Self-Test)
BIST(B ilt I S lf T t) BIST(Built-In Self-Test) 불량 칩의 검출을 위해 칩 제작시 추가하는 회로
불량 메모리의 검출을 위한 메모리 비스트(Memory BIST)와 일반 로직의 비정상 동작 여부 검출을 위한 로직 비스트(Logic BIST)를 사용
메모리 비스트메 리 비 메모리 설계 단계에서 별도의 검증 로직 추가
메모리 내의 각각의 저장 장소의 정상 동작 유무를 확인할 수 있어야 함
로직 비스트 대부분 로직 비스트를 자동으로 삽입하는 툴을 이용
일반적인 테스트 벤치로 커버하지 못하는 회로의 동작을 검증할 수 있게 함
14/36.
BIST를 포함한 전체 설계 과정BIST를 포함한 전체 설계 과정i iVHDL with Test-Logic
Behavioral SimulationFunction Simulation
Logic Synthesis
Synthesis / SCAN / ATPGScan-Stitching Synthesis / SCAN / ATPG
Static timing verificationGate level simulation
Pre-Static Timing Analysis Pre-layout Simulation
g
Floor-Plan
Hierarchical P&R
Floor-Plan
P&R
RTL2Gate Formal Verify
RC Extraction
P&R
Post-layout simulation/Timing VerifyPost-Static Timing Analysis
Re-optimize
Post-layout Simulation
Gate2Gate Formal Verify
15/36
DRC/LVS/Antenna
논리 합성 일반논리 합성 일반
VHDL 구문의 논리 합성 가능 여부 VHDL 구문의 논리 합성 가능 여부 논리 합성기에 따른 논리 합성 가능 여부 차이 존재
따라서 현재 사용하고 있는 논리 합성기의 성능 파악 필요
대부분의 논리 합성기가 지원하지 않는 구문 deferred constant bus type signal
file declaration
attribute declaration
yp g
register type signal
guard signal
assertion statement
report statement
after clause
physical literal
transport time delay
configuration declaration after clause configuration declaration
16/36.
논리 합성 일반논리 합성 일반대부분의 논리 합성기가 지원하는 구문 대부분의 논리 합성기가 지원하는 구문 entity declaration
architecture body
variable declaration
sequential signal assignment statement architecture body
library clause
use clause
k
sequential signal assignment statement
if statement
case statement
package
subprogram
predefined subtype
next statement
null statement
exit statement
predefined type
user-defined subtype
attribute
return statement
variable assignment statement
sequential procedure call statement attribute
array type
constant declaration
sequential procedure call statement
component instantiation statement
concurrent procedure call statement
integer type definition
record type definition
alias declaration
concurrent signal assignment statement
process statement
signed and unsigned operation
17/36
alias declaration
signal declaration
signed and unsigned operation
enumeration type definition
논리 합성 일반논리 합성 일반
논리 합성기의 부가 기능 논리 합성기의 부가 기능 HDL로 구현된 RTL 코드를 게이트 레벨 논리 회로로 논
리 합성하는 기능
최적화가 안 된 게이트 레벨 논리 회로를 최적화 하는 기능
최적화된 회로의 동작 속도를 향상 시키는 기능최적화된 회 의 동작 속 를 향상 시키는 기능
사용자가 제공하는 통제 정보(constraint)를 이용한balanced clock tree synthesis 기능balanced clock tree synthesis 기능
배치 후 선로의 커패시턴스(capacitance) 값을 이용한재최적화(reoptimization) 기능 등재최적화(reoptimization) 기능 등
18/36.
매크로 셀의 이용매크로 셀의 이용
매크로 셀( ll)이란? 매크로 셀(macro cell)이란? 칩 제작 업체나 FPGA 제공 업체에서 사전에 설계하여
제공하는 회로들
반도체 제작 업체 제공 매크로 셀 메모리(single port, two port, dual port : width와 depth 조정 가능)
FIFO(width와 depth 조정 가능)
DAC, ADC, I/O Pad, PLL 등
FPGA 칩 제공 매크로 셀 클럭 버퍼, DCM(Digital Clock Manager), PLL(Phase-Locked Loop)
블록 메모리(Block RAM), 분산 메모리(Distributed RAM)
FIFO FIFO
곱셈기(multiplier) 등
19/36.
VHDL 코딩 기법VHDL 코딩 기법
좋은 코딩 스타일 좋은 코딩 스타일 코드의 첫 부분에 관련 정보를 담은 해더를 사용
IEEE, 개발 환경에서 제공하는 다양한 패키지들을 활용
모든 RTL 코드는 한 파일에 하나의 설계 entity를 서술 모든 RTL 코드는 한 파일에 하나의 설계 entity를 서술 파일명은 엔티티 이름과 일치시킬 것
엔티티명은 가급적 설계 구조가 파악되도록 할 것
테스트 벤치 코드는 tb_entity_name과 같은 방식으로 구분
입출력 포트 신호들의 명명 규칙 std_logic, std_logic_vector 형 만을 사용
active_high 신호가 기본, active low 신호일 경우 신호 이름 끝에 _n
설계 작 전에 신 선 의 정 수 설계를 시작하기 전에 주요 신호선들의 이름을 정하고 이를 준수
포트 신호들은 관계있는 것끼리 그룹으로 처리
buffer 모드의 출력은 피하고 이를 out 모드 및 내부 신호선으로 분리
20/36
buffer 모드의 출력은 피하고 이를 out 모드 및 내부 신호선으로 분리
.
VHDL 코딩 기법VHDL 코딩 기법
좋은 코딩 스타일 계속 좋은 코딩 스타일 - 계속 포트 이름 선언의 좋은 예
scaled pixel (7:0)scaled_pixel
rc2is pixel(7:0) mct pixel (8:0)scaled pixel (7:0)_p ( )
is2mc_hactive
is2mc_vactive
is2mc_hactive
is2mc_vactive
_p ( )
rc2is_hactive
rc2is_vactive
mct_pixel (8:0)
mc2wm_hactive
mc2wm_vactive
sc ed_p e (7:0)
is2mc_hactive
is2mc_vactive
current_width(8:0)
current_height(7:0)
scaled_width(8:0)
scaled_height(7:0)
fdclk
reset_fd_n
fdclk
reset_fd_n
fd_is_top fd_mc_top
21/36
VHDL 코딩 기법VHDL 코딩 기법
좋은 코딩 스타일 계속 좋은 코딩 스타일 - 계속 포트 이름 선언의 나쁜 예
pixel out (7:0)pixel_out
pixel in(7:0) pixel out (8:0)pixel in(7:0)p _ ( )
hactive_out
vactive_out
hactive_out
vactive_out
p _ ( )
hactive_in
vactive_in
pixel_out (8:0)
hactive_out
vactive_out
p e _ (7:0)
hactive_in
vactive_in
current_width(8:0)
current_height(7:0)
scaled_width(8:0)
scaled_height(7:0)
fdclk
reset_fd_n
fdclk
reset_fd_n
fd_is_top fd_mc_top
22/36
VHDL 코딩 기법VHDL 코딩 기법
좋은 코딩 스타일 계속 좋은 코딩 스타일 - 계속 signal은 플립플롭의 출력신호 및 이와 연결된 배선
variable의 경우 프로세스 내부의 로컬 신호
0과 1이외의 정수 표현은 가급적 상수로 표현 0과 1이외의 정수 표현은 가급적 상수로 표현
프로세스 문 사용 시 주의 사항 감지 리스트 작성 시 필요한 신호가 빠지지 않았는지 항상 확인 감지 리스트 작성 시 필요한 신호가 빠지지 않았는지 항상 확인
가능하면 case 문이 if문 보다 논리 합성의 최적화에 유리
데이터를 제외한 모든 신호는 반드시 비동기 리셋해야 함
vector를 이용가능 할 경우 loop 보다는 가급적 vector로 서술
여러 프로세스에서 반복적으로 서술되는 부분은 함수(function)을 활용
포트 연결 시에는 이름 연결방식과 위치 연결 방식을 동시에 적용
23/36.
VHDL 코딩 기법VHDL 코딩 기법
좋은 코딩 스타일 계속 좋은 코딩 스타일 - 계속 기타 사항
bit는 std_logic으로 사용, bit_vector는 std_logic_vector로 사용
vector의 비트 수 표현 방식은 (msb downto lsb) 예: std logic vector(7 downto 0)std_logic_vector(7 downto 0)
integer의 값의 표시 방식은 (min to max) 예 : integer range 0 to 255
signed integer를 사용할 경우에는 정상적인 논리 합성 여부를 파악signed integer를 사용할 경우에는 정상적인 논리 합성 여부를 파악
산술 연산자(+, -, *, /)는 매우 신중하게 사용(게이트 수가 매우 커짐)
칩의 입력 신호는 일단 해당 클럭으로 플립플롭을 친 신호를 이용
칩의 출력 신호도 플립플롭의 출력 신호를 출력 포트로 직접 연결
영상 데이터의 경우 앞의 조건과 함께 출력 클럭을 반전시켜 출력
래치가 발생되지 않도록 주의 래치가 발생되지 않도록 주의
의도적인 래치 설계의 경우에는 주석을 통해 래치 발생 회로임을 공지
24/36
VHDL 코딩 기법VHDL 코딩 기법
좋은 코딩 스타일 계속 좋은 코딩 스타일 - 계속 출력 데이터와 클럭 신호와
의 타이밍 예 : SMPTE274M
25/36
VHDL 코딩 기법VHDL 코딩 기법
ASIC 설계를 위한 코딩 스타일 ASIC 설계를 위한 코딩 스타일 사용되는 클럭의 수를 최소로 줄이는 것이 클럭 분배 네
트워크 구성에 유리
리셋과 클럭 신호들은 개별 생성을 배제하고 종합 관리
tri-state 버스의 enable 핀들은 mutually exclusive 관계
floor plan 단계에서 각 블록의 입출력 신호들도 플립플 floor plan 단계에서 각 블록의 입출력 신호들도 플립플롭으로 인터페이스
두 개 이상의 서로 다른 클럭이 사용되는 블록은 그 크기 두 개 이상의 서로 다른 클럭이 사용되는 블록은 그 크기를 최소화 시켜야 함
26/36.
VHDL 코딩 기법VHDL 코딩 기법
비동기 신호 인터페이스를 위한 코딩 스타일 비동기 신호 인터페이스를 위한 코딩 스타일 비동기 신호가 인터페이스 되는 영역을 최소화
플립플롭의 준안정(metastable) 구간 발생을 고려
비동기 신호의 인터페이스 시 조합회로가 없이 두 단계 비동기 신호의 인터페이스 시 조합회로가 없이 두 단계의 플립플롭으로 신호를 저장한 이후에 사용
하나의 비동기 신호에 대해서 복수개의 비동기 신호 인 하나의 비동기 신호에 대해서 복수개의 비동기 신호 인터페이스를 할 경우 서로 한 클럭의 위상 지연이 발생할수 있으므로 이러한 설계는 회피수 있으므로 이러한 설계는 회피
두 개의 클럭에 의해 인터페이스 되는 신호의 경우 신호의 주파수는 느린 클럭의 주파수보다 느리게 인터페이스의 주파수는 느린 클럭의 주파수보다 느리게 인터페이스
서로 다른 두 클럭의 비율에 관계없이 인터페이스 할 수있는 또 다른 방법으로 handshaking 방법을 이용
27/36
있는 또 다른 방법으로 handshaking 방법을 이용
.
클럭 신호의 타이밍 관계클럭 신호의 타이밍 관계A C
a D Q D Qb
qcombinational c
A C
clk CLK CLK
qlogic
clk
b
c1
b
c2
c3
28/36
t1 t2
c3
플립플롭의 준비 및 대기시간플립플롭의 준비 및 대기시간
setup time
hold time
clkclk
setup and hold violation
c
ok
ok
29/36
ok
준안정 상태의 전파 방식준안정 상태의 전파 방식B CA
D Q
CLK
D Q
CLK
bq
combinational logic
cD Q
asynca
clk BCLK CLKCLK
clk A
async
clk B
b metastable window
clogic delay
q
30/36t1 t2
비동기 신호 인터페이스 방법비동기 신호 인터페이스 방법
D Q D Q
B C
D Qhsynca
Ahsync_1d_sdr hsync_2d_sdr
sdrclkCLK CLKCLK
clk A
hsync
sdrclk
hsync_1d_sdr metastable window
hsync 2d sdr
t1 t2
hsync_2d_sdr
31/36
1 2
비동기 신호 인터페이스 방법비동기 신호 인터페이스 방법
비동기 인터페이스 구현 예 비동기 인터페이스 구현 예---------------------------------------------- Asynchronous interface --------------------------------------------async proc :async_proc :process (sdrclk, reset_sdr_n)beging
if (reset_sdr_n='0') thenhsync_1d_sdr <= '0';-- do not use this signalhsync_2d_sdr <= '0';
elsif (sdrclk='1' and sdrclk'event) thenhsync 1d sdr <= hsync; -- comes from different clockhsync_1d_sdr < hsync; -- comes from different clockhsync_2d_sdr <= hsync_1d_sdr;
end if;
32/36
end process;
복수개의 비동기 인터페이스복수개의 비동기 인터페이스B C
D Q D Q
B C
D Qasynca
Ab c
clk BCLK CLKCLK
D E
d
clk B
eclk A
lk B
D Q
CLK
D Q
CLK
d
clk B
e
async
clk B clk B
clk B
bb
d
33/36
t1 t2
주파수 차이에 의한 문제주파수 차이에 의한 문제
fastclk
write1t1 t2
slowclkslowclk
i 2write2
34/36
핸드 셰이킹 인터페이스핸드 셰이킹 인터페이스
fastclkfastclk
ready
strbstrb
t1 t2 t3 t4 t5 t7 t8 t9
slowclk
35/36
핸드 셰이킹 인터페이스 로직핸드 셰이킹 인터페이스 로직
BC
strb_1dQ DQ D
strb_2d
B
E
CLKCLKfastclk fastclk
A D
start1
f t lk
ready strbS Q
R
CLK
D Q
CLK
D Q
CLK
start2
fastclk slowclkCLK CLK CLKslowclk
36/36