Tcl(툴 커맨드 언어)에서 멀티라인 지원을 위해 몇 가지 방법이 있습니다. 주로 사용되는 방법은 백슬래시(\
)를 사용하여 줄바꿈을 이스케이프하거나, 중괄호({}
)를 사용하여 여러 줄을 묶는 방법입니다.
참고로 여러가지 파일 처리 자동화를 위해 반대로 멀티라인을 제거하는 프로젝트는 생성해서 업데이트 중입니다. 전처리가 필요하면 참고하세요.
https://github.com/bjnhur/tcl_line_processor
백슬래시를 사용한 멀티라인
백슬래시(\
)는 Tcl에서 줄바꿈을 이스케이프하는 데 사용됩니다. 백슬래시를 줄 끝에 넣으면, 다음 줄의 내용이 이어지게 됩니다.
puts "This is a \
multiline string"
위의 코드는 다음과 동일합니다.
puts "This is a multiline string"
중괄호를 사용한 멀티라인
중괄호({}
)는 Tcl에서 여러 줄을 묶는 데 사용됩니다. 중괄호 안에 있는 내용은 줄바꿈을 포함하여 하나의 문자열로 취급됩니다.
set multiline_string {
This is a
multiline string
}
puts $multiline_string
위의 코드는 줄바꿈을 포함한 문자열을 출력합니다.
인덴트를 포함한 멀티라인
Tcl은 중괄호를 사용할 때 내부의 공백이나 줄바꿈을 그대로 포함하기 때문에, 코드의 가독성을 위해 인덴트를 사용하는 경우도 고려해야 합니다.
set multiline_string {
This is a
multiline string
with indentation
}
puts $multiline_string
위의 코드는 줄바꿈과 인덴트를 포함하여 출력합니다.
멀티라인 명령
Tcl에서는 여러 줄에 걸친 명령을 작성할 때도 백슬래시를 사용할 수 있습니다.
proc my_proc {arg1 arg2} {
set result [expr $arg1 + $arg2]
return $result
}
set sum \
[my_proc 3 4]
puts $sum
위의 코드는 my_proc
프로시저를 정의하고, 여러 줄에 걸쳐 명령을 작성한 후 그 결과를 출력합니다.
예제: 여러 줄 조건문
다음은 if
문을 사용하여 여러 줄에 걸쳐 조건문을 작성하는 예제입니다.
if { $x > 0 && \
$y > 0 } {
puts "Both x and y are positive"
} else {
puts "One of x or y is not positive"
}
위의 코드는 조건문을 여러 줄에 걸쳐 작성하여 가독성을 높입니다.
요약
- 백슬래시(
\
)를 사용하여 줄바꿈을 이스케이프할 수 있습니다. - 중괄호(
{}
)를 사용하여 여러 줄을 묶어 하나의 문자열로 취급할 수 있습니다. - 중괄호를 사용할 때는 내부의 공백이나 줄바꿈이 그대로 포함됩니다.
- 여러 줄에 걸친 명령이나 조건문을 작성할 때 백슬래시를 사용하여 가독성을 높일 수 있습니다.
SDC 파일 작성 시 예제
Synopsys Design Constraints (SDC) 파일은 전자 설계 자동화(EDA) 도구에서 사용되는 파일로, 디자인의 타이밍 제약 조건을 정의하는 데 사용됩니다. SDC 파일은 Tcl 스크립트 형식을 따르므로, Tcl의 멀티라인 문법을 사용할 수 있습니다.
여기서는 SDC 파일에서 멀티라인을 사용하는 몇 가지 예제를 보여드리겠습니다.
백슬래시를 사용한 멀티라인
백슬래시를 사용하여 한 줄로 이어지는 긴 명령어를 여러 줄에 나눌 수 있습니다.
create_clock -period 10.0 \
-waveform {0 5} \
[get_ports {clk}]
중괄호를 사용한 멀티라인
중괄호를 사용하여 여러 줄에 걸친 문자열을 정의할 수 있습니다. 이는 긴 리스트나 여러 줄에 걸친 텍스트 블록에 유용합니다.
set_input_delay -max 2.5 -clock [get_clocks clk] {
[get_ports {data_in1}]
[get_ports {data_in2}]
}
복잡한 명령어를 여러 줄로 나누기
복잡한 명령어는 백슬래시와 중괄호를 조합하여 여러 줄에 걸쳐 작성할 수 있습니다.
set_output_delay -max 1.5 -clock [get_clocks clk] \
{ \
[get_ports {data_out1}] \
[get_ports {data_out2}] \
}
예제: 타이밍 경로 그룹 설정
긴 타이밍 경로 그룹 설정을 여러 줄로 나눠서 가독성을 높일 수 있습니다.
set_false_path -from [get_clocks {clk1}] \
-to [get_clocks {clk2}]
예제: 입력 지연 설정
여러 입력 포트에 대해 입력 지연을 설정하는 예제입니다.
set_input_delay -clock [get_clocks {clk}] \
-max 3.0 \
[get_ports { \
data_in1 \
data_in2 \
data_in3 \
}]
예제: 클럭 그룹 설정
여러 클럭 그룹을 설정하는 예제입니다.
set_clock_groups -asynchronous -group {
[get_clocks {clk1 clk2}]
} -group {
[get_clocks {clk3 clk4}]
}
이 예제들은 SDC 파일에서 멀티라인을 사용하는 방법을 보여줍니다. 각 명령어를 적절하게 나누어 작성하면 가독성을 높이고 관리하기 쉽게 할 수 있습니다.
'IT > ASIC | FPGA' 카테고리의 다른 글
쉘 실행때 옵션에 따라서 다른 filelist 물고 실행하기 (0) | 2024.07.19 |
---|---|
Verdi 옵션 - kdb,fsdb 물고 실행 (0) | 2024.07.01 |
표준 RTL 코드 스타일 - 기본에서 출발하자 (0) | 2024.05.31 |
SDC clock group 이해: asynchronous vs exclusive 차이점 (0) | 2024.05.30 |
UVM Configuration Database (uvm_config_db) 사용 예제 (0) | 2024.05.29 |