기본적인 ASIC 설계의 흐름
<틀린 부분에 대한 지적을 매우매우 환영합니다.>
시스템 반도체는 크게 두 가지로 구분된다.
1. FPGA : 프로그램 가능
2. ASIC : 프로그램 불가능
FPGA 같은 경우에는 LUT(Look Up Table)을 사용하여 내가 HDL 언어를 기술하는대로 동작이 바뀌는 반면,
ASIC은 한번 설계되어 제품이 나오기 시작하면 그 기능을 바꿀 수 없다.
하지만 ASIC은 동일 면적 대비 훨씬 더 좋은 성능을 자랑할 수 있으며, 대량 생산 시 가격이 매우 저렴해 현 시대에 자주 이용된다. (FPGA는 대개 개발용으로 많이 사용되어 하드웨어 가속기라던가, 코인 채굴용(?) 등으로 많이 사용되기도 한다.)
이런 ASIC이나 FPGA의 설계 과정은 대략적으로 어떻게 될까?
아래 그림을 참고해보자.
첫번째로, 칩의 설계 규격을 정한다. Clock, Power, 동작 전압 등. 이 조건들을 다 맞춘 후에 본격적인 설계를 시작한다.
두번째로, Behavor level 코딩을 진행한다. HDL(VHDL or Verilog)로 한줄 한줄 원하는 기능을 동작하도록 작성하여 실제 물리적으로 이 칩이 어떻게 생산될지는 알 필요 없고, 그냥 논리적으로 이 칩이 동작해야 하는 동작만 설계하는 단계이다. (Signal Delay나 공정 defect등을 전~혀 고려하지 않고 원하는 동작만 되게 만드는 단계라고 생각하면 된다.)
세번째로, 위에서 논리적인 동작이 검증된 HDL 코드를 Gate level로 합성(Synthesis)하는 단계이다.
예를 들면,
assign C = A + B;
라는 verilog 코드가 있다고 가정하자. 해당 언어를 모르는 사람이라도 눈치껏 C는 A와 B의 논리합이 출력된다는 것을 알 수 있을 것이다. 그런데 이 코드가 당장 눈 앞에 뿅하고 만들어 질 수 있을까?
당연히 아니다. 논리회로를 공부해본 사람이라면 알겠지만, 이를 물리적으로 구현할 수 있는 개념이 있다.
바로 여러 논리 게이트를 이용하는 것인데, 세번째 단계에서는 이러한 Behavor level의 코드들을 Gate level로 바꾸어 준다.
OR x1(C, A, B);
뭐 이런식으로 말이다.
이렇게 만들어진 논리 게이트들은 실제로 여러 Transistor의 집합이므로, Transistor를 다룰 수 있는 어디에서나 만들 수 있다!
자 그럼 다 된거냐고? 아니다 아직 한참 남았다..
저건 그저 추상적인 논리 게이트일 뿐이고, 실제 물리적인 Chip 모양은 어디에도 있지 않다.
따라서 저 추상적이게 생긴 녀석을 이용하여 실제 Chip으로 만드려면 얘를 한번 더 변환해야 하는데, 그 과정이
네번째, Place & Route (PNR) 단계이다.
보통 칩을 생산해주는 Foundry에서는 위에 보는 것처럼 많은 Gate나 module들(추상적인 놈)을 미리 Layout cell(실제로 눈으로 볼 수 있는 놈)로 저장해 놓는다. 이를 Standard cell이라고 하며, 이번 단계에서는 단순하게 추상적인 회로도를 물리적인 Standard cell을 레고 조각처럼 배치하고 연결하는 것이 전부 다이다! 정말 단순하지 않은가?
위에서 말했듯 개념은 굉장히 간단하다. 배치하고 연결하면 된다. 위와 같은 cell들을 배치하고 회로도대로 서로 연결하는데, 문제는 배치해야 할 놈들이 너무 많고, 상호간에 연결이 너무 많다는 것이다.
위처럼 현대의 VLSI는 매우 복잡한 구조를 띄고 있으므로, PNR 과정은 매우 중요함과 동시에 복잡한 과정이다.
어찌저찌해서 이 단계까지 전부 도달했다면, 설계의 마지막
다섯번째, 위에서 보여준 Layout(GDSII format) 파일을 Foundry에 보내어 Mask를 만들고 Chip을 생산한다. 이후 생산된 칩은 다시 Fabless에서 받아오며, 칩의 설계 및 생산은 종료된다.