system verilog는 하드웨어의 검증을 위해서 사용합니다.
하지만, 하드웨어의 검증을 위해서는 verilog 나 VHDL을 통해서 할수도 있습니다. 그러면 왜 System Verilog를 이용하여 하드웨어 검증을 하는걸까?
시대가 가면 갈수록 칩의 복잡성은 높아지고, 이에 따른 검증도 굉장히 복잡해졌습니다. 따라서 Verilog를 통해서 이를 검증하는데 있어서 매우 제한적입니다.
이러한 문제를 해결하기 위해서 System Verilog가 등장하였습니다.
System Verilog는 random stimuli를 제공하며, 객체 지향 기능을 사용할 수 있어 일반 Verilog보다 훨씬 우수합니다.
우선 System Verilog가 주로 사용되는 verification에 대해서 알아보겠습니다.
verification은 무엇인가?
verification은 계획한 하드웨어 설계가 예상되로 잘 작동하는지를 확인하기 위한 과정입니다. 칩 설계는 매우 복잡하고, 시간이 많이 걸리므로 이를 제작하는데 있어 많은 비용이 요구됩니다. 따라서 설계 과정 초기 단계에 오류 또는 버그를 발견하여 그 비용을 최소화하기 위해 해당 과정을 진행합니다.
testbench의 목적은 무엇일까?
테스트벤치를 사용하면 시뮬레이션을 통해 설계의 기능을 확인할 수 있습니다.
1. 다양한 유형의 Input stimulus 생성
2. Generate 된 stimulus으로 design 유도
3. design이 입력을 처리하고 출력을 제공하도록 함
4. 예상되는 동작으로 출력을 확인하여 기능적 결함 찾기
5. 기능적 버그가 발견되면 design을 변경하여 버그를 수정
6. 더 이상 기능적 결함이 없을 때까지 위이 단계를 반복
testbench의 요소 정리
요소 | 설명 |
Generator | DUT로 작동할 다양한 입력 생성 |
Interface | 작동시에 모니터링할 수 있는 설계 신호 연결선 |
Driver | 생성된 입력 신호를 design으로 보내는 요소 |
Monitor | design의 작동을 확인하기 위해 design의 입력/출력 포트 모니터링 |
Scoreboard | 예상되는 동작으로 design의 출력을 확인하는 요소 |
Environment | 위의 모든 단계의 검증 구성 요소를 포함하는 것 |
Test | 다양한 구성 설정으로 조정할 수 있는 환경을 포함 |
1. DUT란?
DUT는 'Design Under Test'의 약자로 Verilog 또는 VHDL로 작성된 하드웨어 설계입니다. DUT는 칩이 제조되면 사후 검증에 사용되는 용어입니다. 사전 검증에서는 Design Under Verification 즉, DUV라고 부릅니다.
2. Interface란?
설계를 하는데 있어서 굉장히 많은 포트 신호가 포함된 경우 해당 신호를 연결, 유지 및 재사용하는 것이 어렵습니다. 대신 DUT에 대한 Interface가 되는 컨테이너에 모든 design의 입력/출력 포트를 배치할 수 있습니다. 이후 Interface를 통해 받은 값으로 design을 구동할 수 있습니다.
3. Driver란?
Driver는 Interface에 정의된 task를 통해, DUT의 pin-wiggling을 수행하는 검증 구성 요소입니다. task Driver가 design에 대한 일부 입력 값을 구동해야 하는 경우, 신호 간의 타이밍 관계를 실제로 알지 못한 상태로, 사전에 정의된 값을 호출하기만 하면 됩니다. 타이밍 정보는 task Interface에서 정의됩니다. 이는 testbench를 보다 유연하고 확장 가능하게 만드는데 필요한 추상화 단계입니다. 앞으로 Interface가 변경되면 새 Driver가 동일한 작업을 호출하고 신호를 다른 방식으로 구동할 수 있게 해줍니다.
3-1. Driver는 무엇을 Drive 해야하는지 어떻게 알 수 있을까?
Generator는 유효한 data transaction을 생성하고 Driver로 보낼 수 있는 검증 구성 요소입니다. 그런 다음 Driver는 Interface를 통해 Generator가 제공한 data를 간단히 구동할 수 있습니다. Data transaction은 위의 이미지에서 파란색 사각형으로 표시된 class object로 구현됩니다. Data object를 가져와 DUT가 동작할 수 있는 것으로 변환하는 것이 Driver의 역할입니다.
4. Monitor가 필요한 이유는?
현재까지 data가 DUT로 전달되는 방식에 대해서 설명했습니다. 그러나 검증의 주요 목표는 해당 설계가 원하는 spec에 맞게 잘 동작하는지를 확인하는 것이기 때문에 절반 정도밖에 진행되지 않은 것입니다. DUT는 입력 data를 처리하고 결과를 출력 핀으로 보냅니다. monitor는 처리된 data를 선택하여 data object로 변환하고 scoreboard로 보냅니다.
5. Scoreboard의 동작 목적은?
Scoreboard는 DUT와 동일한 방식으로 작동하는 참조 모델을 가질 수 있습니다. 이 모델은 DUT의 예상 동작을 나타냅니다. DUT로 전송된 입력은 이 참조 모델로 전송됩니다. 따라서 DUT에 기능적인 문제가 있을 경우, DUT의 출력이 참조 모델의 출력과 일치하지 않습니다. 따라서 설계와 참조 모델의 출력을 비교하면서 설계에 어떤 기능적인 결함이 있는지를 확인할 수 있습니다. 이러한 동작이 일반적으로 Scoreboard에서 실행됩니다.
6. Test는 어떠한 동작을 할까?
Test는 Env의 개체를 인스턴스화하고 test가 원하는 방식으로 구성합니다. 일반적으로 검증을 하는데 있어서 수천개의 test를 가질 것이며, 각각의 test에 대한 Env를 직접 변경하는 것은 거의 불가능합니다. 대신 각각의 test에 대해 조정할 수 있는 Env에 knobs/parameters 를 적용합니다. 이렇게 할 경우 test를 제어할 때 더욱 효과적일 것입니다.
출처
https://www.chipverify.com/systemverilog/systemverilog-simple-testbench
SystemVerilog TestBench
What's a system verilog testbench ? What does a driver, DUT, monitor, sequencer, generator, interface, scoreboard, environment and test mean in a verification environment ?
www.chipverify.com