• Languages:
  • Korean
Community분류: XWAVEUCIE 모델에서 eye와 ber을 Xwave로 열 수 없는 에러

XWAVE

UCIE 모델에서 eye와 ber을 Xwave로 열 수 없는 에러

2025-03-26

안녕하세요, xmodel 2025.02버전과 UCIE모델을 사용하고 있습니다.
tb_MB_top_x1에서 eye,ber을 주어진 테스트 벤치에서 돌리고자 하는데
 
ber에서는 addsignal이 먹히지 않고,
eye에서는 plotwave 에러가 뜨면서 Xwave도 열리지가 않습니다.
 
해결방법이 있을까요?

1 Answers
SA Support Team 스탭 2025-03-26

안녕하세요, 문의주셔서 감사합니다.

1. 먼저 XWAVE 실행 시, .jez로 로드된 경우 BER을 제외한 다른 signal이 plot되지 않는 문제에 대해 답변 드리겠습니다.

tb_MB_top_x1에서 BER을 측정하기 위해 tb_meas_ber.sv 테스트벤치를 사용하고 있습니다.

// TESTBENCH tb_meas_ber.sv

`include "xmodel.h"

module tb_meas_ber ();
    parameter t_init = 300e-9;    // locking time
    
    // DUT TRX_top
    tb_MB_top_x1 DUT (.*);

    //probing
    initial begin
        $xmodel_dumpfile("xmodel.fsdb");
        $xmodel_progress();
        $xmodel_dumpvars(DUT.RX);
    end
    probe_ber   #(.start(t_init), .mode("int"), .length(23), .width(16)) IBER (.in(DUT.RX.dout_fifo), .in_ref({16{`zero_xbit}}), .clk(DUT.RX.clk_write0));

endmodule

이 테스트벤치는 시뮬레이션 파형을 xmodel.fsdb 파일로 저장합니다. 따라서 다른 신호를 확인하시려면, XWAVE 하단의 "+Add Signals" 버튼을 클릭하신 후, "Signal Browser" 창에서 "Waveform File"을 fsdb 형식으로 로드하여 원하는 신호를 추가해 주시기 바랍니다.

참고로, waveform file이 .jez 형식으로 로드된 경우에는 probe_ber primitive의 결과(BER)만 plot하실 수 있습니다

2. tb_meas_eye 테스트벤치에서 XWAVE 실행 시 plotwave error가 발생하는 문제에 대해 답변 드리겠습니다.

Eye Diagram 확인을 위해 tb_meas_eye.sv 테스트벤치를 사용하고 있으며, Testbench Editor의 "Commands" 옵션 내 "Commands for Plotting Simulation Results" 섹션에서 cmd.py 스크립트를 이용하여 Eye Diagram을 plot하도록 설정되어 있습니다.

최근 cmd.py 파일 형식이 변경됨에 따라 plotwave error가 발생하고 있으므로, 이 문제를 해결하시려면 cmd.py 스크립트를 수정해 주셔야 합니다.

Testbench Editor의 "Design" 옵션에 있는 "Dependent Cellviews and Files"의 목록에서 cmd.py를 선택한 후, 하단의 "Edit" 버튼을 클릭하여 스크립트를 수정하실 수 있습니다.

스크립트 수정 시, 다음과 같이 plot_eyediag 함수의 괄호 안에 포함된 "signal=" 부분을 제거해 주시기 바랍니다. 이후, Netlist를 다시 생성하고 XWAVE를 실행하면 Eye Diagram을 정상적으로 확인하실 수 있습니다.

* "signal=" 제거 전:

load_file('sweep.run/sweep.1/xmodel.jez')
load_file('sweep.run/sweep.2/xmodel.jez')

data_p = 1.0/32e9
t_lock = 400e-9
t_stop = -1

woFFE_name = 'W0:tb_meas_eye.DUT.RX.IRXDP.'
wFFE_name = 'W1:tb_meas_eye.DUT.RX.IRXDP.'

add_analysis_page("Eye Diagram Outputs")
plot_eyediag(signal=woFFE_name+'in'
            ,trigger=[woFFE_name+'clk_dsk[3]', woFFE_name+'clk_dsk[2]', woFFE_name+'clk_dsk[1]', woFFE_name+'clk_dsk[0]',]
            ,period=data_p, t_start=t_lock, t_stop=t_stop, stat=True)
plot_eyediag(signal=wFFE_name+'in'
            ,trigger=[wFFE_name+'clk_dsk[3]', wFFE_name+'clk_dsk[2]', wFFE_name+'clk_dsk[1]', wFFE_name+'clk_dsk[0]',]
            ,period=data_p, t_start=t_lock, t_stop=t_stop, stat=True)

* "signal=" 제거 후:

load_file('sweep.run/sweep.1/xmodel.jez')
load_file('sweep.run/sweep.2/xmodel.jez')

data_p = 1.0/32e9
t_lock = 400e-9
t_stop = -1

woFFE_name = 'W0:tb_meas_eye.DUT.RX.IRXDP.'
wFFE_name = 'W1:tb_meas_eye.DUT.RX.IRXDP.'

add_analysis_page("Eye Diagram Outputs")
plot_eyediag(woFFE_name+'in'
            ,trigger=[woFFE_name+'clk_dsk[3]', woFFE_name+'clk_dsk[2]', woFFE_name+'clk_dsk[1]', woFFE_name+'clk_dsk[0]',]
            ,period=data_p, t_start=t_lock, t_stop=t_stop, stat=True)
plot_eyediag(wFFE_name+'in'
            ,trigger=[wFFE_name+'clk_dsk[3]', wFFE_name+'clk_dsk[2]', wFFE_name+'clk_dsk[1]', wFFE_name+'clk_dsk[0]',]
            ,period=data_p, t_start=t_lock, t_stop=t_stop, stat=True)

이 답변이 문제 해결에 도움이 되셨기를 바라며, 추가로 도움이 필요하시면 Community 게시판 혹은 support@scianalog.com로 연락 주시면 감사하겠습니다.