전공지식정리/디지털시스템설계

VHDL9. 기법(논리합성, 설계)

TimeSave 2020. 12. 8. 23:25

1. VHDL을 이용한 시스템 구현과정
; 디지털 회로 설계 프로세스라고 생각하면 된다.
=> 코딩 전 단계에서 여기표 -> 상태도 작성을 통해 로직을 짠다.
=> 이것을 VHDL로 옮기는 것이다.

시스템 구현 Process



2. 코딩기법

2.1 좋은 코딩
 
2.1.1. 코드 첫부분에 관련 정보를 담은 해더를 사용.
 
2.1.2. IEEE 등 개발 환경에서 제공하는 다양한 패키지 활용.
 
2.1.3. 모든 RTL 코드는 한파일에 하나의 entity 서술.
  -> 파일명과 entity명을 일치시킬것.
  -> entity명은 설계 구조가 파악 되도록 할 것.
  -> 테스트 벤치는 tb_entity_name으로 구분하게 할 것.

2.1.4. in,out port signal(입출력 포트 신호)의 명명 규칙
  - >std_logic, std_logic_vector만 사용.
  - >active_high 를 기본으로, low일 경우 신호 끝에 _n 써주기.
  - >설계 시작 전에, 주요 신호선의 이름을 정하기.
  - >port signal(포트신호)는 연관된 건, 그룹으로 처리
  - >buffer모드의 출력은 피하고, out 모드 or 내부 신호선으로 분리.
  -> signal은 F/F(플립플롭)의 출력신호, 및 이와 연결된 배선
  -> variable은 process 내부의 local신호
  -> 0,1 외의 정수는 가급적 상수로 표현
 
2.1.5.process(=프로세스) 문 사용시 주의사항
-> 감지 리스트 작성 시 필요한 신호가 빠지지 않았는지 항상 확인
-> 가능하면 case 문이 if문 보다 논리 합성의 최적화에 유리
-> 데이터를 제외한 모든 신호는 반드시 비동기 리셋해야 함
-> vector를 이용가능 할 경우 loop 보다는 가급적 vector로 서술
-> 여러 프로세스에서 반복적으로 서술되는 부분은 함수(function)을 활용

2.1.6. 기타사항
-> 포트 연결시에는 이름 연결 방식과, 위치 연결 방식을 동시에 적용.
 ->bit는 std_logic으로 사용, bit_vector는 std_logic_vector로 사용
 ->vector의 비트 수 표현 방식은 (msb downto lsb) 
                                  예: std_logic_vector(7 downto 0)
->integer의 값의 표시 방식은 (min to max) 
                                  예 : integer range 0 to 255
->signed integer를 사용할 경우에는 정상적인 논리 합성 여부를 파악
->산술 연산자(+, -, *, /)는 매우 신중하게 사용(게이트 수가 매우 커짐)
->칩의 입력 신호는 일단 해당 클럭으로 플립플롭을 친 신호를 이용(?) 
->칩의 출력 신호도 플립플롭의 출력 신호를 출력 포트로 
직접 연결
->영상 데이터의 경우 앞의 조건과 함께 출력 클럭을 반전시켜 출력
래치가 발생되지 않도록 주의
->의도적인 래치 설계의 경우에는 주석을 통해 래치 발생 회로임을 공지

2.2 예시
2.2.1 포트이름 선언의 좋은예

포트 이름 선언의 좋은 예

2.2.2 포트이름선언 나쁜예

포트 이름 선언의 나쁜 예, pixel vactive_out 등..

2.2.3 출력 데이터와 클럭 신호와의 타이밍 예 : SMPTE274M

SMPTE274M 출력데이터, clk 타이밍 예

3. ASIC를 위한 스타일
-> 사용되는 클럭의 수를 최소로 줄이는 것이 클럭 분배 네트워크 구성에 유리
-> 리셋과 클럭 신호들은 개별 생성을 배제하고 종합 관리
-> tri-state 버스의 enable 핀들은 mutually exclusive 관계
-> floor plan 단계에서 각 블록의 입출력 신호들도 플립플롭으로 인터페이스
-> 두 개 이상의 서로 다른 클럭이 사용되는 블록은 그 크기를 최소화 시켜야 함

 4. 비동기 신호 인터페이스를 위한 스타일
->비동기 신호가 인터페이스 되는 영역을 최소화
->플립플롭의 준안정(metastable) 구간 발생을 고려
->비동기 신호의 인터페이스 시 조합회로가 없이 두 단계 의 플립플롭으로 신호를 저장한 이후에 사용
->하나의 비동기 신호에 대해서 복수개의 비동기 신호 인터페이스를 할 경우 서로 한 클럭의 위상 지연이 발생할 수 있으므로 이러한 설계는 회피

