Idea

Analog 출력 신호 Digital 입력으로 받아 시뮬레이션 하기

guruzoa 2012. 5. 7. 20:48

업무 중에 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로 사용한다.

 

fsdb_rpt_fconv.py

사용법은 간단하게 나와 있으니, 참고하고 python script로 변환을 수행하면 아래와 같이 된다.

 

space가 전부 하나로 바뀐 것을 볼 수 있다. 또한, 앞에는 Time인데, Time 뒤에 :(콜론)을 꼭 붙여야만 한다.

2. verilog testbench : 수정된 report file을 시뮬레이션에서 사용할 testbench(verilog) 를 만들어야 하는데, 이와 관련된 verilog code는 아래와 같다.

 

read_l0_data_pattern.v

모르는 system task 가 있다면 verilog code 문법책 한번 보고 나면 이해가 갈것이다. (봐도 이해 안가는 경우도 있다 ㅡ_ㅡ;)

가장 중요한 timescale은 꼭 맞춰주고, 진행해야 함 Analog 출력 dump가 1ps로 되어 있기 때문에 timescale 도 1ps/1ps로 맞춰줘야 정확한 time이 들어가게 된다.

testbench에서 report file를 물려 simulation 돌리면 될 것으로 아뢰오 ㅎㅎㅎ

Reference :

(1) http://asic.co.in/Index_files/verilog_files/File_IO.htm

(2) http://stackoverflow.com/questions/1546226/the-shortest-way-to-remove-multiple-spaces-in-a-string-in-python

(3) http://maks.tistory.com/entry/readline-%EC%86%8D%EB%8F%84%EB%A5%BC-%EB%B9%A0%EB%A5%B4%EA%B2%8C-%ED%95%98%EA%B8%B0