KR100594593B1 - 반도체 소자의 설계 검증을 위한 고속 병렬 시뮬레이션 방법 - Google Patents
반도체 소자의 설계 검증을 위한 고속 병렬 시뮬레이션 방법 Download PDFInfo
- Publication number
- KR100594593B1 KR100594593B1 KR1020040117803A KR20040117803A KR100594593B1 KR 100594593 B1 KR100594593 B1 KR 100594593B1 KR 1020040117803 A KR1020040117803 A KR 1020040117803A KR 20040117803 A KR20040117803 A KR 20040117803A KR 100594593 B1 KR100594593 B1 KR 100594593B1
- Authority
- KR
- South Korea
- Prior art keywords
- simulation
- value
- gate
- net
- input
- Prior art date
Links
Images
Classifications
-
- H—ELECTRICITY
- H01—ELECTRIC ELEMENTS
- H01L—SEMICONDUCTOR DEVICES NOT COVERED BY CLASS H10
- H01L22/00—Testing or measuring during manufacture or treatment; Reliability measurements, i.e. testing of parts without further processing to modify the parts as such; Structural arrangements therefor
- H01L22/20—Sequence of activities consisting of a plurality of measurements, corrections, marking or sorting steps
Landscapes
- Engineering & Computer Science (AREA)
- Manufacturing & Machinery (AREA)
- Computer Hardware Design (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Power Engineering (AREA)
- Test And Diagnosis Of Digital Computers (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
본 발명은 반도체 회로 설계의 고속 검증을 위한 기술로 종래의 소프트웨어적 검증 방식의 한계를 극복하기 위하여 하드웨어 가속기(Hardware Accelerator)와 이의 최적 동작을 위한 소프트웨어 알고리즘을 구현함으로써 실제 결과 값에 근사한 예측치를 빠른 시간 내에 계산되도록 하여 설계에 즉시 반영할 수 있도록 하는 반도체 소자의 설계 고속 병렬 검증 방법에 관한 것이다.
반도체 소자, 설계 검증, 고속 병렬 검증 방법, 하드웨어 가속 장치.
Description
도 1 내지 도 28은 종래의 기술을 설명하기 위한 도면.
도 29내지 도 50은 본 발명의 기술을 설명하기 위한 도면.
본 발명은 반도체 회로 설계의 고속 검증을 위한 기술로 종래의 소프트웨어적 검증 방식의 한계를 극복하기 위하여 하드웨어 가속기(Hardware Accelerator)와 이의 최적 동작을 위한 소프트웨어 알고리즘을 구현함으로써 실제 결과 값에 근사한 예측치를 빠른 시간 내에 계산되도록 하여 설계에 즉시 반영할 수 있도록 하는 반도체 소자의 설계 고속 병렬 검증 방법에 관한 것이다.
종래의 여러 개의 반도체 칩이 하나의 시스템을 구성에 비하여 현재는 각 칩 사이의 제어 신호, 동기 신호 등으로 인한 비효율적인 요소들을 하나의 칩으로 내장하여 별개의 제어 신호 및 동기 요소들을 제거함으로써 소형, 저전력을 요구하는 가전업계와 소비자의 욕구에 충족하기 위하여 SoC(System on a Chip)를 이용하게 되었다.
그러나, 이러한 SoC의 설계 목표는 기능의 수요와 설계 효율의 갭을 줄이기 위한 방안으로써 기술적인 한계를 해결하기 위한 것이라기보다는 생산 단가와 효율의 관점에서 정의되고 있어 그 설계비용 및 효율 또한 매우 중요한 요소이다.
SoC는 그 기능적 특성상 시장이 요구하는 적기에 개발 및 생산이 이루어져야하며, 이러한 SoC의 설계에 있어 총 소요 시간의 약 40%를 칩의 특성 검증에 소모하고 있으므로 이 검증 시간의 단축이야말로 SoC 개발 및 생산에 있어 가장 중요한 요소라 할 수 있다.
종래의 반도체 설계의 검증 방법으로 로직 게이트 시뮬레이션, 컴파일드 방식 시뮬레이션 및 이벤트 방식의 시뮬레이션이 주로 사용된다.
로직 시뮬레이션은 로직으로 기술된 설계 도면을 분석하여 설계 도면상의 기능을 직접 칩으로 구현하기 전에 컴퓨터에서 가상의 입력값을 대입하고 이에 따른 설계 도면의 출력을 예상 출력값과 비교함으로써 도면의 기능 오류 여부를 검증하는 방법으로, 각 로직별 예상 출력값을 이용하므로 전체 회로에 있어 게이트의 시뮬레이션 순서가 올바르게 수행되지 않을 수가 있다.
도 1은 로직 시뮬레이션의 로직 모델과 타이밍에 대하여 설명하기 위한 일예로, Feedback이 있는 간단한 것이며, 모델에 따라 출력 O가 완전히 다른 것을 보여 주고 있다. 즉, Zero-delay의 경우 출력이 시간 0부터 값이 1로 일정하게 유지되나, Unit-delay나 Multi-delay의 경우 출력이 각각 2, 3의 단위 시간부터 발진(oscillation)이 일어나는 경우가 발생한다. 이 경우 시뮬레이터는 설계자에게 이와 같은 가능성을 인지시켜, 회로의 오동작을 방지할 수 있도록 정보를 제공한다. 이와 같이, Zero-delay에서 찾을 수 없는 문제점을 Unit-delay나 Multi-delay 모델에서 찾을 수 있다. 또한 Unit-delay에서 발견하기 어려운 Static, Dynamic Hazard와 같은 문제도 Multi-delay에서 발견할 수 있는 장점이 있으나, 시뮬레이션이 복잡하고 시뮬레이션 시간이 오래 걸리는 단점이 있다.
도 2는 기본적인 로직 게이트 회로이며, 도 3는 도 2의 회로의 분석을 위한 의사 시뮬레이션 프로그램의 예제이다.
도 3의 시뮬레이션 프로그램은 변수 X2의 값이 저장되기 이전에 사용되기 때 문에 수행 결과에 대한 문제점이 발생할 여지가 있는데 예를 들어, 모든 변수의 값이 "0"으로 초기화되었다면 컴퓨터 시뮬레이션은 올 바른 수행을 할 수가 없다.
즉, 입력 A=1, B=0, C=0, D=1, E=1인 경우 그림13에 의한 시뮬레이션 결과는 Q1=0,Q2=0 로써 올바른 결과인 Q1=0, Q2=1과는 다른 결과를 보인다.
상기의 문제점을 해결하기 위한 방안으로 게이트 시뮬레이션의 수행 순서를 결정하는 단계화작업(levelization)을 하며, 각각의 게이트와 네트에 단계(level)번호를 부여한다.
도 4은 상기 단계화작업의 예제로써, 단계번호의 부여방법의 시작은 입력 네트(Primary Input)에 레벨값 0을 부여하고 각 게이트 입력네트의 값을 취합하고 최대값을 추출하여 최대값+1을 해당 게이트의 레벨로 지정한다.
각 게이트에 레벨값이 지정되면 그 레벨값에 따라 순차적으로 정렬(sorting)되어 이 레벨순서에 따라 컴퓨터 시뮬레이션을 수행하며, 도 2의 예제의 경우 {G1,G4}??G2??{G3,G5}의 순서로 시뮬레이션이 수행되어 도 3의 시뮬레이션 프로그램에서 오류를 발생시켰던 X2 문제를 해결할 수 있다.
도 5는 각 게이트의 레벨 지정을 위한 단계화작업 프로그램의 일예이다.
또한, 상기 컴퓨터 시뮬레이션을 위해서는 내부적으로 회로의 분석을 통하여 필요한 자료구조를 구성하고 테이블 형태로 저장한다.
도 6은 도 2의 예제회로에 대한 회로 분석 결과의 게이트 테이블의 일예이다.
로직 게이트 시뮬레이션은 상기의 절차를 거쳐 회로도면(circuit) 및 입력값 (input vectors)을 이용하여 시뮬레이션을 수행한 후 출력네트의 값을 예상값과 비교함으로써 설계도면과 기능의 검증을 수행하고 기능 오류에 따라 재설계 및 재검증 절차를 거친다.
도 7은 로직 게이트 시뮬레이션 방법인 인터프리티브 방식의 시뮬레이션의 알고리즘을 나타낸 것이다.
그러나, 상기한 인터프리티브 방식의 시뮬레이션은 각 게이트마다 상기의 각 동작요소를 실행해야하고 특히, 모든 입력값의 변화에 따른 각각의 출력값을 테이블로 저장하는 등의 복잡한 과정을 수행하므로 수많은 게이트로 구성된 고집적의 SoC분석방법으로는 최적화가 매우 어려운 단점이 있다.
상기한 인터프리티브 방식의 단점을 보완하기 위하여 컴파일드 시뮬레이션 방법에서는 C언어나 어셈블리어의 반복 구문을 이용하여 전체 회로를 시뮬레이션하므로 인터프리티브 방식보다 최적화 및 고속화가 가능하다.
도 9는 개선된 컴파일드 시뮬레이션 방법을 이용한 프로그램의 일예이며, 도 9은 컴파일드 시뮬레이션 방법의 알고리즘을 나타낸다.
도 10은 컴파일드 시뮬레이션 방법을 이용한 도 2의 예제회로에 대한 게이트 시뮬레이션 프로그램이다.
그러나, 상기한 인터프리티브 방식 및 컴파일드 방식은 각각의 입력 변화수에 따른 경우의 수를 모두 수행해야하는데, 입력변화에 따른 출력변화가 없는 경우도 모두 시뮬레이션하는 불필요한 동작을 하게된다.
이러한 불필요한 동작요소를 제거함으로써 고속검증을 하는 방법이 이벤트 방식의 시뮬레이션이다.
이벤트방식의 시뮬레이션 방법을 도 11의 회로를 이용하여 설명하면 다음과 같다.
도 2의 회로에 있어서 각각의 입력값이 (A,B,C,D)=(0,0,0,0)과 (0,0,0,1)의 경우 A,B,C값이 변화하지 않았으므로 게이트 G1과 G2는 시뮬레이션을 수행할 필요가 없으며, 따라서 G4의 시뮬레이션은 X1,X2를 테스트하지 않고 생략할 수가 있다.
도 12는 이벤트를 구현하기 위한 자료 구조를 나타낸 것으로, 각각 스케쥴링 정보, 비트 정보 및 새로운 비트값으로 구성된다.
이벤트방식은 레벨방식과 달리 동적인 스케쥴링 기법을 가지고 있으며, 동적인 방식은 회로 분석시점에서는 회로내의 게이트가 수행하는 순서를 예측할 수가 없으므로, 큐(queue; 대표적인 컴퓨터 자료의 저장, 검색 방식)를 사용하여 동적 스케쥴링이 가능토록 한다.
즉, 회로의 입력값의 변동으로 인하여 이벤트가 검출되었다면, 이벤트 자료구조(도 12)가 해당 입력네트의 정보를 가지고 생성되며, 이벤트 큐(Event Queue)는 생성된 이벤트 자료들을 저장하고 처리되기를 기다리는 것이다.
도 13는 입력값의 이벤트를 처리하는 방법을 보여주는 프로그램의 일예이다.
도 14의 예제 회로에 도 13의 프로그램을 적용하여 좀 더 자세히 설명하면 다음과 같다.
두 개의 입력값이 (1,1,0,0,1,0)과 (0,0,0,0,1,1)이라고 가정하면, 두 개의 입력값 A, B와 F의 3개가 변동되고 따라서 3개의 이벤트가 발생하며, 이 이벤트는 큐에 저장된 후 각각의 이벤트 처리가 수행되어야하므로 이벤트 처리의 처음은 네트값을 이벤트 자료구조에서 영구적인 값을 갖는 영역으로 복사한다.
이후, 해당 네트에 연결된 모든 게이트를 시뮬레이션하게 되며, 이와같은 모든 게이트를 처리하는 큐가 게이트 큐(Gate Queue)이다.
도 15는 이벤트 처리를 위한 프로그램의 일예로써, 이벤트의 처리는 모든 발생된 이벤트가 처리될 때까지 수행하며, 수행된 이벤트는 큐에서 제거되고 동시에 게이트 큐에 해당 게이트는 저장되는 것을 나타내며, 통상적으로 여러개의 게이트가 게이트 큐에 저장된다.
도 16은 이러한 수행의 결과로 생성된 게이트 큐의 내용을 나타낸다.
도 17은 모든 이벤트들이 처리된 후, 게이트 큐의 각각의 게이트를 시뮬레이션하고 게이트의 출력, 네트의 출력과 이 출력 네트의 스케쥴링을 수행함을 나타내는 것으로, 회로 도면 게이트당 하나의 시뮬레이션 종속프로그램이 있어서 시뮬레이션을 수행한다.
이와같이 게이트 처리 프로그램은 새로운 이벤트를 생성하고, 이 이벤트를 이벤트큐에 저장하며, 이 이벤트들을 처리되도록 이벤트 처리 프로그램을 호출하는 동작을 반복적으로 수행하여 처리할 이벤트가 없을 때까지 수행한다.
이때, 입력값에 대한 시뮬레이션은 입력 처리 프로그램과 여러번의 게이트, 이벤트 처리 프로그램들로 구성된다.
도 18은 이러한 시뮬레이션 프로그램의 메인 프로그램이자, 전체적인 구성을 나타낸다.
상기의 이벤트 방식의 시뮬레이션을 구현하기위한 타이밍 모델에 대하여 설명하면 다음과 같다.
기본적으로 레벨기반의 시뮬레이션이 0-지연(0 delay) 모델을 사용하여 시뮬레이션하는 반면에, 이벤트 기반의 시뮬레이션은 1-지연(unit-delay) 또는 multi-delay(임의의 지연) 모델을 사용한다.
도 19는 이벤트 시뮬레이션 수행의 일예로, 유닛딜레이(1-지연) 모델은 모든 게이트의 지연값이 1로 모델하여 시뮬레이션하는 반면, 임의의 지연 모델은 게이트의 특성, 입력의 수, 종류에 따라 지연값을 정수로 정의하여 시뮬레이션하게되며, (A,B)가 (0,0)에서 (1,1)로 변화되었을 경우를 이벤트기반의 알고리즘을 사용한 예를 보여주고 있다.
여기서 이벤트기반 시뮬레이션에서의 중요한 요점은 첫째, 게이트 G2는 입력값 A의 변화에 따라 즉시 시뮬레이션을 수행하게 되는데, 이는 레벨방식의 시뮬레이션과 동일하다. 둘째, G2는 두 번 시뮬레이션을 수행하게 되며, 이는 레벨방식의 시뮬레이션과는 다른 것으로, 네트 Q는 두 번의 이벤트를 가지고 있으며, 따라서 Q값은 0->1->0값으로 변환되므로 만일 네트 Q가 T 플립플롭의 입력이면, 시뮬레이션의 결과가 레벨방식과 이벤트방식은 다른 결과를 보이게 된다.
이벤트방식의 알고리즘에서 사용하는 두 가지 단계 - 이벤트(혹은 네트) 처리 프로그램과 게이트 처리 프로그램 단계-는 시뮬레이션의 한 개의 시간 흐름을 나타낸다. 따라서 이벤트처리 프로그램의 수행은 한 개의 단위시간의 흐름을 나타내고, 처음 이벤트처리 프로그램의 수행을 시간 0으로 하여, 이벤트처리프로그램의 수행 때 마다 시간이 1씩 증분 된다.
상기의 유닛 딜레이 모델과 달리 멀티 딜레이 모델은 게이트에 임의의 지연값을 지정하여 시뮬레이션하는 것으로 입력의 수, fanout의 수 등에 따른 게이트 특성의 차를 고려하여야 한다.
도 20은 임의지연회로를 이용한 간단한 회로를 보여주는 것으로, 가령, A,B의 값이 t=0에서 값의 변화가 있었다면, 네트 F의 값은 t=3이전에는 변화가 없고 또한, 네트 E의 값은 t=4일 때 까지 변화가 없게되며, 이와 같은 현상은 이벤트기반의 알고리즘에서 문제점을 야기 시킬 수 있다.
이벤트방식 알고리즘에서는 t=0일 때, 게이트 G1, G4가 시뮬레이션을 위하여 스케쥴링이 되며, 스케쥴링이 된 게이트 G1, G4는 시뮬레이션을 수행하여, 네트 C와 E의 이벤트가 t=1일 때 스케쥴링이 된다. 그러나 네트 E값의 변화를 올바른 시간에 변경하기 위한 조치가 필요하게 된다. 이것은 게이트 G4의 시뮬레이션을 t=3일 때까지 지연하는 것이 한 방법이지만, 만일 네트 B가 t=1, 2, 또는 3에서 값이 바뀐다면 게이트 G4의 시뮬레이션은 정확치 않은 입력값으로 수행하게 되는 문제점이 있다. 올바른 시뮬레이션을 위하여는 게이트 G4의 수행을 t=0에서 하고, 네트의 이벤트를 처리하는 시간은 t=4에서 수행하여야하는데, 이러한 생성된 시간과 수행 시간과의 차이는 게이트의 지연값에 의해 생기는 것으로 두 가지의 시간이 시뮬레이션내에서 존재하게 된다.
상기의 이벤트 시뮬레이션에 있어서 적절하지 못한 알고리즘을 사용하는 경우에는 시뮬레이션 성능 및 결과에 심각한 영향을 미치게 되는데, 임의지연의 시뮬 레이션(multi-delay simulation)을 위하여 단일지연 시뮬레이션(unit-delay simulation)에서 사용하는 간단한 이벤트큐를 사용하는 경우 이벤트는 생성될 때마다 이벤트큐에 저장하게 되고, 시간 T가 되어 이벤트 처리를 한다면 시뮬레이터는 해당 시간의 이벤트를 찾기 위하여 큐를 검색하게 되어 이때 소모되는 검색시간(Repeated Minimum Sort알고리즘)은 O(n2) 시간이 소요될 뿐 아니라, 이벤트가 생성되어 저장되는 시간(Insertion sort)도 O(n2)시간이 소요된다. 여기서 n은 이벤트의 수이다.
또한 이벤트들이 시간 순서적으로 생성되지 않는 문제가 생기므로 이를 방지하기 위해 이벤트들이 처리되기 전에는 반드시 수행시간에 따라 정렬되어 있어서 수행되어야 올바른 결과를 얻을 수 있으며, 가장 효율적인 방법으로 버켓소트(bucket sort; O(n)) 알고리즘의 변형인 타이밍 휠(timing wheel)과 힙소트(heap sort; O(nlog2n)) 알고리즘의 변형인 우선 순위큐(Priority Queue)를 이용한다.
상기 타이밍 휠의 기본적인 개념은 이벤트큐가 단위시간당 하나의 큐를 나타내는 여러 개의 이벤트큐의 집합 즉, 자료구조론 적으로는 큐의 어레이의 개념으로 파악하는 것이다.
도 21은 타이밍 휠의 구조를 보여주는 일예로써, 게이트의 지연의 최대값이 D라 가정할때 현재 T시간에서 시뮬레이션이 수행되고 있으면, 이벤트 I가 수행되는 최대 시간은 T+D가 된다. 따라서 T+D+1 이상의 시간에는 이벤트가 있을 수 없고, 게이트들은 모든 이벤트가 처리 될 때까지 시뮬레이션이 수행되지 않기 때문에 시 간 T나 T이전에는 이벤트가 큐에 저장되지 않으므로 최대 큐의 수는 D로 정의할 수 있다. 시뮬레이션 시간 T에서 발생하는 이벤트는 구문 "Q의 위치 = T % D, %는 modulation"을 이용하여 큐의 인덱스를 찾을 수 있다. 시뮬레이터는 시뮬레이션의 시작시간을 기준으로 한"현재 시간"을 기록 저장하여 수행하며, 이벤트 처리 프로그램은 단위지연 모델의 경우와 동일하다.
도 22는 임의지연 모델을 위한 시뮬레이션 알고리즘의 구성을 보여 주는 프로그램의 일예로써, 밑줄로 표기된 부분은 단위지연모델 대비 변경된 부분이다.
도 23은 게이트 수행을 위한 게이트 시뮬레이션 프로그램의 일예이다.
그러나, 상기의 시뮬레이션에 있어서 동일 네트의 두개 이벤트가 처리를 위하여 큐에 저장되어 있는 경우에는 문제가 발생하게 된다.
도 24는 이러한 문제 발생의 일예를 보여주는 회로로써, 게이트 G는 대형회로의 한 부분임을 뜻한다. 여기서 게이트 G의 입력과 출력값이 t=100에서 발생된 값이라고 가정하면, t=101에서 이벤트가 처리되어 네트 a의 값이 1에서 0으로 변환되고, 이는 네트 b가 처리되기 위하여 t=105에 스케쥴링되는데 이는 t=105에서 b값이 0에서 1로 변환될 예정임을 알 수 있다. 그런데, t=102에서 이벤트가 발생되어 네트 a의 값이 1에서 다시 0으로 변환되었을 경우, t=105의 이벤트는 아직 큐에 있는 시간이며 네트 b값이 변환되기 이전이며, G는 t=102에서 입력값 1을 사용하여 시뮬레이션하고 G의 출력값이 이미 0이기 때문에 새로운 이벤트를 발생하지 않는다. 이와 같이 새로운 이벤트를 발생하지 않는 다면 t=105에서 이벤트가 수행되어 네트 b값을 1로 변환하게 되고 그 결과, 게이트 G의 입력과 출력값이 모두 1인 경 우가 되는 문제가 생긴다.
이와 같은 문제는 t=102에서 게이트 시뮬레이션의 결과를 네트 b의 값과 비교하기 때문에 발생되는 것으로, t=106에서 네트 b값이 변환되기 때문이다. 이 문제를 해결하기 위한 방법으로 큐에 있는 네트 b의 이벤트를 조사하여 새로운 값과 비교하는 방법, 또는 다른 방법은 네트의 이전 값과 새로운 값의 비교를 지연하여 처리하는 방법 등이 있으며 이중 후자의 방법이 전자의 방법보다 간단하고 구현하기 쉽다.
도 25는 상기한 네트의 이전 값과 새로운 값의 지연 비교하여 처리하는 프로그램의 일예이다.
도 26은 좀 더 상세한 설명을 위한 이벤트 방식의 임의 지연 모델의 일예로써, 각 게이트의 지연 모델(delay value)은 각 게이트에서 G1은 2 시간단위(time unit), G3은 2단위, G2는 1단위의 게이트 지연(delay)이 있다고 가정하고, 입력은 무작위로 주어지며, 입력의 값은 두 가지 0, 1값을 사용하고 이벤트방식(Event-driven 형식)의 논리 시뮬레이션을 수행한다고 가정할 때, 이의 수행을 위한 시뮬레이터 알고리즘은 다음과 같다.
(a) 입력 TEST (GET A, B, C); 입력 이벤트 처리
(b) Net_D: 네트 D 단위 프로그램
(c) if new_value != net_value then 이벤트 처리(네트 검증) 단계
(d) PUSH Gate_G3; 네트 D의 연결 게이트
(Fanout Gates)
(e) goto WHEEL[current_time]->procedure 타이밍 휠
(f) endif
(g) POP GATE_QUEUE
(h) Gate_G3: 게이트 시뮬레이션 단계
(i) temp = net_D & net_E; 로직 기능 수행
(j) QUEUE_INDEX = (current_time + GATE_DELAY)
MOD Size_of_Queue
(k) PUSH net_O and temp onto
WHEEL[QUEUE_INDEX];
(l) goto Gate_Handler
상기 알고리즘은 기능상 네 부분으로 구별할 수 있는데, 첫째는 입력을 해석하여 주어진 벡터가 이벤트인지를 검증하는 (a)의 부분, 둘째는 네트 D에 해당하는 단위프로그램으로써 (b) 내지 (f)의 부분, 셋째는 각각의 게이트에 해당하는 단위 프로그램들로써 (h) 내지 (l)이며, 넷째는 (g) 내지 (l)부분의 컴파일된 프로그램(컴파일드 방식의 시뮬레이션)에서 게이트와 네트에 해당하는 단위 프로그램들을 관리 및 운영하는 스케쥴러이다. 여기서 회로의 네트 E도 상기 둘째부분과 유사한 구조로 구성되어 있으며, 전체 시뮬레이터는 네트 D 외에도 E, O에 해당하는 단위 프로그램으로 구성된다. 컴파일드 방식은 상기 종래의 기술에서 설명하였듯이 회로를 분석하여 시뮬레이터의 내부 구조로 표현하고 해석하여 최적화된 C 언어의 코드를 생성하여 도면을 검증하는 방식을 말한다.
수행 과정은 예제 회로에서 모든 입력 벡터에 의해 게이트 G1과 G2가 수행된다. 이후 게이트 G2의 출력에 의해 D의 값이 변화되어, 이를 상기 (c)에서 이벤트인지 검증하며, 이벤트인 경우, Fanout 게이트인 G3를 게이트 실행부에서 수행하도록 저장하여 상기 (h)에서 로직 기능을 수행한다.
시뮬레이터의 주요 구성 요소로는 이벤트(event)를 저장할 수 있는 타이밍휠(timing wheel)과 게이트 큐가 있는데 타이밍휠은 입력 단자의 값(A, B, C의 값)이나 게이트를 시뮬레이션한 후 게이트 출력 단자 값(네트 D, E, O의 값)을 저장하는 기능을 가진다. 타이밍휠의 크기는 시뮬레이터 내의 메모리를 절약하기 위하여 회로 상의 게이트 지연 값 중에서 가장 큰 값 더하기 1의 크기로 하며, 타이밍휠의 인덱스는 단위 시간을 의미한다.
도 27 내지 도 28은 상기 알고리즘을 수행하는 시뮬레이터의 구성 요소를 나타낸 것으로, 빗금친 부분은 현재 시간을 표시하며, 현재 시간이 휠의 크기보다 큰 경우는 MOD의 연산자를 이용하여 타이밍휠의 첫 번째를 다시 지정하여 사용한다. 즉, 예제 상의 현재 시간에 관한 휠의 표현은 "현재 시간 MOD 4"(wheel size)이다.
도 27에 있어서, 도 26의 입력 C의 변화에 따라 C를 입력으로 하는 게이트인 G2를 게이트 큐에 저장하여 단계 2에서 사용할 수 있도록 저장하며, 현재의 이벤트인 C를 제거한다. 현재 시간 0에 더 이상의 이벤트가 없는 경우, 게이트 검증 단계로 변경된다. 이는 단계 2로의 변경 조건이며, 이 단계에서는 게이트 큐에 저장된 것이 있는 경우, 이 게이트를 시뮬레이션하게 된다. 게이트 G2가 수행되며, 이의 출력인 네트 E의 값 1이 현재 시간 0 더하기 게이트의 지연값인 1의 휠 위치에 저장되어 다음의 네트 검증 단계에서 처리된다. 단계 3에서 표현된 것과 같이, 네트 E가 휠의 시간 1에 저장되며, 이때 네트의 현재의 값과 게이트 시뮬레이션 값들이 저장되고, 더 이상의 게이트가 없으면 현재 시간이 증가되고 네트 검증 단계인 단계 3이 수행된다. 단계 3에서는 단계 1과 같이 네트의 값을 비교하여, 다른 경우 이 네트를 입력으로 하는 게이트 G3 를 게이트 큐에 저장하여 위의 단계 1과 단계 2를 수행한 것과 동일한 방법으로 진행한다.
도 28에 있어서, 단계 5 내지 6과 같이 저장되어 있는 네트나 게이트가 없는 경우에는 단지 각 네트와 게이트 시뮬레이션 단계를 반복하며, 현재 시간만을 증가시킨다. 단계 9를 행하여 더 이상의 이벤트나 게이트가 없으면 도 27의 단계 1에서 주어진 입력에 대한 시뮬레이션이 종료되게 된다.
이와 같이, 현재의 로직 시뮬레이션은 네트 검증 단계와 게이트 실행 단계를 반복 수행하여 각각의 큐에 저장된 것이 없으면 하나의 입력의 시뮬레이션을 종료하게 되며, 필요한 출력을 수행하게 된다.
상기한 바와 같이 여러 방법을 통하여 좀 더 빠르고 정확한 시뮬레이션을 위한 방법들이 고안되어 사용되고 있으나 이는 대부분 소프트웨어적인 프로그램의 분석에 의한 방법으로, 분석을 위해 여전히 많은 시간이 소요되고 있다.
본 발명은 상기한 종래 기술의 문제점을 해결하기 위하여 안출된 것으로서, 반도체 회로 도면의 기능 검증을 위하여 하드웨어적인 방법과 이에 최적화된 소프트웨어적인 방법을 병용함으로써 종래의 기술에 비하여 매우 빠른 검증이 가능토록 하는데 있다.
상기 목적을 달성하기 위하여, 본 발명에 따른 반도체 소자의 설계 검증을 위한 고속 병렬 시뮬레이션 방법은 하드웨어적인 병렬처리와 이에 따른 개선된 소프트웨어를 적용하여 보다 빠르게 회로를 검증하는 것을 특징으로 한다.
이하, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 본 발명의 기술적 사상을 용이하게 실시할 수 있을 정도로 상세히 설명하기 위하여, 본 발명의 가장 바람직한 실시 예를 설명하기로 한다.
반도체 회로 도면의 로직 검증을 이벤트 방식의 처리 프로그램은 입출력의 처리, 이벤트처리 프로그램의 수행, 시뮬레이션프로그램의 수행 및 시뮬레이션시간, 시간의 증가, 시뮬레이션의 종료를 관리하는 메인프로그램으로 구성된다. 특히, 메인프로그램은 이벤트와 게이트시뮬레이션의 스케쥴링을 처리하는 타이밍휠의 관리를 담당하는 역할을 할 뿐 아니라, 타이밍 휠 및 스케쥴링이 시뮬레이션의 성능을 좌우한다. 그 이유는 스케쥴링의 횟수, 게이트 시뮬레이션의 프로그램의 수행을 위한 준비 작업과 해당 이벤트 처리프로그램의 수행을 위한 사전 준비 작업이 실제 게이트 시뮬레이션과 이벤트처리 프로그램의 수행 횟수보다 많기 때문이다.
본 발명에서 적용하는 PC-set(Potential Change Set) 알고리즘은 임의지연 시뮬레이션과 단위지연(Multi-delay and Unit-delay Simulation)에 적용하기 위하 여 레벨기법을 이용하고, 정적인 스케쥴링 기법을 사용한다. 정적 스케쥴링 기법을 사용하기 위하여 필요한 기술적인 기법은 시뮬레이션 시간을 결정하는 것이다.
시뮬레이션의 결정 방법은 레벨을 결정하는 것과 유사한 방식에 따라 결정되는데, 시뮬레이션의 시간을 결정하는 이유는 각각의 네트가 회로 내부에서 시뮬레이션이 수행될 가능성이 있는 시간을 추출하는 것이다.
레벨을 결정하는 방법과 유사하게, PC-Set의 계산은 입력단자로부터 시작한다. 입력단의 입력이 변화(이벤트의 발생) 가능성이 t=0이기 때문에 각각의 입력단의 PC집합의 값은 {0}이 된다. 임의지연모델은 단위지연모델(delta = 1)을 포함하기 때문에 단위지연모델을 포함하기로 하여 각각의 게이트 지연을 D로 정의하기로 한다. 만일 게이트의 입력이 시간 t에서 변경되었을 경우, 출력은 t+D시간에 변경될 가능성이 있다. 또한, 모든 입력이 시간 t에서 변경이 없었다면 출력 t+D에서도 변경 없이 같은 값을 가지게 된다. 게이트 출력의 PC-set을 계산하기 위하여서는 게이트 입력의 PC-set을 알 필요가 있다.
도 29에서와 같은 방법으로 회로내의 게이트, 네트의 PC 집합을 구하여 결정한다. Wired-OR 연결이나 한 소스보다 많은 방법으로 연결되는 네트는 게이트와 네트의 PC-set을 동시에 이용하여 계산하여 구할 수 있다. 만일 네트가 두 개 이상의 게이트에 의하여 구동된다면, 해당 네트의 PC-set은 집합론의 유니온(union) 기능에 의하여 구할 수 있다.
도 30은 이러한 방법에 대한 예제이며, 게이트의 PC-set은 시뮬레이션 프로그램을 생성하는 데 사용된다.
여기서, 게이트와 네트의 PC-set은 동적 시뮬레이션을 위한 요소로 사용되지만, 게이트의 입력네트가 변환될 수 있는 시간을 모두 포함하기 위하여서는 추가 작업이 수행되어야 한다.
도 31의 예제에서 볼 수 있듯이, 게이트의 PC-set 중에 "4"의 인자가 있다. 이것은 t=4에서 게이트가 시뮬레이션을 수행할 필요가 있음을 의미한다. 따라서 게이트가 시뮬레이션을 하기위하여서는 t=3의 입력 네트의 값을 사용하게 된다. 하지만, 게이트의 다른 입력 네트의 값은 t=7일 때까지 새로운 값이 필요하지 않다. 그러므로 t=4의 네트 입력값은 이전 입력값(previous input vector)에서 구하여야 한다. 이와 같은 경우에 "zero 삽입(zero insertion)" 태그가 사용되어 이전의 입력값을 보존하는 네트를 정의하고, 동 네트에 PC-set의 인자에 "0"을 추가하게 된다.
도 33은 PC-set의 일예와 "0"삽입 보정의 일예를 나타낸 것으로, 보정된 PC-set의 요소 "0"는 회로 도면을 따라서 전파되지 않는다. 회로의 네트에서 "0"가 삽입되는 경우는 단지 게이트 G의 입력이 2개 이상이며, 게이트 G의 PC-set의 가장 작은 요소값(set의 element)이 입력네트의 PC-set의 가장 작은 요소 값보다 큰 경우에 해당한다.
도 32는 이와 같은 방법을 보여주는 PC-set의 "0"삽입 룰(rule)의 알고리즘을 나타낸다.
상기 PC-set을 이용한 시뮬레이션 코드의 생성은 첫 번째, 네트의 값을 위한 변수를 생성하는 것이다. 각 네트를 위하여 변수 어레이(set of variables)가 생성 되며, 더불어 "0" 삽입 룰에 의한 변수도 생성한다.
도 34는 상기 변수 어레이가 생성된 예제를 나타낸 것으로, 생성된 변수의 이름은 N_k의 형태를 갖추고 있으며, N은 네트의 이름을, k는 PC-set의 요소를 표현한다.
상기 변수 N-k는 게이트의 PC-set이 시뮬레이션 수행 프로그램을 생성하는 데 사용한다. 게이트의 분석은 레벨의 순서에 의하며 처리되며, 게이트 시뮬레이션의 구문의 수는 게이트의 PC-set의 요소 개수만큼 생성된다. 각 시뮬레이션 구문은 게이트의 입력 네트의 값을 가져와서 수행한다. 각각의 입력 네트는 PC-set의 가장 큰 요소의 값을 선택하여 입력값이 선정된다. "0"삽입은 PC-set의 가장 큰 요소값이 있음을 보장한다.
도 35는 시뮬레이션 코드의 생성을 위한 알고리즘을 나타낸 것으로, 알고리즘이 모든 게이트가 두 개의 입력을 갖는 AND 게이트인 경우를 예제로 한 이유는 설명을 간략히 하기 위함이고, 다른 형태의 게이트를 위한 방법도 유사한 절차를 거쳐서 수행할 수 있다.
여기서, PC-set은 비록 임의지연 모델을 지원하지만, 주로 단위지연 모델에 적합한 구조와 이론으로써, 상기 종래의 기술에서 설명한 바와 같이 단위지연모델은 제로지연모델에 비하여 회로의 특성을 표현하는 데 장점이 있지만, 아직도 복잡한 회로의 상태나 정확한 기능의 검증에는 문제가 있다. 따라서 복잡한 회로 상태를 검증을 위하여 임의지연 모델을 사용하게 되며, PC-set 또한 개선된 형태의 EPC-set(Enhanced or Extended PC-set)를 적용한다.
상기 EPC-set 알고리즘은 게이트 당 3가지 순서 요소(ordered element)를 가진 집합으로 표시한다. 첫 번째 요소는 상기 PC-set의 의미와 같고, 둘째와 셋째의 요소는 게이트에 도달하는 신호의 경로 최소값과 최대값을 의미한다. PC-set 요소 값이 의미하는 바는 입력(Primary Input)에서부터 동 게이트나 네트까지 도달하는 신호의 경로 - 즉 게이트의 수-를 의미한다.
도 36은 EPC-set의 일예이다.
EPC-set알고리즘은 입력네트(Primary Input)에 값 {(0,0,0)}를 지정하는 것으로부터 시작한다. 상기 PC-set을 구하는 방법과 같이, EPC-set은 게이트의 모든 입력네트의 EPC-set가 정의되고 나서 게이트의 요소들이 정의된다. 게이트의 EPC-set은 먼저 입력네트들의 EPC-set의 합집합 동작(Union)으로 계산한다. 만일 입력네트들 중의 EPC값에서 첫 번째 요소가 같으면, 하나의 값만을 인정하고 나머지는 제거한다. 하지만 두 번째 요소는 같은 첫 번째 요소 중에서 두 번째 요소들 중에서 최소값을 선택하여 지정한다. 마찬가지 방법으로 세 번째 요소는 같은 첫 번째 요소 중에서 세 번째 요소들 중에서 최대값을 선택한다. 첫 번째 요소가 중복된 것을 다 처리하고 나면, EPC-set의 첫 번째 요소는 1을 증가시키고, 두 번째와 세 번째 요소는 게이트의 지연값 만큼 증가시키면 해당 게이트의 EPC-set은 구해진다.
표 1은 도 36의 예제의 EPC-set을 구하는 알고리즘을 각 단계 별로 설명한 것이다.
단계 1 | 단계 2 | 단계 2 | 단계 3 | 단계 3 |
A - {(0,0,0)} B - {(0,0,0)} C - {(0,0,0)} D - {(0,0,0)} E - {(0,0,0)} | G1 - {(1,1,1)} G2 - {(1,2,2)} G3 - {(1,3,3)} | I1 - {(1,1,1)} I2 - {(1,2,2)} I3 - {(1,3,3)} | G4 - {(1,1,1), (1,2,2), (1,3,3)} | Q - {(2,5,7)} |
G4 - {(1,1,3)} | ||||
G4 - {(2,5,7)} |
이와 같이 모든 EPC-set들이 계산된 후에, 필요한 비트필드의 폭을 다음의 수식 1을 이용하여 계산한다.
[수식 1]
Wi = Mi - mi + 1
여기서, i는 PC-set의 값, Mi는 최대지연길이, mi는 최소길이를 뜻한다.
상기의 연산에 의하여 생성되는 W의 값중에서 최대값이 시뮬레이션을 위하여 사용되는 비트필드의 크기가 된다. 고정된 비트필드의 크기가 시뮬레이션을 수행하는 데 간단하고 처리하기 쉽기 때문에 모든 네트와 게이트는 이 비트필드를 사용한다.
비트필드의 크기와 더불어 네트의 정렬은 시뮬레이션의 기본 요건에 해당된다. 네트의 정렬은 시간과 밀접한 상관관계가 있기 때문이다. 네트의 이벤트를 처리할 때, 시뮬레이터의 현재시간을 기준으로 EPC-set의 값으로 사용한다. 따라서 네트는 EPC-Set의 최소 지연값(d)에 따라 정렬되며, 새로운 네트의 값이 비트필드에 저장된다.
그러나 이러한 절차에는 문제점이 있다. 만일 현재 네트의 정렬된 시간이 현재의 시간보다 크다면, 시프트동작에 의하여 과거의 값을 생성해야 되는 문제점이 있다. 그러나, 과거의 정보를 생성하는 것은 불가능하기 때문에, EPC-set 알고리즘은 새로운 요소로써 k값을 추가하였으며, 각각의 k값은 다음 수식 2와 같은 의미를 갖는다.
[수식 2]
ki = min({ mj | j < i})
여기서 ki 값은 PC-set 값에 따라 증가하는 값을 가진다. 마찬가지로, 만일 i>j, Mi < Mj의 상태가 되면 문제점이 발생된다. 즉, 시간 j에서 이벤트가 발생하게 되면, 시간 i의 비트필드에서 없어질 가능성이 있다. 따라서 왼쪽으로 시프트를 하게 되면 j의 정보가 없어지게 된다(좌측시프트의 문제). 이를 해결하기 위하여 EPC-set알고리즘은 새로운 요소 Mi를 이용하여 방지하게 되며 수식 3과 같이 표현된다.
[수식 3]
Ki = max({ Mj | j < i})
k와 K값의 계산과 처리를 위하여 다음의 표 2를 이용하면 쉽게 알 수 있다. 각각의 줄은 하나의 EPC-Set값을 예시하고 있으며, k와 K값이 추가 되어 있다.
PC | m | M | k | K |
1 | 2 | 2 | 2 | 2 |
2 | 7 | 9 | 5 | 9 |
4 | 5 | 6 | 5 | 9 |
8 | 6 | 10 | 6 | 10 |
9 | 8 | 9 | 8 | 10 |
회로의 네트와 게이트를 시뮬레이션을 수행할 때는 고정된 비트필드의 크기를 사용하여 시프트기능을 이용하여 시간과 네트의 값을 표현한다. 게이트 시뮬레이션이 수행하는 경우에 게이트의 입력네트의 비트필드는 값 ki로 정렬되어야 한다. 이와 같은 정렬은 "path-tracing"알고리즘에 의하여 정렬되어 좌측 시프트를 없앨 수 있다.
상기 Path-tracing 알고리즘은 회로의 출력단과 연결된 게이트로부터 시작하여 입력단 방향으로 처리를 수행한다. 각각의 PC 값 i - EPC-set의 첫 번째 요소 - 에 대하여 ki값 중에서 i-1의 PC값이 작은 것을 구분한다. 이때, 좌측 시프트를 피하기 위하여 EPC-set의 k값은 ki-d보다 작거나 커야 한다(d는 게이트의 지연값). 이러한 조건의 k값이 아닌 경우에는 이 조건을 만족시키기 위하여 EPC-set의 요소값은 ki-d의 값으로 지정한다. 이와 더불어, 비트필드의 크기가 확장되는 것을 막기 위하여, K값은 같은 값으로 축소된다. 이것은 상위비트의 값을 잃어버리는 것 같아 보이지만 실제로는 그렇지 않다. 모든 비트필드의 크기가 동일하기 때문에, 그리고 EPC-set의 m과 M값이 게이트의 입력네트들에서 전파되기 때문에 새로운 Ki는 입력네트의 모든 이벤트를 보유할 수 있다.
도 37은 Path Tracing 알고리즘의 예제를 나타낸 것으로, "Path Tracing" 알고리즘은 출력단 Q에서부터 k와 K값을 가지고 수행한다. 출력 네트 Q와 게이트 G4 의 정렬은 t=5값으로 되어 있고(표 1 참조), 게이트 G4의 입력네트들 - G4의 k에서 지연값을 뺀 결과인 t=1로 정렬된다. 반면에 I2과 I2 네트의 k값은 변동되지 않지만, I3의 값은 좌측 시프트 동작을 피하기 위하여 변동되어야 한다. 따라서 I3의 k값은 1로 변환하여 한다. 이 변환된 동작은 G3의 입력네트인 입력단 E로 전파되어 E의 k값을 -2로 변환하게 된다.
특정한 시간 i에 대한 k값에 대한 조정은 복잡하다. 즉 t=i에서 한개의 EPC-set가 변경되고 나머지의 EPC-set값이 다른 네트들로 구성된 게이트라면, 다른 네트들의 값 중에서 i와 같거나 작은 값을 찾아야 한다. 또한 EPC-set요소중에서 k값이 변경되면, 이 시간보다 앞 시간에 해당하는 요소들이 변경되어야 k값이 감소되지 않는 성질이 유지된다. 따라서, EPC-set을 이용한 시뮬레이션 알고리즘은 다음과 같이 표현될 수 있는데, 이벤트 처리 시뮬레이션 방식에서 입력값을 갖는 프로그램과 출력하는 프로그램은 동일하며 변경된 부분만을 표기한 것이다.
Gate_simulation Program: 게이트 시뮬레이션 프로그램:
1. Locate EPC-set at time=i
2. A = k value of EPC-set
3. for all Input net if alignment != A
Align N = A;
4. R = Simulation function of all Input
5. Scheduling Event with R
Process_Event Program: 이벤트 처리 프로그램:
1. Locate EPC-set at time=i of net N
2. A = k value of EPC-set
3. Align N = A
4. Event = Compare N with R
5. If event = 0 discard
else copy N=R
6. Scheduling the fan-out Gate
표 3은 상기의 EPC-set과 Path Tracing을 이용한 MDP(Multi-delay Parallel) 시뮬레이션을 수행한 결과이다.
Circuit | 기존 방법 (인터프리티브) | MDP 시뮬레이션 | ||
소요시간 | 비트필드 크기 | 성능개선율 | ||
C432 | 30.0초 | 14.1초 | 8 | 2.1배 |
C499 | 30.1초 | 14.6초 | 3 | 2.1배 |
C880 | 50.2초 | 32.9초 | 8 | 1.5배 |
C1355 | 107.0초 | 62.0초 | 4 | 1.7배 |
C1908 | 206.2초 | 115.9초 | 13 | 1.8배 |
C2670 | 222.0초 | 139.2초 | 11 | 1.6배 |
C3540 | 373.0초 | 208.3초 | 18 | 1.8배 |
C5315 | 595.4초 | 367.2초 | 12 | 1.6배 |
C6288 | 5666.4초 | 2663.5초 | 5 | 2.1배 |
C7552 | 962.7초 | 573.1초 | 14 | 1.7배 |
여기서 시뮬레이션의 수행은 SUN Workstation을 사용하였고 예제회로는 벤치마크 테스트를 위한 IEEE 협회에서 제공하는 ISCAS-85 조합회로 예제를 사용하였다. 본 회로는 십여 년간 벤치마크를 위하여 사용되어 왔기 때문에 연구 및 개발자간의 성 능비교를 위하여 좋은 예제가 된다.
상기 PC-set과 "0"삽입 룰의 시뮬레이션 방법은 이벤트기반의 동적 스케쥴링방식(혹은 oblivious방식)의 시뮬레이션이다. 이 방법의 최대 장점은 여러 개의 입력값을 (PI값)을 하나의 워드(word)로 조합(packing)하여 동시에 시뮬레이션을 수행할 수 있다는 것이다. 만일 시뮬레이션 입력값과 다음 입력값사이의 연관성이 없다면 일반적인 입력값의 조합은 가장 이상적인 방법이 될 수 있다. 그러나 임의지연모델이나 단위지연모델에서는 연관성의 고려가 절대적이기 때문에 연속된 입력값간의 연관성을 반드시 고려하여야 한다. 즉 정적 및 동적 해저드(static and dynamic hazards)의 검색은 연속된 입력값의 분석으로 가능하기 때문에 연속된 입력값 사이의 연관성이 필수적이다.
도 38은 상기와 같은 문제점을 설명하기 위하여 회로도면에 다음의 순서와 같은 16개의 입력값(A, B, C, ..., N, O, P)을 부가하여 수행하였다고 가정하고, 예제를 간략히 하기 위하여 각 워드의 길이가 4비트로 구성할 경우의 일반적인 벡터(즉, 입력값)의 조합하는 방법을 설명한 것으로, 4개의 입력값이 하나의 워드로 구성되어 있는 경우, 입력값 F는 이전의 입력값이 E가 아니라 입력값 B가 되기 때문에 연속된 입력값의 관계가 유지 될 수 없다. 따라서 도 37의 예제 회로와 같이 일반적이고 수평적인 입력값의 조합은 입력값간의 연관성을 보존할 수 없기 때문에 도 38과 같은 수직적인 방식의 입력값을 사용하게 된다.
그러나, 아직도 문제점을 가지고 있는데, 그 이유는 입력값 D와 E의 관계, 즉 (D, E), (H, I), (L, M)의 연속적인 연관성을 보존할 수 없다.
도 39는 이러한 문제를 해결하기 위하여 초기에 입력값을 추가하여 도 38의 연속적인 연관성 문제를 해결한 것을 나타내는 것으로, 입력값 패킹 방식은 시뮬레이션 처음에 입력값 간의 연관성을 유지하기 위한 초기 입력값을 생성하여 수행하고 나서, 실제의 입력값을 수행하는 단계를 거치게 된다.
실제의 시뮬레이션을 수행하는 시스템의 워드 크기는 32비트이기 때문에 매 32개의 입력값(vector)마다 추가로 1개의 입력값을 생성하여 시뮬레이션을 수행한다. 따라서 도 39와 같이 입력값을 패킹함으로써 시뮬레이션의 수행 시간은 약 32배만큼 빠르게 수행할 수 있다.
상기한 본 발명의 시뮬레이션 기법은 도면 한 개의 게이트 당 수개의 게이트시뮬레이션 프로그램이 필요하다. 이와 같은 추가의 게이트 시뮬레이션 프로그램은 SoC나 대형의 VLSI도면의 처리에는 심각한 시간이 소모된다. 이러한 시간소모를 줄이기 위하여 상기 본 발명의 시뮬레이션 방법에 더하여 병렬처리 방법을 고안하였다.
상기한 병렬처리 방식은 워드의 각 비트는 시뮬레이션의 단위시간을 나타내며, 워드의 LSB는 최소 시간을, MSB는 시뮬레이션의 최대 시간 정보를 가지고 있고, 각 비트는 시뮬레이션 결과값을 가지고 있다.
도 40은 상기한 워드의 구조를 나타낸 것으로, 각 비트의 위치가 시간을 나타내고 있으며, LSB(비트 0)의 위치로부터 시간 t로 시작하여, 다음 자리는 t+1등의 관계로 시간을 나타내고 있다. 시뮬레이션의 시간은 워드 단위보다는 비트필드(bit-field)의 크기로 표현되며, 비트필드의 크기는 회로 도면의 분석으로 그 크기 (M+1)가 결정된다. 여기서 M값은 회로 도면의 분석 결과에서 각 네트 정보가 가지고 있어야하는 시간별 네트값을 비트 크기로 표시한 것으로써, 하나의 벡터 입력을 시뮬레이션 할 때 필요한 비트의 크기이다.
도 41은 게이트 시뮬레이션의 병렬처리 방법의 일예로써, 예제회로에서 보인 바와 같이 8비트 크기의 AND기능을 입력과 출력으로써 보여 주고 있으며, 2개의 입력을 가지는 AND게이트로써 두 개의 입력 네트의 값은 t=0로부터 설정되어 있고, 출력은 게이트의 지연(d=1)을 거친 후 게이트 기능의 시뮬레이션 결과가 출력 네트에 t=1로 시작되어 표기된다. 각각의 비트는 해당하는 시간의 AND기능 결과를 표기한다. 따라서 시뮬레이션이 수행되고 난 후에는 비트필드를 재조정할 필요가 있다. 즉, 비트단위의 AND을 수행하고 나서, 모든 비트의 값을 좌측으로 시프트(shift)하여 시작 시간을 t=0으로 조정해야 할 필요가 있다. 여기서 t=0의 값은 현재 시뮬레이션의 입력 벡터값이 입력되는 시간을 의미하기 때문에, 시프트 기능으로 말미암아 LSB의 위치에 인가되는 값은 t=-1에 해당하는 이전 입력 벡터값의 결과가 된다.
그렇기 때문에 회로 도면의 모든 네트의 비트필드의 값을 시뮬레이션 수행할 때 마다 초기화하여야 하고, t=0의 위치에 이전 입력에 대한 값을 저장해두고, t=0이외의 위치는 네트값 "0"으로 초기화한다.
도 42는 상기의 좌측으로 시프트되는 비트필드의 조정 시뮬레이션을 나타낸다.
게이트 시뮬레이션 프로그램은 레벨순서에 따라 게이트마다 1개씩 생성된다. 게이트 시뮬레이션 프로그램이 수행되기 이전에 입력포트의 초기화 및 네트값의 초 기화를 수행한다. 입력포트(PI : Primary Input)의 경우, 시뮬레이션의 입력값(입력 벡터)은 모든 비트의 위치로 확장되어 입력값이 지정되는 반면, 회로의 내부 네트값은 이전 입력 벡터를 이용하여 수행한 네트의 최종 결과값이 네트의 LSB위치에 초기화된다. 즉, 입력네트가 아닌 회로의 내부 네트와 출력네트의 초기화 방법은 비트필드의 MSB값을 시프트 동작에 의하여 LSB로 이동하면 된다. 왜냐하면, 비트필드의 MSB위치에는 시뮬레이션의 최종값이 저장되어 있기 때문이다.
입력네트의 경우에는 다른 방법을 사용한다. 이는 입력네트는 t=0일때 네트값이 설정되며, 이 입력을 이용한 시뮬레이션 동안에는 값이 변화하지 않는다. 따라서 비트필드의 각 비트의 값은 동일한 값을 가진다.
도 43은 병렬처리 방법을 이용한 시뮬레이션의 간단한 예제를 나타낸 것으로, 병렬 시뮬레이션의 동작 설명을 위하여 이 회로가 이미 입력값(입력벡터) A=0, B=1, C=1을 이용하여 수행하였다고 가정하고, 새로운 입력값 (A=1, B=1, C=0)을 이용하여 시뮬레이션 하고자 한다. 이 회로의 비트필드의 크기 "M"은 2로써, 최대 비트필드의 크기는 3이면 가능하다. 비록 더 큰 비트필드를 사용한다하더라도 3번째 이후의 모든 비트의 값은 동일한 값을 갖기 때문에 큰 의미가 없다.
도 44는 네트의 초기값과 예제회로에서 1단계에 해당하는 AND 게이트의 회로 동작을 비트필드의 위치에 따른 네트값의 변화와 시뮬레이션 결과를 보여 주고 있다. 또한 OR게이트의 시뮬레이션 결과 정적인 해저드(static hazard)를 현상을 찾을 수 있다.
도 45는 예제회로의 생성된 시뮬레이션 코드를 나타낸 것으로, 이 생성된 코 드는 입력값을 읽고, 변수의 하위 자리에 해당하는 입력을 저장한다.
상기의 방법에 있어서, 시프트 동작을 제거하게 되면 시뮬레이션의 수행이 더욱 개선되며, EPC-set과 Path-Tracing 알고리즘을 사용하여 비트 필드의 정렬과 좌측 시프트의 문제를 제거할 수 있다.
이와 같은 본 발명에서의 하드웨어적 구현과 최적의 동작을 위한 소프트웨어는 입력 테스트 기능 하드웨어 장치, 게이트 시뮬레이션 하드웨어 장치, 이벤트 처리 하드웨어 장치 및 초기와 장치의 4개의 기본 기능 블록으로 구성된다.
도 46은 이러한 하드웨어 가속기(Hardware Accelerator)의 전체 구조를 나타낸 것이며, 이의 동작을 위해서는 상기한 병렬처리기법(MDP 방법)을 사용하여 내부 동작을 수행한다.
도 47은 상기 하드웨어 가속기의 내부자료 구조를 나타낸 것으로써, 가속기의 동작을 위한 기본정보는 게이트, 네트 및 이들 사이의 연결정보가 주어져야 한다. 이 기본정보를 표현하는 데 사용하는 자료 표현 기법은 디스크립터(descriptor)를 사용한다. 시뮬레이션 기능을 수행하기 이전에 호스트 컴퓨터는 반도체 도면 분석의 결과로 디스크립터들을 생성하여 하드웨어가속기의 메모리에 저장하게 된다. 반도체 도면의 게이트와 네트 마다 하나의 디스크립터가 생성된다.
상기 하드웨어 가속기와 호스트 컴퓨터와의 인터페이스는 메모리 기반의 큐 동작을 이용하여 데이터의 교환과 시뮬레이션의 시작과 종료를 수행한다. 하드웨어가속기와 호스트 컴퓨터는 호스트 큐를 이용하여 동작하고, 가속기의 내부에서는 별도의 범용 큐(universal queue)를 이용하여 동작한다.
상기 호스트 컴퓨터는 입력단의 네트값을 호스트 큐를 사용하여 가속기에 전달하게 된다.
도 48은 상기 호스트 큐의 데이터 전달 동작을 나타낸 것으로, 호스트 큐는 입력단의 이전 값, 현재 값 및 네트디스크립터의 포인터의 세 요소로 구성되며, 호스트 컴퓨터가 데이터를 저장한 후에 하드웨어가속기로 전달되어 시뮬레이션을 수행하게 된다. "Qstart"와 "Qend"는 전달되는 정보의 시작과 끝을 지정하여 전달하게 된다.
도 49는 하드웨어 가속기의 범용 큐와 내부 장치간의 동작을 나타낸 것으로, 범용 큐의 동작은 호스트 큐의 동작과 비슷하며, 큐의 시작과 끝을 "Qgate" 및 "Qnet"의 포인터를 이용하여 큐 내의 정보의 시작과 마지막을 지정하여 게이트시뮬레이션 장치와 이벤트처리 장치간의 정보 전달의 메카니즘으로 사용하고, 게이트 시뮬레이션 장치와 이벤트처리 장치(네트처리장치)는 범용 큐를 이용하여 게이트 시뮬레이션의 수행 결과로 발생하는 네트의 이벤트를 큐를 이용하여 전달한다.
이벤트 처리장치 역시 동일한 방법으로 네트 이벤트 처리 후 발생하는 fanout 게이트들을 큐를 이용하여 게이트 시뮬레이션 장치에 전달하게 되며, 시뮬레이션의 종료는 이 범용 큐에 저장되는 데이터가 없으면 더 이상 처리 할 것이 없기 때문에 종료 절차를 수행하게 되고, 호스트 컴퓨터에 인터럽트를 발생하게 된다.
도 50은 도 46의 로직 시뮬레이션을 위한 하드웨어 가속기의 전체 구조 중 게이트 시뮬레이션 장치, 네트 검증(이벤트 처리) 장치 및 초기화 장치의 기본 구 조를 나타낸 것으로, 이 세 가지 장치의 구조는 동일하며, ROM의 프로그램과 SUBCIRCUIT의 구조에 따라 동작이 세가지로 분리되어 동작한다. 즉, 게이트시뮬레이션 장치는 SUBCIRCUIT와 FIRMWARE가 게이트 기능 수행과 수행 결과를 범용 큐에 저장하는 것을 담당하는 회로로 구성되어 있으며, 네트 검증(이벤트처리) 장치는 범용큐에 있는 네트의 값 처리와 네트와 연결된 게이트의 처리 및 범용큐에 이벤트 처리 결과를 저장하여 시뮬레이션이 지속되도록 하는 장치로 구성되고, 초기화 장치 또한 동일한 구조로 구성되어 있으며, 하나의 시뮬레이션이 종료되면 이전의 네트값, 정렬값 및 초기값을 원위치하여 다음의 시뮬레이션이 수행 될 수 있는 기능을 위의 기본적인 구조를 사용하여 수행한다.
그리고, 상기 하드웨어 가속기의 전체 구조 중 입력장치는 입력단의 값을 호스트큐로부터 처리하여 범용큐에 연결하는 역할과 처음의 이벤트처리 장치가 수행할 수 있는 기능을 담당하며, 회로의 구조가 위의 세가지처럼 복잡하지 않기 때문에 단순한 비교기 및 레지스터로 구성되어 있다.
이상과 같이 본 발명에 따른 반도체 소자의 전압 강하 및 전력 소모 값의 분석 방법에 있어서, 본 명세서에 개시된 실시 예와 도면에 의해 본 발명은 한정되지 않으며 그 발명의 기술사상 범위내에서 당업자에 의해 다양한 변형이 이루어 질 수 있으며, 이는 본 발명의 권리범위에 포함되는 것으로 해석되어야 한다.
상기한 바와 같은 반도체 소자의 설계 검증을 위한 고속 병렬 시뮬레이션 방법에 있어서 하드웨어 가속기 및 최적화된 소프트웨어를 적용함으로써 반도체 소자의 설계 검증 속도를 높일 수 있으며, 실 예로 ISCAS-85 벤치마킹용 회로인 C432.CKT회로를 사용하고, 본 하드웨어가속기를 25MHz기반으로 동작하는 경우 초당 523,000개의 이벤트를 처리할 수 있는 능력을 보유하고 있으며, 이는 초당 905,000게이트를 처리할 수 있다. 이 하드웨어가속기는 HDL을 이용하여 구현하고 검증하였으며, 네트 디스크립터가 32비트로 표현가능하기 때문에 최대 처리 능력은 초당 16,730,000이벤트(초당 29,000,000게이트)가 가능하므로, 표 3에서 비교되었던 모든 벤치마킹용 회로를 1초이내에 처리할 수 있으며, 이는 소프트웨어를 이용한 검증과 비교하여 최대 5,600배 이상의 수행 속도를 가지게 된다.
Claims (9)
- 반도체 소자의 설계 검증을 위한 분석 방법에 있어서,EPC-set 알고리즘과 Path-Tracing 알고리즘을 적용하여 이벤트 방식의 시뮬레이션을 병렬 처리하는 소프트웨어에 의한 분석 방법과 하드웨어적으로 설계된 가속기를 적용하는 고속의 병렬 시뮬레이션 방법.
- 제 1항에 있어서,상기 EPC-set 알고리즘은 입력 네트들의 값에서 첫 번째 요소가 같으면, 하나의 값만을 인정하고 나머지는 제거하며, 두 번째 요소는 같은 첫 번째 요소 중에 서 두 번째 요소의 최소값을 선택하여 지정하고, 세 번째 요소는 같은 첫 번째 요소 중에서 세 번째 요소의 최대값을 선택하고, 중복된 첫 번째 요소가 다 처리되면 EPC-set의 첫 번째 요소는 1을 증가시키고 두 번째와 세 번째 요소는 게이트의 지연값 만큼 증가시켜 해당 게이트의 EPC-set값을 구하는 반도체 소자의 설계 검증을 위한 분석 방법.
- 제 1항에 있어서,상기 Path-Tracing 알고리즘은 회로의 출력단과 연결된 게이트로부터 시작하여 입력단 방향으로 처리를 수행하며, 좌측 시프트로 인해 발생하는 과거의 정보가 소멸되지 않고 EPC-set 알고리즘에 적용될 수 있도록 해주는 반도체 소자의 설계 검증을 위한 분석 방법.
- 제 1항에 있어서,상기 하드웨어 가속기는 입력 테스트 기능, 게이트 시뮬레이션, 이벤트 처리 및 초기화 장치로 구성되는 반도체 소자의 설계 검증 방법.
- 반도체 소자의 설계 검증을 위한 분석에 있어서,입력 테스트부, 게이트 시뮬레이션부, 이벤트 처리부 및 초기화부를 포함하여 구성된 하드웨어 가속 장치.
- 제 5항에 있어서,상기 입력 테스트부는 분석 대상 회로의 입력단의 값을 호스트 큐로부터 처리하여 범용 큐에 연결하는 역할과 처음의 이벤트 처리 장치가 수행될 수 있도록 하여주는 하드웨어 가속 장치.
- 제 5항에 있어서,상기 게이트 시뮬레이션부는 부속회로와 펌웨어가 게이트 기능을 수행하고, 수행된 결과를 범용 큐에 저장되도록 하여주는 하드웨어 가속 장치.
- 제 5항에 있어서,상기 이벤트 처리부는 범용 큐에 있는 네트값의 처리와, 네트와 연결된 게이트의 처리 및 범용 큐에 이벤트 처리 결과를 저장하여 시뮬레이션이 지속되도록 하여주는 하드웨어 가속 장치.
- 제 5항에 있어서,상기 초기화부는 하나의 시뮬레이션이 종료되면 이전의 네트값, 정렬값 및 초기값을 원위치하여 다음의 시뮬레이션이 수행될 수 있도록 하여주는 하드웨어 가속 장치.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020040117803A KR100594593B1 (ko) | 2004-12-31 | 2004-12-31 | 반도체 소자의 설계 검증을 위한 고속 병렬 시뮬레이션 방법 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020040117803A KR100594593B1 (ko) | 2004-12-31 | 2004-12-31 | 반도체 소자의 설계 검증을 위한 고속 병렬 시뮬레이션 방법 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR100594593B1 true KR100594593B1 (ko) | 2006-06-30 |
Family
ID=37183367
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020040117803A KR100594593B1 (ko) | 2004-12-31 | 2004-12-31 | 반도체 소자의 설계 검증을 위한 고속 병렬 시뮬레이션 방법 |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR100594593B1 (ko) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR19980032933A (ko) * | 1996-10-17 | 1998-07-25 | 레이몬드 케이. 오스트비 | 에뮬레이션 및 시뮬레이션을 이용한 설계 검증 방법 및 장치 |
KR20000029237A (ko) * | 1998-10-23 | 2000-05-25 | 어드밴테스트 코포레이션 | 반도체 집적 회로 평가 시스템 |
-
2004
- 2004-12-31 KR KR1020040117803A patent/KR100594593B1/ko not_active IP Right Cessation
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR19980032933A (ko) * | 1996-10-17 | 1998-07-25 | 레이몬드 케이. 오스트비 | 에뮬레이션 및 시뮬레이션을 이용한 설계 검증 방법 및 장치 |
KR20000029237A (ko) * | 1998-10-23 | 2000-05-25 | 어드밴테스트 코포레이션 | 반도체 집적 회로 평가 시스템 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9087166B2 (en) | Simulation using parallel processors | |
US8161439B2 (en) | Method and apparatus for processing assertions in assertion-based verification of a logic design | |
Benini et al. | Telescopic units: A new paradigm for performance optimization of VLSI designs | |
US5384720A (en) | Logic circuit simulator and logic simulation method having reduced number of simulation events | |
Bryant | Symbolic verification of MOS circuits | |
US10372856B2 (en) | Optimizing constraint solving by rewriting at least one bit-slice constraint | |
US20050091025A1 (en) | Methods and systems for improved integrated circuit functional simulation | |
US7243087B2 (en) | Method and apparatus for solving bit-slice operators | |
US5960182A (en) | Hardware-software co-simulation system, hardware-software co-simulation method, and computer-readable memory containing a hardware-software co-simulation program | |
JP2001142937A (ja) | 回路のスケジューリング正当性チェック方法及びスケジュール検証方法 | |
Maheshwari et al. | Efficient retiming of large circuits | |
EP2480967A2 (en) | Concurrent simulation of hardware designs with behavioral characteristics | |
US20130297278A1 (en) | Retiming a design for efficient parallel simulation | |
US7370312B1 (en) | System and method for controlling simulation of hardware in a hardware development process | |
US20070005533A1 (en) | Method and apparatus for improving efficiency of constraint solving | |
Lee et al. | FastPass: Fast timing path search for generalized timing exception handling | |
US20080172551A1 (en) | Operation verification method for verifying operations of a processor | |
US7131085B2 (en) | Distributed BDD reordering | |
Berstis | The V compiler: automatic hardware design | |
US7257786B1 (en) | Method and apparatus for solving constraints | |
Huey | SCIRTSS: A search system for sequential circuit test sequences | |
Bergamaschi et al. | A system for production use of high-level synthesis | |
KR100594593B1 (ko) | 반도체 소자의 설계 검증을 위한 고속 병렬 시뮬레이션 방법 | |
Chou et al. | Average-case technology mapping of asynchronous burst-mode circuits | |
Kim et al. | TPartition: testbench partitioning for hardware-accelerated functional verification |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
N231 | Notification of change of applicant | ||
E701 | Decision to grant or registration of patent right | ||
N231 | Notification of change of applicant | ||
N231 | Notification of change of applicant | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20110609 Year of fee payment: 6 |
|
LAPS | Lapse due to unpaid annual fee |