->두 개의 클럭에 의해 인터페이스 되는 신호의 경우 신호의 주파수는 느린 클럭의 주파수보다 느리게 인터페이스

->서로 다른 두 클럭의 비율에 관계없이 인터페이스 할 수있는 또 다른 방법으로 handshaking 방법을 이용

클럭 신호의 타이밍 관계

 

플립플롭의 준비 및 대기시간

 

준 안정상태의 전파 방식

비동기신호의 인터페이스 방법

비동기 인터페이스 구현 예

복수개의 비동기 인터페이스

주파수 차이에 의한 문제

핸드 셰이킹 인터페이스

핸드셰이킹 인터페이스 로직



5. RTL 시뮬레이션

 

RTL simulation 출력 파형

list를 통한 simulation 검증

6. logic synthesis(= 논리합성)
; RTL 형태의 추상적 서술 코드를 -> 논리회로로 만든 하드웨어 형태로 변환하는 과정.

=>  FPGA를 위한 논리 합성 툴들
 Xilinx사에서 제공하는 XST(ISE에 포함되어 있음)
 Altera사에서 제공하는 Quartus II
 Synopsis사에서 제공하는 DesignCompiler Ultra, IC Compiler
 Cadence Design Systems사에서 제공하는 Encounter RTL Compiler
 Mentor Graphics사에서 제공하는 LeonardoSpectrum
 Synplicity사에서 제공하는 Synplify, etc.

=> ASIC을 위한 논리 합성 툴들
 Synopsis사에서 제공하는 Design Compiler
 Cadence Design Systems사에서 제공하는 Encounter RTL Compiler
 Magma Design Automation사에서 제공하는 TalusDesign , etc.

6.1 논리합성 일반
-> VHDL의 논리 합성 가능 여부.
 ; logical synthesizer(논리 합성기)에 따라 차이가 있음.
  => 사용하는 synthesizer(합성기) 성능 파악 필요.
  => 합성기의 지원/지원하지 않는 구문.

대부분 합성기가 지원하지 않는 구문.

대부분 합성기가 지원하는 구문


6.2 논리 합성기의 부가 기능.
- HDL로 구현된 RTL 코드를 게이트 레벨 논리 회로로 논리 합성하는 기능
- 최적화가 안 된 게이트 레벨 논리 회로를 최적화 하는 기능
- 최적화된 회로의 동작 속도를 향상 시키는 기능
- 사용자가 제공하는 통제 정보(constraint)를 이용한 balanced clock tree synthesis 기능
- 배치 후 선로의 커패시턴스(capacitance) 값을 이용한 재최적화(reoptimization) 기능

등등...

6.3 논리합성 이후........

논리합성 이후과정

Floor planning 단계의 신호배치 예

floor planning 예

Place & Route (= 배치 및 배선) 예


7. Macro cell (= 매크로 셀)
; 칩 제작 업체, or FPGA 제공 업체에서 사전에 설계하여 제공하는 회로

7.1 반도체 제작 업체 제공 macro cell
- 메모리(single port, two port, dual port : width와 depth 조정 가능)
- FIFO(width와 depth 조정 가능)
- DAC, ADC, I/O Pad, PLL 등

7.2 FPGA chip 제공 macro cell
- 클럭 버퍼, DCM(Digital Clock Manager), PLL(Phase-Locked Loop)
- 블록 메모리(Block RAM), 분산 메모리(Distributed RAM)
- FIFO
- 곱셈기(multiplier) 등

8. BIST(Built-In Self-Test)
; 불량 칩 검출용, 칩 제작시 추가하는 회로.

-> Memory BIST(메모리 비스트) ; 불량 메모리 검출용
=> 메모리 설계 단계에서 별도의 검증 로직 추가  
=>  메모리 내의 각각의 저장 장소의 정상 동작 유무를 확인할 수 있어야 함

-> Logic Bist(로직 비스트) : 일반 로직의 비정상 동작 여부 검출용
  => 대부분 로직 비스트를 자동으로 삽입하는 툴을 이용
  => 일반적인 테스트 벤치로 커버하지 못하는 회로의 동작을 
       검증할 수 있게 함

BIST를 포함한 전체 설계 과정

9. ASIC제작

10. FPGA검증



출처 :  http://dasan.sejong.ac.kr/~dihan/vhdl.htm