custom과 semi-custom, ASIC Design flow , (반도체 설계 과정)

회로 설계는 그 방식에 있어서 크게 두 가지로 분류할 수 있다.

  • Custom (full-custom)
  • Semi-custom

full-custom은 보통 아날로그 설계에서 많이 선택하는데, 직접 schematic, layout을 그리는 것을 말한다.

semi-custom은 ASIC 설계에 보통 쓴다고 보면 되고, 제공되는 library를 사용해서 회로를 구성한다.

보통 디지털 회로 설계에서는 semi-custom을 쓴다.

물론 디지털 회로에서도 직접 그리려면 그릴 수 는 있는데, 트랜지스터 수가 너무 많아서, 쉽지는 않다.

각 공정사에서는 PDK , Process Design Kit을 설계자에게 제공한다.

이 PDK에는 위에서 말한 소자에 대한 library말고도, timing관련, 온도 관련 library들과 설계 규칙이라던지,

설계에 필요한 다양한 정보들을 담고 있다.

우리가 디지털 회로설계를 할 때, verilog와 같은 HDL로 작성된 코드를 합성하는 단계가 있는데, 이 단계에서 위의 PDK에 있는 정보들을 토대로 합성이 이루어진다.

일반적으로 위에서 말한 것처럼 semi-custom 방식으로 진행되기는 하지만, 이 과목에서는 기초적인 기반을 다지는 수업이기 때문에 custom을 공부하는 측면이 좀 있다. 아무튼.

 

ASIC design flow

위 사진과 같은 flow로 설계가 진행된다.

우선 어떤 설계에 있어서, 목표 spec을 정하고 시작한다.

 

이후, 우리가 많이 다뤘던 verilog를 사용해 설계를 진행한다.

이 과정에서도, standard cell들을 사용하면서 설계를 한다.

 

RTL은 Register transfer level의 줄임말인데, 디지털 설계는 기본적으로 RTL 구조를 갖고 있다.

HDL로 설계를 하면, Flipflop으로 된 register와 register 사이에 combinational logic이 있는 형태로 만들어 진다.

각 register는 clk에 따라 combinational logic에 input을 제공하거나, output을 저장하는 역할을 하게 되는 구조를 생각하면 된다.

 

완성된 코드에 대해, 오류가 없이 실행이 되는지 검증과 테스트를 거치며 코드를 완성한다.

Logic synthesis 단계에서 behavioral로 작성된 코드를 합성한다.

이 합성단계에서, 코드에 맞게 standard cell들을 통해 gate-level의 netlist가 생성된다.

netlist 또한 일종의 verilog 코드 형태로 완성되는데, 여기서는 실제 게이트, 트랜지스터 단위로 각 핀들의 연결이 기술되어 있다.

 

이렇게 만들어진 netlist에 대해 타이밍이나 로직 자체에 문제가 없는지 검증, 테스트를 거친다.

여기까지가 우선은 HDL과 크게 관련된 부분이라면,

Floor planning과 automatic P&R 에서부터는 실제 회로 HW와 밀접한 관련이 있다.

 

게이트 레벨로 변환된 설계를 실제 HW로 옮길 때, 각 소자들의 배치와, 그에 따른 도선들의 연결, 배치가 중요하다.

standard cell library에는 소자들에 대한 이미 만들어진 layout등이 있고, 이를 이어지는 단계들에서 배치하고, 디버깅하는 작업을 수행한다.

 

이러한 layout에서도, 연결이 너무 멀다던지, 여러 문제가 있을 수 있고, 이런 문제들은 DRC, Design rule checker, Layout versus schematicc 등을 확인해가면서 그 matching을 확인한다.

 

완성된 파일은GSDII 확장자 파일로 공정사에 전달되어 생산될 수 있다.

이 과정을 이전에는 tape에 담아서 fab에 보냈기 때문에 tape out이라고도 한다.

 

 

metal wire

standard-cell based design에서, VDD를 통일해서 사용하려면, 각 cell 들의 높이를 통일시켜야 한다.

높이가 달라지면, VDD line을 그냥 보내는게 아니라, 각 cell들에 추가 metal layer를 사용해서 일일히 조정해야 하기 때문이다.

또한, metal의 개수가 적다면 cell위로 VDD 선이 지나지 않게 Cell간 feedthrough cell 을 둬서 도선이 지나갈 길을 만들어야 하는데, metal의 layer수가 많으면 굳이 그럴 필요는 없다.

metal wire의 layer는 아래에서 위로 점점 커진다.

 

가장 위의 매우 두꺼운 wire layer는 단면적이 크기 때문에 저항이 작다.

따라서 먼 거리를 연결할 수록 더 굵은 단면적의 layer를 사용한다.

다만, area, cost 이슈가 있기 때문에, 되도록 얇은 선들 위주로 사용하는 것이 좋다.

보통 멀리까지 연결하는 선이라고 하면, 공통적으로 사용하게 되는 clk나 VDD 정도를 생각하면 된다.