GLISTER가 생성하는 SystemVerilog 모듈 파일의 시작부분에 제가 원하는 문자열을 더 삽입하고 싶습니다. 예를 들어, 아래는 GLISTER가 생성하는 전형적인 모듈 파일을 보여줍니다. 코멘트 라인과 include 구문으로 시작하고 있습니다.
// XMODEL/SystemVerilog netlist for prims_ex:tb_channel.schematic
// Generated on Aug 16 23:38:08 2025
`include "xmodel.h"
module tb_channel (
`output_xreal out
);
// ... omitted ...
endmodule // tb_channel
저의 경우에는 이 부분에 몇 줄의 라인을 더 추가하고 싶습니다. 예를 들어, 아래에 표시한 것처럼 추가 패키지 파일을 include하고, 그 내용을 import하는 구문을 추가하고 싶습니다.
// XMODEL/SystemVerilog netlist for prims_ex:tb_channel.schematic
// Generated on Aug 16 23:38:08 2025
`include "xmodel.h"
`include "my_special_pkg.sv"
import my_special_pkg::*;
module tb_channel (
`output_xreal out
);
// ... omitted ...
endmodule // tb_channel
이렇게 할 수 있는 방법이 있나요?
물론 있습니다. 두개의 SKILL 변수 'xmodelModuleFileHeader'와 'xmodelModuleFileFooter'는 각각 GLISTER가 생성하는 SystemVerilog 모듈 파일의 머리글 및 바닥글 문자열을 정의합니다. 이 변수들의 기본값은 아래와 같습니다.
xmodelModuleFileHeader->default = "`include \"xmodel.h\"\n" xmodelModuleFileFooter->default = ""
따라서, 모듈 파일의 시작부분에 원하는 라인들을 추가하려면, 'xmodelModuleFileHeader' 변수를 아래와 같이 정의하시면 됩니다.
xmodelModuleFileHeader->default = strcat(
"`include \"xmodel.h\"\n"
"`include \"my_special_pkg.sv\"\n\n"
"import my_special_pkg::*;\n"
)
xmodelModuleFileFooter->default = ""
문자열 내의 따옴표들은 그 앞에 백슬래시를 붙여주었고, 줄바꿈을 원하는 부분에서는 '\n'를 썼음을 유의해주세요. 그리고 본 예제에서는 strcat() 함수를 사용해 문자열을 라인별로 보기좋게 표시하였습니다.
또한 편리한 기능은, 환경변수의 이름을 ${…} 형식 안에 넣으면, 그 변수의 값이 문자열로 대체되는 것입니다.
xmodelModuleFileHeader->default = strcat(
"`include \"xmodel.h\"\n"
"`include \"${MYPKG_PATH}/my_special_pkg.sv\"\n\n"
"import my_special_pkg::*;\n"
)
xmodelModuleFileFooter->default = ""
앞서의 예제들에서는 모두 SKILL 변수의 'default' 속성을 통해, 정의하는 머리글 및 바닥글 문자열이 모든 SystemVerilog 시뮬레이터에 적용되도록 하였습니다. 하지만, 어떤 경우에는 시뮬레이터에 따라 다른 머리글 및 바닥글 문자열을 적용해야 할때도 있습니다. 아래의 예제는 'default' 속성 대신 각 시뮬레이터 이름에 해당하는 속성을 정의함으로써 VCS와 Xcelium에 대해 각각 다른 머리글 문자열을 정의하는 방법을 보여줍니다. 현재 지원되는 시뮬레이터 속성 이름은 vcs, xcelium, ncverilog, questa, 그리고 modelsim 입니다.
xmodelModuleFileHeader->vcs = strcat(
"`include \"xmodel.h\"\n\n"
"`ifndef _SNPS_MSV_NETTYPE_PKG_\n"
"`define _SNPS_MSV_NETTYPE_PKG_\n"
"`include \"${VCS_HOME}/etc/snps_msv/snps_msv_nettype_pkg.svp\"\n"
"import snps_msv_nettype_pkg::*;\n"
"`endif"
)
xmodelModuleFileHeader->xcelium = strcat(
"`include \"xmodel.h\"\n"
"import cds_rnm_pkg::*;\n"
)
xmodelModuleFileHeader->questa = strcat(
"`include \"xmodel.h\"\n"
"import mgc_rnm_pkg::*;\n"
)
비슷한 방식으로, 'xmodelWrapperModuleFileHeader'와 'xmodelWrapperModuleFileFooter' SKILL 변수들은 각각 co-simulation을 위해 SPICE netlist로 정의된 회로를 감싸는 wrapper 모듈 파일의 머리글 및 바닥글 문자열을 정의합니다. 이들의 기본값은 아래와 같습니다.
xmodelWrapperModuleFileHeader->default = "`include \"xmodel.h\"\n" xmodelWrapperModuleFileFooter->default = ""
Please login or Register to submit your answer