OVL(Open Verification Library)은 상당히 오래전부터 보아왔던 assertion library인데요. 제 기억이 맞다면 거의 최초의 ABV(assertionbased verification)쪽 라이브러리가 아닌가 기억됩니다. Foster라는 분이 박사 논문으로 작성한 것이, 발전을 거듭해서 ABV라는 것까지 발전한 것으로 기억되는데, 정확한 사실인지는 찾아보지 않고 기억에 의존한 것이라 틀릴 수도 있습니다. 여하튼 OVL의 출발은 상당히 오래된 거죠 ^^;
ABV에서 어찌보면 가장 보편적이었던 표준은 PSL/Sugar인데, 요즘엔 System Verilog Assertion(이후 SVA)이후에 PSL은 개화하지도 못하고 SVA쪽으로 편입되는 느낌이긴 합니다. OVL도 예전에 verilog HDL의 라이브러리의 형태로 출발한 것이 http://www.accellera.org/의 표준으로 채택되고, 여기에 SVA, PSL porting이 추가되면서 여러가지 형태를 가지고 가고 있습니다.
OVL의 가장 큰 장점은 특정 assertion 기반 언어를 사용한 것이 아니라 verilog HDL 기반이기 때문에 특정 assertion 언어를 지원하지 않는 일반적인 HDL시뮬레이터에서 다 사용할 수 있다는 것이겠습니다(앞에 설명드렸다시피 SVA, PSL port를 지원할 수도 있으니 일반론이라 볼 수는 없고, OVL2.0으로 오면서 SVA쪽에 무게를 두고 multiple fifo에 대한 관련 문법 때문에 더이상 무조건 Verilog HDL기반이라 이야기하는 건 힘들게 되었습니다만.. 이 글에서는 일단 제가 알고 있는 범위인 OVL 1.x버전대로 한정하지요..) 예전에 System Verilog 기반으로 이런 저런거 해 보려다가 tool의 라이센스가 대부분의 SystemVerilog의 verification feature부분을 사용하기 위해서(queue라던지, fifo model이라던지..하는 ) 추가적으로 돈을 지불해야 하는 방식이라 못쓰고 있다는 이야기를 드렸는데, OVL은 assertion에 있어서는 뭐 강력하지도 않지만, 추가적으로 돈이 들지 않는다는 건 장점이에요.
OVL을 요즘에 다시 관심을 가지게 된 이유는 ARM에서 AXI Protocol Checker라는 것을 배포하고 있는데, 이넘이 OVL 1.x 기반의 assertion 문법을 사용하고 있기 때문입니다. ARM에서 이런 기특한 일을 할때도 있군요. 나름 다양한 문법과 설정을 할 수 있도록 작성된 protocol checker이기 때문에, 예전에 추상적으로 알고 있던 몇몇 assertion 관련 문법을 좀더 정확히 알 수 있는 좋은 예제였습니다.
관심있으신 분은 한번 설치해서 AxiPC를 구동시켜 보실 것을 권장합니다. AXI 시스템이 있으시다면, 주욱 돌려 보면서 protocol을 잘못 이해해서 잘못 작성한 부분이 있는지 확인하는 데 도움을 줄 것이고, AxiPC 자체에 혹은 AXI 프로토콜에 관심이 있으시다면 , AXI dummy slave나 AXI protocol generator 같은건 간단하게 만들어서 프로토콜의 발생에 따른 에러 발생 여부를 확인하면 되니 생각보다 활용도가 좀 있습니다.
AXI protocol checker는 ARM 사의 홈페이지에서, OVL은 accellera의 OVL페이지에서 각각 다운 받을 수 있습니다. (verilog mode로 사용할때는 +define+OVL_VERILOG 를 쓰셔야 하심을 잊지 마세요)