DFT, BIST/BISR..

다음의 term이 사실 무엇을 뜻하고 있는지 알기 힘들어왔다. 대충 훑어보면,

일단 배경을 얘기하면 다음과 같다.

대부분의 SoC 칩들에서 RAM이 차지하는 비율이 매우 높다. 왜 RAM의 비율이 높은지는 이후에 얘길하고, 일단 RAM이 많은 부분을 차지하고 있으니까 defect가 발생할 확률이 높아질 수 밖에 없다. 그런데 찍어내는 모든 SoC의 RAM에 defect를 0으로 줄일 수는 없고, 그렇다고 RAM의 일부분에 defect가 있다고 해서 칩을 통째로 버릴 수는 없으니까 찾아낸 방법이 BIST/BISR이 되겠다. 이런 방법론을 DFT라고 하는 것이고.

BIST와 BISR은 쉽게 말해서 이렇다. 자체적으로 RAM의 기능을 테스트하는 것이 BIST, 만일 BIST에서 문제가 발생되었다고 하면 그것을 보완해주게끔 하는 것이 BISR 되겠다. 그러니까 더 쉽게 말하자면 RAM에 일부분에 문제가 생겼다는 것을 찾아내는 모듈을 BIST라고 하고 BISR은 여분의 RAM을 활용해서 defect가 있는 부분을 보완하는 기능을 한다고 보면 된다. BIRA라는 것은 BIST에서 찾아낸 결점의 위치를 여분의 RAM에 mapping하는 역할을 한다고 보면 된다.

그러니까 SoC안에 있는 수많은 RAM중에서 특정 부위에 defect가 생기더라도 수시로 그 결점을 체크해서 그때 그때 보완하게끔 하는 장치가 한꺼번에 들어가 있다는 말이다. 따라서 SoC안에 들어있는 RAM이 100% 무결점하지 않더라도 혹은 동작 중에 결점이 생기더라도 자체적으로 수리하는 회로를 심어넣은 것이 BIST/BISR이라고 생각하면 된다. 따라서 실제로 필요한 RAM용량보다 살짝 많은 RAM을 심어넣어서 혹시 모를 결점에 대응할 수 있게 된다.

VLSI를 설계할 때 RAM은 생각보다 꽤 많은 부분에 사용된다. 주로 buffer가 그렇다고 보면 된다. 왜 buffer가 필요할까? 데이터를 받고 사용하는 시점이 같지 않고 또 하나의 메모리 셀에 데이터를 읽고 쓰는 과정을 동시에 할 수 없기 때문에 별도의 공간을 buffer로 활용한다. 읽고 쓰기가 되야함으로 RAM이 되어야 하는 것이다.

특히 SoC의 경우에는 SoC를 구성하는 각각의 모듈간에 데이터 교환이 DMA를 통해서 이루어지고 이렇게 일련의 데이터가 순차적으로 읽어지고 씌여져야 하는 상황에서는 어쩔 수 없이 buffer가 필요하게 된다. 이를테면 하나의 모듈이 그 기능을 수행할 때, 외부에서 데이터를 가져와서 그것을 처리하고 그 결과를 다른 모듈로 보내는 일을 하는 것이 가장 일반적인데, 이 때 해당 모듈의 효율을 최대화하려면 데이터를 읽어오는 작업, 데이터를 처리하는 작업, 처리된 데이터를 다른 곳에 쓰는 작업 모두가 동시에 이루어져야 한다. 이것을 이렇게 별 개의 작업으로 분리하려면 어쩔 수 없이 memory를 사용할 수 밖에 없는 것이다. 즉, 외부에서 읽어오는 데이터를 buffer A에 쓰고 있고, 아마 읽어놓은 데이터를 buffer B로부터 읽어와야 하고, 지금 처리하고 있는 데이터는 buffer C에 쓰고, 이미 처리된 데이터는 buffer D로부터 읽어서 다른 모듈에 전송해야 한다. 이렇게 단순하게만 생각해도 단순한 하나의 signal flow (input(read) -> process -> output(write))에도 buffer가 4개나 들어간다.

어떻게 동작하느냐고? 쉽게 말해서 BIST에서 memory의 결점을 찾는다. 이미 알고 있는 패턴을 쓰고 읽어내서 그 값을 비교하는 식으로 결점을 찾는다. 결점이 발견되면 해당 메모리 주소를 기록해두고 이 결점이 있는 메모리 영역을 대신할 새로운 메모리 영역을 할당한다. 이후 해당 주소에 메모리 액세스가 일어나면 본래의 메모리로 부터 데이터를 쓰고 읽는 것이 아니라 새로 할당된 영역으로부터 읽고 해당 영역으로 쓰기를 하게 한다.

이 때 결점이 있는 영역의 크기가 BIST/BISR를 위한 여분의 영역의 크기를 상회하게 되면 더 이상 수리가 불가한 상황에 이르게 된다.