업무 중에 Analog Block과 Digital Block과의 Interface 하는 부분이 있다. Analog에서 나온 출력을 다시 Digital 입력으로 받아야 할 때가 가끔씩 있는데, 어떻게 해야할 지 매우 매우 고민스러웠는데, 이에 대한 솔루션을 한가지 찾아서 이 참에 정리하여 한다.
S2P (Analog) -> Word Aligner (Digital) -> 8B/10B Decoder (Digital)
이렇게 이루어지는 블록 시뮬레이션이며, S2P Block에서 Clock과 Data가 생성된다. Clock 과 Data를 Digitial Block이 받게 되고, 이 입력을 받아서 Digital Block을 시뮬레이션 돌려 Golden Block과 비교하는 절차로 진행된다.
Analog Simulation은 Nanosim이나 XA로 수행하면 되며, 통상 Nanosim을 많이 사용하므로 Nanosim에서 FSDB로 dump하게 되면, FSDB 파일을 열어 볼 수 있다. 이 FSDB 파일을 txt file로 dump하면 이 dump 파일을 verilog 입력으로 사용할 수 있는 verilog system task를 구성하게 되고, 이 system task를 이용하여 Digital Block 입력으로 사용하여 시뮬레이션을 수행한다.
이 때 사용할 script 및 test bench example 임.
1. Python script : FSDB 파일에서 원하는 신호를 dump 하게 되면, 다음과 같은 형태로 출력됨.
시간과 데이터의 값이 출력되는데, 이게 여러개의 space로 구성되어 있어 나중에 testbench의 입력으로 사용할 때 문제가 생긴다. 따라서, 여러 개의 space를 하나의 space로 줄여야 하는데, 다음 python script로 사용한다.
사용법은 간단하게 나와 있으니, 참고하고 python script로 변환을 수행하면 아래와 같이 된다.
space가 전부 하나로 바뀐 것을 볼 수 있다. 또한, 앞에는 Time인데, Time 뒤에 :(콜론)을 꼭 붙여야만 한다.
2. verilog testbench : 수정된 report file을 시뮬레이션에서 사용할 testbench(verilog) 를 만들어야 하는데, 이와 관련된 verilog code는 아래와 같다.
모르는 system task 가 있다면 verilog code 문법책 한번 보고 나면 이해가 갈것이다. (봐도 이해 안가는 경우도 있다 ㅡ_ㅡ;)
가장 중요한 timescale은 꼭 맞춰주고, 진행해야 함 Analog 출력 dump가 1ps로 되어 있기 때문에 timescale 도 1ps/1ps로 맞춰줘야 정확한 time이 들어가게 된다.
testbench에서 report file를 물려 simulation 돌리면 될 것으로 아뢰오 ㅎㅎㅎ
Reference :
'Idea' 카테고리의 다른 글
Integer, Floating Point Adder, Divider Verilog Code Site (0) | 2012.06.05 |
---|---|
나는 라이브러리를 만들 수 있을까? (0) | 2012.04.07 |