verilator_bin_dbg - 클라우드의 온라인

이것은 Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터와 같은 여러 무료 온라인 워크스테이션 중 하나를 사용하여 OnWorks 무료 호스팅 제공업체에서 실행할 수 있는 verilator_bin_dbg 명령입니다.

프로그램:

이름


Verilator - Verilog 코드를 C++/SystemC로 변환

개요


검증자 --도움말
검증기 --버전
verilator --cc [옵션] [top_level.v]... [opt_c_files.cpp/c/cc/a/o/so]
verilator --sc [옵션] [top_level.v]... [opt_c_files.cpp/c/cc/a/o/so]
검증자 --lint-only [top_level.v]...

기술


Verilator는 합성 가능한(행동적이지 않은) Verilog 코드와 일부 합성을 변환합니다.
SystemVerilog 및 Verilog AMS 어설션의 작은 하위 집합을 C++ 또는 SystemC 코드로 변환합니다. 그것
완전한 시뮬레이터가 아니라 컴파일러입니다.

Verilator는 GCC, Cadence Verilog-XL/NC-Verilog 또는
Synopsys의 VCS. 지정된 Verilog 코드를 읽고 Lint하고 선택적으로 추가합니다.
적용 범위 및 파형 추적 코드. C++ 및 SystemC 형식의 경우 .cpp 및 .h를 출력합니다.
파일.

Verilator에서 생성된 파일은 C++로 컴파일됩니다. 사용자가 약간의 C++ 작성
최상위 모듈을 인스턴스화하고 이 파일 이름을
명령줄. 이러한 C 파일은 C++로 컴파일되고 Verilated 파일과 연결됩니다.

결과 실행 파일은 실제 시뮬레이션을 수행합니다.

시작하려면 "EXAMPLE C++ EXECUTION"으로 이동하십시오.

ARGUMENT 개요


이것은 Verilator에 대한 인수의 짧은 요약입니다. 에서 자세한 설명을 참조하십시오.
자세한 내용은 다음 섹션을 참조하십시오.

{file.v} Verilog 최상위 파일 이름
{file.c/cc/cpp} 컴파일할 선택적 C++ 파일
{file.a/o/so} 링크할 선택적 C++ 파일

+1364-1995내선+ 파일 확장자가 있는 Verilog 1995 사용
+1364-2001내선+ 파일 확장자가 있는 Verilog 2001 사용
+1364-2005내선+ 파일 확장자가 있는 Verilog 2005 사용
+1800-2005내선+ 파일 확장자가 있는 SystemVerilog 2005 사용
+1800-2009내선+ 파일 확장자가 있는 SystemVerilog 2009 사용
+1800-2012내선+ 파일 확장자가 있는 SystemVerilog 2012 사용
--assert 모든 어설션 활성화
--autoflush 모든 $표시 후 스트림을 플러시합니다.
--bbox-sys 블랙박스 알 수 없는 $system 호출
--bbox-unsup 블랙박스 지원되지 않는 언어 기능
--큰 상자 Verilator 바이너리 재정의
-CFLAGS makefile용 C++ 컴파일러 플래그
--cc C++ 출력 생성
--cdc 클록 도메인 교차 분석
--clk 지정된 신호를 클럭으로 표시
--컴파일러 지정된 C++ 컴파일러에 맞게 조정
--converge-limit 수렴 정착 시간 조정
--coverage 모든 커버리지 활성화
--coverage-line 라인 커버리지 활성화
--coverage-toggle 적용 범위 전환 활성화
--coverage-user SVL 사용자 범위 활성화
--coverage-underscore _signals 적용 범위 활성화
-D [= ] 전처리기 정의 설정
--debug 디버깅 활성화
--debug-check 디버깅 어설션 활성화
--debugi 지정된 수준에서 디버깅 활성화
--디버그- 수준에서 소스 파일 디버깅 활성화
--기본 설정 언어 파싱할 기본 언어
+정의+ = 전처리기 정의 설정
--dump-tree .tree 파일 덤프 활성화
--dump-treei 수준에서 .tree 파일 덤프 활성화
--덤프-트리- 레벨의 소스 파일에서 .tree 파일 덤핑 활성화
-E 전처리하지만 컴파일하지 않음
--오류 제한 이 오류 수 이후에 중단
--exe 실행 파일 생성 링크
-에프 상대적으로 파일에서 구문 분석 옵션
-에프 파일에서 구문 분석 옵션
--gdb 대화식으로 GDB에서 Verilator 실행
--gdbbt 역추적을 위해 GDB에서 Verilator 실행
--help 이 도움말 표시
-나 검색할 디렉토리 포함
--if-깊이 IFDEPTH 경고 조정
+incdir+ 검색할 디렉토리 포함
--inhibit-sim 시뮬레이션을 끄는 기능 만들기
--인라인 멀티 튜닝 모듈 인라인
-LDFLAGS makefile에 대한 링커 사전 개체 플래그
-LDLIBS makefile용 링커 라이브러리 플래그
--언어 구문 분석할 기본 언어 표준
+libext+ +[ext]... 모듈을 찾기 위한 확장
--lint-only 린트하지만 출력하지 않음
--MMD .d 의존성 파일 생성
--MP 가짜 종속성 대상 만들기
--Mdir 출력 개체 디렉터리의 이름
--mod 접두사 하위 클래스 앞에 추가할 이름
--no-clk 지정된 신호를 클록으로 표시 방지
--no-pins64 64-33비트 시그널에 vluint64_t를 사용하지 마십시오.
--no-skip-identical 동일한 출력 건너뛰기 비활성화
+notimingchecks 무시됨
-O0 최적화 비활성화
-O3 고성능 최적화
-영형 선택 가능한 최적화
-영형 최종 실행 파일의 이름
--no-order-clock-delay 주문 클록 활성화 할당 비활성화
--출력 분할 .cpp 파일을 조각으로 분할
--출력-분할-cfuncs .cpp 기능 분할
--출력-분할-ctrace 분할 추적 기능
-P -E를 사용하여 줄 번호와 공백을 비활성화합니다.
--핀-bv 최상위 수준 포트의 유형 지정
--pins-sc-uint 최상위 수준 포트의 유형 지정
--pins-sc-biguint 최상위 수준 포트의 유형 지정
--pins-uint8 최상위 포트 유형 지정
--파이프 필터 스크립트를 통한 모든 입력 필터링
--접두사 최상위 클래스 이름
--profile-cfuncs 프로파일링을 위한 이름 함수
--private 디버깅; 문서 참조
--공개 디버깅; 문서 참조
--report-unoptflat UNOPTFLAT에 대한 추가 진단
--savable 모델 저장 복원 활성화
--sc SystemC 출력 생성
--stats 통계 파일 생성
--stats-vars 변수에 대한 통계 제공
-sv SystemVerilog 구문 분석 활성화
+시스템Verilogext+ +1800-2012ext+의 동의어
--탑 모듈 최상위 입력 모듈 이름
--trace 파형 생성 활성화
--추적 깊이 추적의 깊이
--추적 최대 배열 추적을 위한 최대 비트 폭
--추적 최대 너비 추적을 위한 최대 어레이 깊이
--trace-params 추적 매개변수 활성화
--trace-structs 추적 구조 이름 활성화
--trace-underscore _signals 추적 활성화
-U 미정의 전처리기 정의
--언롤 카운트 최대 루프 반복 조정
--unroll-stmts 최대 루프 본체 크기 조정
--unused-regexp 미사용 보푸라기 신호 조정
-V Verbose 버전 및 구성
-V Verilog 라이브러리
+verilog1995ext+ +1364-1995ext+의 동의어
+verilog2001ext+ +1364-2001ext+의 동의어
-오류- 경고를 오류로 변환
-W미래- 알 수 없는 메시지 경고 비활성화
-아뇨- 경고 비활성화
-Wno-lint 모든 린트 경고 비활성화
-Wno-style 모든 스타일 경고 비활성화
-Wno-fatal 경고 시 치명적 종료 비활성화
--x 할당 처음에 이 값에 X를 할당합니다.
--x-initial-edge 초기 X->0 및 X->1 에지 트리거 활성화
-와이 모듈을 검색할 디렉터리

인수


{파일.v}
검증할 최상위 모듈을 포함하는 Verilog 파일을 지정합니다.

{file.c/.cc/.cpp/.cxx}
Verilog 코드와 연결될 선택적 C++ 파일을 지정합니다. C++ 파일이 있는 경우
이러한 방식으로 지정되면 Verilator는 다음을 생성하는 make 규칙을 포함합니다. 모듈
실행 가능. C++ 파일이 없으면 Verilator는 모듈__ALL.a 라이브러리,
자신이 작성한 make 규칙과 계속 연결한다고 가정합니다. 또한 참조
-CFLAGS 옵션.

{file.a/.o/.so}
Verilog 코드와 연결될 선택적 개체 또는 라이브러리 파일을 지정합니다.
-LDFLAGS의 줄임말 " ". 이렇게 파일을 지정하면 Verilator
링크할 때 이러한 파일을 사용하는 make 규칙을 포함합니다. 모듈 실행 파일.
이것은 일반적으로 --exe 옵션과 함께 사용할 때만 유용합니다.

+1364-1995내선+내선
+1364-2001내선+내선
+1364-2005내선+내선
+1800-2005내선+내선
+1800-2009내선+내선
+1800-2012내선+내선
특정 파일 이름 확장명과 함께 사용할 언어 표준을 지정합니다. 내선.

다른 시뮬레이터와의 호환성에 대해서는 동의어 "+verilog1995ext+"를 참조하십시오.내선,
"+verilog2001ext+"내선, 및 "+systemverilogext+"내선.

모든 소스 파일의 경우 이러한 옵션으로 지정된 언어가 모든 소스 파일보다 우선합니다.
"--default-language" 또는 "--language" 옵션으로 지정된 언어.

이러한 옵션은 나타나는 순서대로 적용됩니다. 따라서 다음은
"av"에는 Verilog 1995를 사용하고 "bv"에는 Verilog 2001을 사용하십시오.

verilator ... +1364-1995ext+v av +1364-2001ext+v bv

이러한 플래그는 레거시 혼합 언어 디자인에만 권장됩니다.
옵션은 코드를 수정하여 새 키워드를 복구하거나 적절한 키워드를 추가하는 것입니다.
"`시작_키워드".

주의 사항 "`begin_keywords"는 SystemVerilog 구문으로 다음을 지정합니다. 어느
일련의 키워드가 인식됩니다. 어떤 세트를 선택하든 시맨틱은 다음과 같습니다.
SystemVerilog의 것입니다. 대조적으로 "+1364-1995ext+" 등은 두 구문을 모두 지정합니다. 그리고
사용할 의미론.

--주장하다
모든 어설션을 활성화합니다.

--x-assign 및 --x-initial-edge도 참조하십시오. "--x-assign unique" 설정 및/또는
"--x-initial-edge"가 바람직할 수 있습니다.

--자동 플러시
$display 또는 $fdisplay마다 출력 스트림을 플러시합니다. 이것은 다음을 보장합니다
메시지는 즉시 나타나지만 성능이 저하될 수 있습니다. 최고의 성능 호출을 위해
메인 C 루프에서 가끔 "fflush(stdout)". 기본값은 꺼져 있으며 버퍼링됩니다.
일반 C stdio 호출에 의해 제공되는 출력.

--bbox-sys
알 수 없는 $system 작업 또는 함수 호출을 블랙박스에 넣습니다. 시스템 작업은 단순히
NOPed 및 시스템 기능은 크기가 지정되지 않은 XNUMX으로 대체됩니다. 그러한 주장
함수는 구문 분석되지만 그렇지 않으면 확인되지 않습니다. 이렇게 하면 오류를 방지할 수 있습니다.
회사 특정 PLI 호출이 있는 경우 보푸라기.

--bbox-unsup
블랙박스 일부 지원되지 않는 언어 기능, 현재 UDP 테이블 및 cmos 및
트랜스 게이트 프리미티브. 이렇게 하면 디자인의 나머지 부분을 린팅할 수 있습니다.
지원되지 않는 구성이 있습니다.

--큰 상자 파일 이름
드물게 필요합니다. Verilator 자체의 기본 파일 이름을 재정의합니다. 종속성이 있을 때
(.d) 파일이 생성되면 이 파일 이름은 소스 종속성이 됩니다.
이 바이너리를 변경하면 make가 출력 파일을 다시 빌드하게 됩니다.

-CFLAGS 플래그
지정된 C 컴파일러 플래그를 생성된 메이크파일에 추가합니다. make가 실행될 때
생성된 makefile은 C++ 컴파일러(gcc/g++/msvc++)로 전달됩니다.

--cc
SystemC 출력 모드 없이 C++를 지정합니다. --sc도 참조하십시오.

--질병통제예방센터
실험적. 일부 클럭 도메인 교차 검사를 수행하고 관련 경고를 발행합니다.
(CDCRSTLOGIC) 그런 다음 종료합니다. CDC 경고 이외의 경고가 필요한 경우
--lint-only로 두 번째 실행. 추가 경고 정보는
파일 {접두사}__cdc.txt.

현재 다른 CDC 도구가 놓친 일부 항목만 확인합니다. 당신이 관심이 있다면
더 많은 전통적인 CDC 확인을 추가하려면 작성자에게 문의하십시오.

--clk 신호 이름
때로는 Verilator가 다른 클럭 신호와 클럭 신호를 구별하는 것이 매우 어렵습니다.
데이터 신호. 때때로 클럭 신호는
추가 평가가 필요한지 여부를 결정하는 신호. 이것은 크게 저하됩니다
검증된 모델의 성능.

--clk 사용 , 사용자는 모델에 루트 클럭을 지정한 다음 Verilator를 지정할 수 있습니다.
신호를 clocker로 표시하고 clocker 속성을 자동으로
그로부터 파생된 다른 신호. 이런 식으로 Verilator는
클록커 신호를 체크리스트에 넣습니다.

참고 signal-name은 RTL 계층 경로에 의해 지정됩니다. 예: v.foo.bar. 만약에
신호는 최상위 모듈에 대한 입력이며 직접 신호 이름입니다. 찾으면
정확한 이름을 찾기 어렵습니다. RTL 파일에서 "/*verilator clocker*/"를 사용하여
신호를 직접 표시하십시오.

--컴파일러 컴파일러 이름
지정된 C++ 컴파일러에 대한 조정 및 해결 방법을 활성화합니다.

그 소리
클랭에 맞게 조정하십시오. 여러 해결 방법을 사용할 수 있으므로 실행 속도가 감소할 수 있습니다.
clang에서 어리석은 하드 코딩 된 제한을 피하기 위해. 여기에는 심층 구조 파괴가 포함됩니다.
msvc는 아래에 설명되어 있습니다.

Gnu C++용 gcc 조정(생성된 코드는 거의 모든 호환 C++에서 작동해야 함)
컴파일러. 현재 기본값입니다.

MSVC
Microsoft Visual C++에 맞춰 조정합니다. 이렇게 하면 실행 속도가 느려질 수 있습니다.
MSVC++에서 어리석은 하드코딩된 제한을 피하기 위한 몇 가지 해결 방법. 여기에는 다음이 포함됩니다.
깊게 중첩된 괄호로 묶인 표현식을 하위 표현식으로 분리하여
오류 C1009 및 오류 C1061을 피하기 위해 깊은 블록을 함수로 나눕니다.

--converge-limit
드물게 필요합니다. 생성하기 전에 최대 런타임 반복 횟수를 지정합니다.
모델이 오류를 수렴하지 못했습니다. 기본값은 100입니다.

--적용 범위
"--coverage-line --coverage-toggle의 별칭인 모든 형태의 적용 범위를 활성화합니다.
--커버리지-사용자".

--커버리지 라인
기본 블록 라인 커버리지 분석 코드가 삽입되어야 함을 지정합니다.

커버리지 분석은 각 코드 흐름 변경 지점에 명령문을 추가합니다.
일반 Verilog Line Coverage의 상위 집합인 IF 및 CASE 문의 분기. ~에
이러한 분기마다 고유한 카운터가 증가합니다. 테스트가 끝나면 카운터에서
각 카운터에 해당하는 파일 이름 및 줄 번호와 함께
로그/coverage.pl.

Verilator는 $stop이 있는 분기의 적용 범위를 자동으로 비활성화합니다.
$stop 분기에 발생하지 않아야 하는 오류 검사가 포함되어 있다고 가정합니다. /*진정기
coverage_block_off*/ 주석은 해당 블록의 모든 코드에서 유사한 기능을 수행합니다.
이하, 또는 /*verilator coverage_on/coverage_off*/는 라인 주변의 커버리지를 비활성화합니다.
코드의.

참고 Verilator는 조합(클록되지 않은) 블록이 과대 계산될 수 있습니다.
UNOPTFLAT 경고가 비활성화된 신호를 수신합니다. 가장 정확한
결과는 적용 범위를 사용할 때 이 경고를 비활성화하지 않습니다.

--커버리지-토글
신호 토글 커버리지 분석 코드가 삽입되어야 함을 지정합니다.

모듈에 있는 모든 신호의 모든 비트에는 카운터가 삽입되어 있습니다. 카운터는
해당 비트의 에지 변경마다 증가합니다.

작업 또는 시작/종료 블록의 일부인 신호는 지역 변수로 간주되며
적용되지 않습니다. 밑줄로 시작하거나 정수이거나 매우 넓은 신호
(모든 차원에서 >256비트 총 스토리지)도 다루지 않습니다.

모듈이 여러 번 인스턴스화되는 경우 계층 구조가 압축됩니다.
적용 범위는 해당 모듈의 모든 인스턴스화에서 해당 비트에 대해 합산됩니다.
동일한 매개변수 세트 다른 매개변수 값으로 인스턴스화된 모듈은
다른 모듈로 간주되며 별도로 계산됩니다.

Verilator는 신호의 클럭 도메인에 대해 최소한의 지능적인 결정을 내립니다.
가서 해당 클록 도메인의 에지만 찾습니다. 이는 가장자리가
수신 논리에서 에지를 볼 수 없다는 것이 알려진 경우 무시됩니다. 이것
알고리즘은 향후 개선될 수 있습니다. 최종 결과는 적용 범위가 다음보다 낮을 수 있다는 것입니다.
추적을 보면 알 수 있지만 적용 범위가 더 정확합니다.
디자인에 대한 자극의 품질 표현.

모델이 안정화되는 동안 시간 XNUMX 근처에서 카운트된 에지가 있을 수 있습니다. 그것은 좋은
재설정을 해제하기 직전에 모든 적용 범위를 XNUMX으로 설정하여 그러한 계산을 방지하십시오.
행동.

/*verilator coverage_off/on */ 주석 쌍은 그렇지 않은 신호 주변에서 사용할 수 있습니다.
RAM 및 레지스터 파일과 같은 토글 분석이 필요합니다.

--커버리지-밑줄
밑줄로 시작하는 신호의 범위를 활성화합니다. 일반적으로 이러한 신호는
덮여 있지 않습니다. --trace-underscore도 참조하십시오.

--커버리지-사용자
사용자가 삽입한 기능 적용 범위를 활성화합니다. 현재 모든 기능 커버리지 포인트
--assert로 별도로 활성화해야 하는 SVA를 사용하여 지정됩니다.

예를 들어, 다음 문은 주석과 함께 커버리지 포인트를 추가합니다.
"기본 시계":

DefaultClock: 커버 속성(@(posedge clk) cyc==3);

-D였다=가치
허용하지 않고 지정된 전처리기 기호를 정의합니다. +정의와 비슷합니다. +정의
-D는 GCC 호환성의 별칭인 반면 Verilog 도구에서는 상당히 표준입니다.

-디버그
Verilator의 디버그 빌드 이미지(사용 가능한 경우)를 선택하고 더 많은 내부를 활성화합니다.
어설션("--debug-check"와 동일), 디버깅 메시지("--debug-check"와 동일)
"--debugi 4") 및 중간 형식 덤프 파일("--dump-treei 3"과 동일).

--디버그 확인
드물게 필요합니다. 디버그를 변경하지 않고 내부 디버깅 어설션 검사를 활성화합니다.
다변. --debug를 지정하면 자동으로 활성화됩니다.

--debugi
--디버그-
거의 필요하지 않음 - 개발자용. 내부 디버깅 수준을 전역으로 설정합니다.
지정된 디버그 수준(1-10) 또는 지정된 Verilator 소스 파일을
지정된 수준(예: "--debugi-V3Width 9"). 레벨이 높을수록 더 자세한 정보가 생성됩니다.
메시지.

--기본 설정 언어 가치
각 Verilog 파일을 처음 처리할 때 기본적으로 사용할 언어를 선택합니다.
언어 값은 "1364-1995", "1364-2001", "1364-2005", "1800-2005"여야 합니다.
"1800-2009" 또는 "1800-2012".

특정 파일 확장자와 관련된 모든 언어(다양한 +내선+
옵션)이 --default-language로 지정된 언어보다 우선적으로 사용됩니다.

--default-language 플래그는 동일한 언어를 사용하는 레거시 코드에만 권장됩니다.
모든 소스 파일의 언어, 바람직한 옵션은 복구할 코드를 편집하는 것입니다.
새 키워드를 추가하거나 적절한 "`begin_keywords"를 추가하십시오. 레거시 혼합 언어 디자인의 경우
다양한 +ext+ 옵션을 사용해야 합니다.

언어가 지정되지 않은 경우 이 플래그 또는 +ext+ 옵션을 선택한 다음 최신
SystemVerilog 언어(IEEE 1800-2012)가 사용됩니다.

+정의+였다=가치
+정의+였다=가치+var2=값 2...
주어진 전처리기 기호 또는 더하기 기호로 구분된 경우 여러 기호를 정의합니다.
-D와 유사합니다. +define은 Verilog 도구에서 상당히 표준적인 반면 -D는 별칭입니다.
GCC 호환성을 위해.

--덤프 트리
드물게 필요합니다. 덤핑 레벨 3으로 .tree 디버그 파일 작성을 활성화합니다.
표준 중요 단계. 형식에 대한 자세한 내용은 Verilator Internals를 참조하십시오.
수동. --dump-tree는 --debug와 함께 자동으로 활성화되므로 "--debug
--no-dump-tree"는 덤프 파일이 크고 원하지 않는 경우에 유용할 수 있습니다.

--dump-treei
--덤프-트리-
거의 필요하지 않음 - 개발자용. 내부 트리 덤핑 수준을 전체적으로
특정 덤핑 레벨을 지정하거나 지정된 Verilator 소스 파일을 지정된
트리 덤핑 수준(예: "--dump-treei-V3Order 9"). 레벨 0은 덤프를 비활성화하고
"--no-dump-tree"와 동일합니다. 레벨 9는 모든 단계의 덤핑을 가능하게 합니다.

-E 소스 코드를 전처리하지만 'gcc -E'와 같이 컴파일하지 않습니다. 출력이 기록됨
표준 출력으로. 디버깅 메시지 활성화에 주의하십시오.
표준 출력.

--오류 제한
이 수의 오류 또는 경고가 발생한 후 종료하십시오. 기본값은 50입니다.

--exe
실행 파일을 생성합니다. 또한 추가 .cpp 파일을 전달해야 합니다.
시뮬레이션을 위한 메인 루프를 구현하는 명령줄.

-F 파일
지정된 파일을 읽고 그 안의 모든 텍스트가 명령으로 지정된 것처럼 작동합니다.
라인 매개변수. 모든 상대 경로는 다음을 포함하는 디렉토리에 상대적입니다.
지정된 파일. -f도 참조하십시오. 참고 -F는 Verilog 도구에서 상당히 표준입니다.

-f 파일
지정된 파일을 읽고 그 안의 모든 텍스트가 명령으로 지정된 것처럼 작동합니다.
라인 매개변수. 모든 상대 경로는 현재 디렉터리에 상대적입니다. 또한보십시오
-에프. 참고 -f는 Verilog 도구에서 상당히 표준입니다.

파일에는 줄 끝까지 무시되는 // 주석이 포함될 수 있습니다. 모든 $VAR,
$(VAR) 또는 ${VAR}는 지정된 환경 변수로 대체됩니다.

--gdb
대화형 GDB(또는 VERILATOR_GDB 환경 변수) 아래에서 Verilator 실행
값) 세션. --gdbbt도 참조하십시오.

--gdbbt
--debug가 지정된 경우 GDB 프로세스 아래에서 Verilator를 실행하고 역추적을 인쇄합니다.
종료시 GDB를 즉시 종료하십시오. --debug가 없거나 GDB가 작동하지 않는 것 같으면
이 플래그는 무시됩니다. 사용자가 백트레이스를 쉽게 생성할 수 있도록 고안되었습니다. 그렇지 않으면
--gdb 플래그를 참조하십시오.

--도움
이 메시지와 프로그램 버전을 표시하고 종료합니다.

-IDIR
-y를 참조하십시오.

--if-깊이 가치
드물게 필요합니다. IFDEPTH 경고가 발생하는 깊이를 설정합니다. 기본값은 0입니다.
이 경고를 비활성화합니다.

+incdir+DIR
-y를 참조하십시오.

--inhibit-sim
드물게 필요합니다. 평가를 활성화 및 비활성화하는 "inhibitSim(bool)" 함수를 만듭니다.
이를 통해 상위 레벨 테스트벤치는 중요하지 않은 모듈을 비활성화할 수 있습니다.
SystemC 모듈을 다시 컴파일하거나 변경할 필요 없이 주어진 시뮬레이션
인스턴스화.

--인라인 멀티 가치
모듈의 인라인을 조정합니다. 기본값 2000은 최대 2000개의 새
작업이 이 수보다 많은 경우 인라인을 통해 모델에 추가할 수 있습니다.
작업이 발생하면 모듈이 인라인되지 않습니다. 더 큰 값 또는 값 <= 1
모든 것을 인라인하고 컴파일 시간이 길어지지만 잠재적으로 더 빠를 수 있습니다.
런타임. 매우 작은 모듈의 경우 이 설정이 무시됩니다. 그들은 항상
허용되는 경우 인라인됩니다.

-LDFLAGS 플래그
생성된 메이크파일에 지정된 C 링커 플래그를 추가합니다. make가 실행될 때
생성된 메이크파일은 C++ 링커(ld)로 전달됩니다.
링크되는 파일. 이 플래그는 -LDFLAGS라고 합니다.
시뮬레이터; Makefile 변수이므로 LDLIBS라고 하는 것이 더 나을 것입니다.
제어합니다. (Make에서 LDFLAGS는 첫 번째 개체 앞에 있고 LDLIBS는 뒤에 있습니다. -L
라이브러리는 LDFLAGS가 아닌 Make 변수 LDLIBS에 있어야 합니다.)

--언어 가치
다른 도구 및 이전 버전과의 호환성을 위한 "--default-langauge"의 동의어
버전의 Verilator.

+libext+내선+내선...
모듈을 찾는 데 사용해야 하는 확장을 지정합니다. 예를 들어 모듈
x 참조, 들여다 x.내선. 참고 +libext+는 Verilog에서 상당히 표준입니다.
도구. 기본값은 .v 및 .sv입니다.

--린트 전용
린트 위반에 대해서만 파일을 확인하고 다른 출력을 생성하지 마십시오.

스타일로 간주되는 메시지를 활성화하려면 -Wall 옵션을 원할 수도 있습니다.
기본적으로 활성화되어 있지 않습니다.

디자인이 완전히 검증되지 않은 경우 --bbox-sys 및
--bbox-unsup 옵션.

--MMD
.d 의존성 파일 생성 활성화, 의존성 감지에 사용됨
gcc -MMD 옵션. 기본적으로 켜져 있으면 --no-MMD를 사용하여 비활성화합니다.

--MP
--MMD를 사용하여 .d 종속성 파일을 만들 때 가짜 대상을 만듭니다. gcc -MP와 유사
옵션을 선택합니다.

--Mdir 예배 규칙서
Make 개체 디렉터리의 이름을 지정합니다. 생성된 모든 파일이 배치됩니다.
이 디렉토리에서. 지정하지 않으면 "obj_dir"이 사용됩니다. 다음과 같은 경우 디렉토리가 생성됩니다.
존재하지 않고 상위 디렉토리가 존재합니다. 그렇지 않으면 Mdir을 수동으로 생성합니다.
Verilator를 호출하기 전에.

--mod 접두사 탑네임
모든 하위 수준 클래스 앞에 추가할 이름을 지정합니다. 기본값은 다음과 같습니다.
--접두사.

--no-clk
지정된 신호가 클록으로 표시되지 않도록 합니다. "--clk"를 참조하십시오.

--핀 없음64
"--pins-bv 33"에 대한 하위 호환 별칭입니다.

--no-건너뛰기-동일
드물게 필요합니다. 모든 소스 파일이 있는 경우 Verilator의 건너뛰기 실행을 비활성화합니다.
동일하고 모든 출력 파일이 최신 날짜로 존재합니다.

+시기 확인 확인
다른 시뮬레이터와의 호환성을 위해 무시됩니다.

-O0 모델 최적화를 비활성화합니다.

-O3 Verilator 자체가 생성하는 코드에 대해 느린 최적화를 활성화합니다(
C 컴파일러의 최적화에 영향을 미치는 "-CFLAGS -O3". -O3는 시뮬레이션을 줄일 수 있음
컴파일 시간 비용으로 런타임. 이것은 현재 --inline-mult -1을 설정합니다.

-O최적화 편지
드물게 필요합니다. 최적화와 함께 특정 최적화를 활성화 또는 비활성화합니다.
전달된 편지에 따라 선택됩니다. 소문자는 최적화를 비활성화하고
대문자로 활성화합니다. 이는 디버깅 용도로만 사용됩니다. 소스를 참조하십시오
-O 문자에 대한 최적화의 버전 종속 매핑을 위한 코드.

-영형
--exe를 사용하는 경우 빌드된 최종 실행 파일의 이름을 지정합니다. 기본값은
--지정되지 않은 경우 접두사.

--no-order-clock-delay
드물게 필요합니다. 지연된 시계 활성화 순서에 대한 버그 수정을 비활성화합니다.
과제. 이 플래그는 개발자가 제안한 경우에만 사용해야 합니다.

--출력 분할 바이트
출력 .cpp/.sp 파일을 여러 출력으로 분할할 수 있습니다. C++ 파일일 때
지정된 작업 수를 초과하면 다음에 새 파일이 생성됩니다.
기능 경계. 또한 모든 느린 루틴은 __Slow 파일에 배치됩니다.
이것은 느린 루틴에서 최적화를 비활성화할 수 있으므로 컴파일을 가속화합니다.
나머지 파일은 병렬 시스템에서 컴파일할 수 있습니다. --output-split 사용
성능에 미치는 영향은 미미합니다. 3.3GHz Opteron에서 GCC 2을 사용하면
--output-split 20000은 약 XNUMX분 컴파일로 분할됩니다.
덩어리.

--출력-분할-cfuncs
출력 .cpp/.sp 파일의 기능을 여러 기능으로 분할할 수 있습니다.
생성된 함수가 지정된 작업 수를 초과하면 새로운 함수가 생성됩니다.
생성됩니다. --output-split을 사용하면 GCC가 더 빠르게 컴파일할 수 있습니다.
분할 값이 감소함에 따라 악화되는 작은 성능 손실. 참고
이 옵션은 --output-split이 실행되지 않는다는 점에서 --output-split보다 강력합니다.
함수 내에서 분할합니다.

--출력-분할-ctrace
출력 .cpp/.sp 파일의 추적 기능을 여러 개로 분할할 수 있습니다.
기능. 기본값은 --output-split-cfuncs와 동일한 설정입니다.

-P -E를 사용하면 GCC -P 플래그와 유사하게 `라인 마커 및 빈 라인 생성을 비활성화합니다.

--pins64
"--pins-bv 65"에 대한 이전 버전과 호환되는 별칭. 참고로 65가 아니라 64입니다.

--핀-bv
보다 크거나 같은 SystemC 입력/출력을 지정합니다. 비트 와이드
uint32/vluint64_t 대신 sc_bv를 사용하십시오. 기본값은 "--pins-bv 65"입니다. 버전
Verilator 3.671 이전에는 "--pins-bv 33"이 기본값이었습니다. sc_bv를 많이 사용할수록 나빠집니다.
성능을 위해. 특정 포트를 선택하려면 "/*verilator sc_bv*/" 속성을 사용하십시오.
sc_bv가 됩니다.

--핀-sc-단위
2비트보다 큰 SystemC 입력/출력이 sc_uint를 사용해야 함을 지정합니다.
2에서 64 사이입니다. "--pins-sc-biguint" 조합과 결합하면 결과가 나타납니다.
sc_uint는 2에서 64 사이에서 사용되고 sc_biguint는 65에서 512 사이에서 사용됩니다.

--핀-sc-비긴트
65비트보다 큰 SystemC 입력/출력이 sc_biguint를 사용해야 함을 지정합니다.
65에서 512 사이, sc_bv는 513 이상입니다. 와 결합할 때
"--pins-sc-uint" 조합, sc_uint가 2에서 64 사이에서 사용되고
sc_biguint는 65에서 512 사이에서 사용됩니다.

--핀-uint8
--pins-bv 설정 및 8보다 작은 SystemC 입력/출력을 지정합니다.
비트 이하는 uint8_t 대신 uint32_t를 사용해야 합니다. 마찬가지로 너비 9-16의 핀은
uint16_t 대신 uint32_t를 사용하십시오.

--파이프 필터 명령
드물게 필요하고 실험적입니다. Verilator는 지정된 명령을
명령이 Verilog 코드에서 사용자 지정 편집을 수행할 수 있도록 하는 하위 프로세스 파이프
Verilator에 도달하기 전에.

각 Verilog 파일을 읽기 전에 Verilator는 파일 이름을 하위 프로세스에 전달합니다.
'read_verilog'가 포함된 표준입력 "'. 그런 다음 필터는 파일을 읽고 다음을 수행할 수 있습니다.
원하는 모든 필터링을 수행하고 새 파일 내용을 stdout의 Verilator에 다시 공급합니다.
'콘텐츠 길이'로. 필터에서 stderr로의 출력은 Verilator로 전달됩니다.
stdout 및 필터가 XNUMX이 아닌 상태로 종료되면 Verilator가 종료됩니다. 참조
예를 들어 t/t_pipe_filter 테스트.

필터의 출력을 디버깅하려면 -E 옵션을 사용하여 전처리된 출력을 보십시오.

--접두사 탑네임
최상위 클래스 및 메이크파일의 이름을 지정합니다. 기본값은 V 앞에 추가됨
--top-module 스위치의 이름 또는 첫 번째 Verilog 파일 이름 앞에 추가된 V
명령줄에 전달되었습니다.

--프로필-cfuncs
프로파일링을 지원하도록 생성된 C++ 함수를 수정합니다. 기능은
하나의 "기본" 문, 일반적으로 단일 항상 블록 또는 와이어를 포함하도록 최소화
성명. (이렇게 하면 실행 파일 속도가 ~5% 느려집니다.)
함수 이름에는 Verilog 모듈의 기본 이름과 줄 번호가 붙습니다.
에서 나온 발언입니다. 이를 통해 gprof 또는 oprofile 보고서를
원래 Verilog 소스 문.

--사적인
--public의 반대입니다. 기본값입니다. 이 옵션은 이전 버전과의 호환성을 위해 존재합니다.

--공공의
이는 과거 디버그 용도로만 사용됩니다. 이를 사용하면 다음을 잘못 시뮬레이션할 수 있습니다.
생성된 시계.

모든 시그널과 모듈을 public으로 선언합니다. 이것은 다음과 같이 신호 최적화를 끕니다.
모든 신호에 /*verilator public*/ 주석 및 인라인이 있는 경우. 이것도 돌게 됩니다
모든 모듈에 /*verilator public_module*/이 있는 것처럼 인라인 해제
특별히 /*verilator inline_module*로 활성화했습니다./.

--report-unoptFlat
UNOPTFLAT 경고에 대한 추가 진단. 여기에는 각 루프에 대해 가장 넓은 10개의 루프가 포함됩니다.
루프의 변수 및 루프에서 가장 많이 팬 아웃된 변수 10개. 이것들은
루프를 끊기 위해 여러 변수로 분할하기 위한 후보.

또한 강력하게 연결된 전체 구성 요소의 GraphViz DOT 파일을 생성합니다.
각 루프와 관련된 소스 내에서. 여부와 상관없이 제작됩니다.
--dump-tree가 설정됩니다. 이러한 그래프는 문제를 분석하는 데 도움이 될 수 있지만 매우 유용할 수 있습니다.
참으로 크다.

DOT 파일을 보고 조작하기 위한 다양한 명령이 있습니다. 예를 들어
인쇄를 위해 DOT 파일을 PDF로 변환하는 데 명령을 사용할 수 있습니다. 예를 들어:

도트 -Tpdf -O Vt_unoptflat_simple_2_35_unoptflat.dot

DOT 파일에서 PDF Vt_unoptflat_simple_2_35_unoptflat.dot.pdf를 생성합니다.

--저장 가능
생성된 모델에 저장 및 복원 기능을 포함하도록 활성화합니다.

사용자 코드는 VerilatedSerialize 또는 VerilatedDeserialze 객체를 생성해야 합니다.
생성된 모델 및 프로세스의 다른 데이터에서 << 또는 >> 연산자 호출
저장/복구가 필요합니다. 예를 들어:

무효 save_model(const char* filenamep) {
검증됨저장 OS;
os.open(파일명);
운영 체제 << main_time; // 사용자 코드는 타임스탬프 등을 저장해야 합니다.
os << *topp;
}
무효 복원_모델(const char* filenamep) {
검증됨복원 OS;
os.open(파일명);
운영 체제 >> main_time;
os >> *topp;
}

--sc
SystemC 출력 모드를 지정합니다. --cc도 참조하십시오.

--통계
{prefix}__stats.txt에 디자인에 대한 통계가 있는 덤프 파일을 생성합니다.

--stats-vars
크기별 모든 변수 목록을 포함하여 보다 자세한 통계를 생성합니다(일반
--stats는 카운트만 제공합니다). 이것이 암시하는 --stats를 참조하십시오.

-sv SystemVerilog 언어 기능이 활성화되어야 함을 지정합니다. "--언어
1800-2005". 이 옵션은 기본적으로 선택되며 다음과의 호환성을 위해 존재합니다.
다른 시뮬레이터.

+시스템Verilogext+내선
"+1800-2012ext+"의 동의어내선.

--상단 모듈 탑네임
입력 Verilog에 둘 이상의 최상위 모듈이 포함된 경우 다음 이름을 지정합니다.
최상위 Verilog 모듈이 최상위가 되고 if --prefix의 기본값을 설정합니다.
사용되지 않습니다. 상단이 하나만 있는 표준 디자인에는 필요하지 않습니다.

--추적하다
모델에 파형 추적 코드를 추가합니다. Verilator가 추가로 생성합니다.
컴파일해야 하는 {prefix}__Trace*.cpp 파일. 게다가
verilated_vcd_sc.cpp(SystemC 추적용) 또는 verilated_vcd_c.cpp(둘 다용)는
컴파일 및 링크. Verilator에서 생성한 Makefile을 사용하는 경우
소스 대상으로 추가되었습니다. Verilator 메이크파일을 사용하지 않는 경우
Makefile에 수동으로 추가해야 합니다.

추적을 컴파일하면 약간의 성능 손실이 발생할 수 있습니다.
모델 실행 중에는 파형이 켜지지 않습니다.

--추적 깊이 레벨
추적을 활성화할 수준 수를 지정합니다. 예를 들어 --trace-level 1을
최상위 레벨의 신호만 볼 수 있습니다. 전체 모델이 기본값입니다. 작은 숫자 사용
가시성은 떨어지지만 런타임 및 추적 파일 크기는 크게 향상됩니다.

--추적 최대 배열 깊이
드물게 필요합니다. 추적할 수 있는 신호의 최대 배열 깊이를 지정합니다.
큰 배열을 추적하면 추적된 시뮬레이션이 크게 느려질 수 있으므로 기본값은 32입니다.

--추적 최대 너비
드물게 필요합니다. 추적할 수 있는 신호의 최대 비트 폭을 지정합니다.
큰 벡터를 추적하면 추적된 시뮬레이션이 크게 느려질 수 있으므로 기본값은 256입니다.

--추적 매개변수 없음
매개변수 추적을 비활성화합니다.

--추적 구조
묶음 구조, 합집합 및 묶음 배열 필드의 이름을 표시하도록 추적을 활성화합니다.
단순한 결합 포장 버스가 아닌. VCD 파일 형식 제약으로 인해
결과적으로 추적 시간이 상당히 느려지고 추적 파일이 커집니다.

--추적-밑줄
밑줄로 시작하는 신호 추적을 활성화합니다. 일반적으로 이러한 신호는
추적 중에는 출력되지 않습니다. --coverage-underscore도 참조하십시오.

-U였다
지정된 전처리기 기호를 정의 해제합니다.

--언롤 카운트 루프
드물게 필요합니다. 언롤링될 수 있는 루프 반복의 최대 수를 지정합니다.
BLKLOOPINIT 경고도 참조하십시오.

--언롤-stmts
드물게 필요합니다. 해당 루프에 대한 루프의 최대 명령문 수를 지정합니다.
펼쳐집니다. BLKLOOPINIT 경고도 참조하십시오.

--미사용 정규식 정규 표현식
드물게 필요합니다. * 및 ?를 사용하여 간단한 정규식을 지정합니다. 신호 이름이 일치하면
UNUSED 경고를 표시하지 않습니다. 기본값은 "*미사용*"입니다. ""로 설정하면 비활성화됩니다.
어울리는.

-V로 컴파일된 구성 정보를 포함하여 상세 버전을 표시합니다.
Verilator. (perl -V와 유사합니다.)

-v 파일 이름
파일 이름을 Verilog 라이브러리로 읽습니다. 파일의 모든 모듈을 사용하여
최상위 모듈에서 셀 인스턴스화를 해결합니다. 그렇지 않으면 무시됩니다. 참고 -v는 상당히
Verilog 도구에서 표준.

+verilog1995ext+내선
+verilog2001ext+내선
"+1364-1995ext+"의 동의어내선 및 "+1364-2001내선+"내선 각기

-벽
일반적으로 비활성화되는 코드 스타일 경고를 포함하여 모든 경고를 활성화합니다.
태만.

-오류-메시지
지정된 경고 메시지를 오류 메시지로 변환합니다. 이것은 일반적으로
예를 들어 사용자가 중요한 사이트 전체 규칙을 위반하지 않도록 합니다.
"-Werror-NOUNOPTFLAT".

-W미래-메시지
드물게 필요합니다. 알 수 없는 Verilator 댓글 또는 경고 메시지를 주어진
메시지 코드. 이것은 최신 버전의 pragma로 작성된 코드를 허용하는 데 사용됩니다.
Verilator는 이전 버전에서 실행됩니다. 각 메시지 코드에 대해 -Wfuture- 인수 추가
또는 이전 버전이 지원하지 않는 것을 새 버전이 지원한다고 언급하십시오.

-아니-메시지
지정된 경고 메시지를 비활성화합니다. 이것은 다음의 모든 lint_on 지시문을 재정의합니다.
즉, 경고는 여전히 인쇄되지 않습니다.

-무보풀
모든 린트 관련 경고 메시지와 모든 스타일 경고를 비활성화합니다. 이것은 동등하다
"-Wno-ALWCOMBORDER -Wno-CASEINCOMPLETE -Wno-CASEOVERLAP -Wno-CASEX -Wno-CASEWITHX
-Wno-CMPCONST -Wno-ENDLABEL -Wno-IMPLICIT -Wno-LITENDIAN -Wno-PINCONNECTEMPTY
-Wno-핀미싱 -Wno-SYNCASYNCNET -Wno-UNDRIVEN -Wno-UNSIGNED -Wno-UNUSED -Wno-WIDTH"
Wno 스타일에 대한 목록이 표시됩니다.

이 옵션을 사용하는 것보다 코드를 정리하는 것이 좋습니다.
제XNUMX자로부터 받은 코드의 테스트 사례를 실행할 때만 사용하기 위한 것입니다.

-Wno 스타일
모든 코드 스타일 관련 경고 메시지를 비활성화합니다(기본적으로 경고 메시지는 이미
장애가 있는). 이는 "-Wno-DECLFILENAME -Wno-DEFPARAM -Wno-INCABSPATH"와 동일합니다.
-Wno-PINCONNECTEMPTY -Wno-PINNOCONNECT -Wno-SYNCASYNCNET -Wno-UNDRIVEN -Wno-사용되지 않음
-Wno-VARHIDDEN".

-치명적
경고가 감지되면 인쇄하되 시뮬레이터를 종료하지 마십시오.

빌드에 경고 메시지가 표시되는 것은 조잡합니다. 정리하는 것이 좋습니다.
인라인 lint_off를 사용하거나 이 옵션을 사용하는 대신 -Wno-... 플래그를 사용하십시오.

-경고-메시지
지정된 경고 메시지를 활성화합니다.

-경고 린트
린트 관련 경고 메시지를 모두 활성화합니다(기본적으로 이미 활성화되어 있음).
그러나 스타일 메시지에는 영향을 주지 않습니다. 이는 "-Wwarn-ALWCOMBORDER
-Wwarn-CASEINCOMPLETE -Wwarn-CASEOVERLAP -Wwarn-CASEX -Wwarn-CASEWITHX -Wwarn-CMPCONST
-Wwarn-ENDLABEL -Wwarn-IMPLICIT -Wwarn-LITENDIAN -Wwarn-PINMISSING -Wwarn-REALCVT
-Wwarn-UNSIGNED -Wwarn-WIDTH".

-경고 스타일
모든 코드 스타일 관련 경고 메시지를 활성화합니다. 이는 "-Wwarn
ASSINDLY -Wwarn-DECLFILENAME -Wwarn-DEFPARAM -Wwarn-INCABSPATH -Wwarn-PINNOCONNECT
-Wwarn-SYNCASYNCNET -Wwarn-UNDRIVEN -Wwarn-UNUSED -Wwarn-VARHIDDEN".

--x-지정 0
--x-지정 1
--x-assign fast(기본값)
--x-할당 고유
X에 대한 할당이 발생할 때 대체되는 두 가지 상태 값을 제어합니다.
--x-assign=fast, 기본값은 모든 X를 성능에 가장 적합한 것으로 변환합니다.
--x-assign=0은 모든 X를 0으로 변환하며 또한 빠릅니다. --x-assign=1 모든 X를 다음으로 변환
1s, 이것은 거의 0만큼 빠르지만 재설정 버그를 활성 높음으로 찾을 가능성이 더 높습니다.
논리가 발동합니다. --x-assign=unique는 값을 결정하는 함수를 호출합니다.
재설정 버그를 찾기 위해 모든 X의 무작위화를 허용하고 가장 느리지만 가장 안전합니다.
코드에서 리셋 버그 찾기.

--x-assign unique를 사용하는 경우 다음과 같은 난수 생성기를 시드할 수 있습니다.
각 회귀 실행은 서로 다른 무작위 순서를 얻습니다. 시스템의
srand48() 또는 Windows용 srand () 이를 수행하는 기능. 당신은 아마 또한 원할 것입니다
선택한 시드를 인쇄하고 동일한 시드를 사용하여 재실행할 수 있도록 코드를 작성하여 다음을 수행할 수 있습니다.
버그를 재현합니다.

참고. 이 옵션은 다음에서 X에 명시적으로 할당된 변수에만 적용됩니다.
Verilog 소스 코드. --x-initial-edge가 아닌 경우 클록의 초기 값은 0으로 설정됩니다.
지정된. 다른 모든 상태 유지 변수의 초기 값은 다음과 같이 설정됩니다.
--x-assign unique가 지정되었습니다.

--x-초기 가장자리
일반적으로 에지를 트리거하는 이벤트 기반 시뮬레이터의 에뮬레이션을 활성화합니다.
X에서 1로("posedge") 또는 X에서 0으로("negedge") 전환합니다. 따라서 다음 코드는
"rst_n"이 초기화되지 않은 경우 "rst_n"이 처음 설정되면 "res_n"이 "1'b1"로 설정됩니다.
XNUMX으로:

reg res_n = 1'b0;

항상 @(negedge rst_n) 시작
if (rst_n == 1'b0) 시작
res_n <= 1'b1;
end
end

Verilator에서는 기본적으로 초기화되지 않은 시계에 XNUMX 값이 지정되므로 위의
"항상" 차단은 트리거되지 않습니다.

좋은 방법은 아니지만 XX 0에 의존하여
특히 리셋 시퀀스에서 "negedge". --x-initial-edge를 Verilator와 함께 사용하면
이 동작을 복제합니다. 또한 XX 1이 "posedge"를 트리거하도록 합니다.

참고. 일부 사용자는 이 옵션을 사용하면 수렴에 영향을 줄 수 있으며
수렴 횟수를 늘리려면 --converge-limit를 사용해야 할 수 있습니다.
반복. 이는 모델링된 설계에 문제가 있음을 나타내는 또 다른 표시일 수 있습니다.
해결되어야한다.

-y DIR
포함 파일을 검색해야 하는 디렉토리 목록에 디렉토리를 추가하십시오.
또는 도서관. 세 개의 플래그 -y, +incdir 및 -I는 유사한 효과를 가집니다. +incdir 및 +y
-I는 GCC 호환성의 별칭인 반면 Verilog 도구에서 상당히 표준입니다.

Verilator는 현재 디렉토리("-y .") 및 지정된 --Mdir을 기본값으로 사용하지만
이러한 기본 경로는 사용자가 지정한 디렉터리 뒤에 사용됩니다. 이렇게 하면 '-y
"$(pwd)"'는 오류 메시지 대신 절대 파일 이름이 필요한 경우 사용됩니다.
상대 파일 이름.

C + + 실행


이 예제를 C++로 컴파일합니다.

mkdir test_our
CD 테스트_우리

고양이 < 우리.v
모듈 우리;
초기 시작 $display("Hello World"); $마무리; 끝
끝단
EOF

고양이 < sim_main.cpp
#include "Vour.h"
#include "verilated.h"
int main(int argc, char **argv, char **env) {
확인됨::commandArgs(argc, argv);
Vour* top = 새로운 Vour;
while (!Verilated::gotFinish()) { top->eval(); }
상단 삭제;
출구(0);
}
EOF

소스 또는 tarball에서 Verilator를 설치했지만 운영 체제의 일부가 아닌 경우
시스템(RPM으로), 먼저 키트를 가리켜야 합니다.

내보내기 VERILATOR_ROOT=/path/to/where/verilator/was/installed
내보내기 경로=$VERILATOR_ROOT/bin:$PATH

이제 작은 예제에서 Verilator를 실행합니다.

검증기 -Wall --cc our.v --exe sim_main.cpp

"obj_dir" 디렉토리에서 소스 코드를 볼 수 있습니다. 아래의 파일 섹션을 참조하십시오.
생성된 일부 파일에 대한 설명입니다.

ls -l obj_dir

그런 다음 컴파일할 수 있습니다.

CD obj_dir
make -j -f Vour.mk Vour

(Verilator에는 --exe를 사용하고
Verilator 명령줄의 .cpp 파일. 다음과 같이 자신만의 컴파일 규칙을 작성할 수도 있습니다.
SYSTEMC 섹션에 표시됩니다.)

그리고 이제 우리는 그것을 실행

CD ..
obj_dir/Vour

그리고 우리는 출력으로 얻습니다

안녕하세요
- our.v:2: Verilog $finish

실제로 이 모든 작업을 수행하려면 Makefile을 작성하는 것이 좋습니다. 그런 다음 귀하의
소스가 변경되면 이러한 모든 단계가 자동으로 실행됩니다. 에서 test_c 디렉토리를 참조하십시오.
예를 들어 분포.

시스템 실행


이것은 위와 유사하지만 SystemC를 사용하는 예입니다.

mkdir test_our_sc
CD test_our_sc

고양이 < 우리.v
모듈 우리(clk);
입력 clk; // 초기 활성화를 위해서는 시계가 필요합니다.
항상 @ (포즈지 clk)
$display("Hello World") 시작; $마무리; 끝
끝단
EOF

고양이 < sc_main.cpp
#include "Vour.h"
int sc_main(int argc, char **argv) {
확인됨::commandArgs(argc, argv);
sc_clock clk ("clk",10, 0.5, 3, 참);
Vour* 최고;
top = new Vour("상단"); // SP_CELL(상단, Vour);
상단->clk(clk); // SP_PIN(탑, clk, clk);
while (!Verilated::gotFinish()) { sc_start(1, SC_NS); }
상단 삭제;
출구(0);
}
EOF

소스 또는 tarball에서 Verilator를 설치했지만 운영 체제의 일부가 아닌 경우
시스템(RPM으로), 먼저 키트를 가리켜야 합니다.

내보내기 VERILATOR_ROOT=/path/to/where/verilator/was/installed
내보내기 경로=$VERILATOR_ROOT/bin:$PATH

이제 작은 예제에서 Verilator를 실행합니다.

Verilator -Wall --sc our.v

그런 다음 컴파일할 수 있습니다.

make -j -f Vour.mk Vour__ALL.a
make -j -f Vour.mk ../sc_main.o verilated.o

그리고 SystemC와 연결합니다. 라이브러리에 대한 경로는 다음에 따라 다를 수 있습니다.
운영 체제.

내보내기 SYSTEMC_LIBDIR=/path/to/where/libsystemc.a/exists
내보내기 LD_LIBRARY_PATH=$SYSTEMC_LIBDIR:$LD_LIBRARY_PATH
# SystemC 2.3.0인 경우 필요할 수 있음
내보내기 SYSTEMC_CXX_FLAGS=-pthread

g++ -L$SYSTEMC_LIBDIR ../sc_main.o Vour__ALL*.o 검증됨.o
-o -lsystemc를 확인하세요.

그리고 이제 우리는 그것을 실행

CD ..
obj_dir/Vour

그리고 C++ 예제와 동일한 출력을 얻습니다.

안녕하세요
- our.v:2: Verilog $finish

이 모든 작업을 수행하려면 Makefile을 사용하는 것이 좋습니다. 그런 다음 소스가
변경하면 이러한 모든 단계가 자동으로 실행됩니다. test_sc 디렉토리를 참조하십시오.
예를 들어 배포.

벤치마킹 & 최적화


최상의 성능을 위해 Verilator를 "-O3 --x-assign=fast --noassert" 플래그와 함께 실행하십시오. 그만큼
-O3 플래그는 더 긴 컴파일 시간이 필요하며 --x-assign=fast는
성능을 위해 버그를 재설정합니다. 이러한 플래그에 대해서는 위의 문서를 참조하세요.

사소한 Verilog 코드 변경도 큰 성과를 가져올 수 있습니다. UNOPTFLAT가 없어야 합니다.
Verilator의 경고. 이러한 경고를 수정하면 크게 개선될 수 있습니다. 한 명의 사용자
게이트에 사용되는 클록 래치를 간단히 변경하여 하나의 UNOPTFLAT 경고를 수정했습니다.
60%의 성능 향상을 얻었습니다.

그 외에도 Verilated 모델의 성능은 주로 C++ 컴파일러와
CPU 캐시의 크기.

기본적으로 lib/verilated.mk 파일은 최적화가 꺼져 있습니다. 이것은
런타임 비용으로 컴파일 시간을 개선하므로 신규 사용자에게 이점이 있습니다. 추가하려면
최적화를 기본값으로 설정하고 OPT, OPT_FAST 또는 OPT_SLOW의 세 가지 변수 중 하나를 설정합니다.
lib/verilated.mk. 또는 Verilator 명령에서 -CFLAGS 및/또는 -LDFLAGS 옵션을 사용하십시오.
플래그를 컴파일러 또는 링커에 직접 전달하는 라인. 또는 한 번만 실행하려면 통과하십시오.
명령줄에서 다음을 수행합니다.

make OPT_FAST="-O2" -f Vour.mk Vour__ALL.a

OPT_FAST는 대부분 빠른 경로의 일부인 프로그램에 대한 최적화를 지정합니다.
주기마다 실행되는 코드. OPT_SLOW는 느린 경로 파일에 대한 최적화를 지정합니다.
(추적 포함) 거의 실행되지 않지만 컴파일하는 데 오랜 시간이 걸립니다.
최적화를 켭니다. OPT는 전반적인 최적화를 지정하고 다음을 포함한 모든 컴파일에 영향을 미칩니다.
OPT_FAST 및 OPT_SLOW가 영향을 미칩니다. 최상의 결과를 얻으려면 OPT="-O2"를 사용하고
"-공전". 훨씬 더 나은 컴파일 시간으로 거의 동일한 결과를 얻을 수 있습니다.
OPT_FAST="-O1 -fstrict-aliasing". "-O3"와 같은 더 높은 최적화가 도움이 될 수 있지만 gcc
중간 크기의 디자인에서도 O3에서는 컴파일 시간이 과도할 수 있습니다. 또는 일부
더 큰 디자인은 "-Os"를 사용하여 더 나은 성능을 보고합니다.

불행하게도, SystemC 파일과 함께 옵티마이저를 사용하면 컴파일이 지연될 수 있습니다.
몇 분. (SystemC 라이브러리에는
컴파일러 너트.)

최상의 결과를 얻으려면 GCC 3.3 이상을 사용하십시오. GCC 3.2 및 이전 버전에는 최적화 버그가 있습니다.
2배의 성능 손실을 초래할 수 있는 포인터 앨리어싱 감지.

단일 컴파일에서 많은 시뮬레이션을 실행하는 경우 피드백 기반 조사
편집. GCC에서 -fprofile-arcs를 사용하면 -fbranch-probabilities가 생성됩니다.
또 15% 정도.

최신 컴파일러는 링크 타임 최적화(LTO)도 지원하므로 특히 다음과 같은 경우에 도움이 될 수 있습니다.
DPI 코드로 연결합니다. GCC에서 LTO를 활성화하려면 컴파일과 링크 모두에서 "-flto"를 전달하십시오.
참고 LTO는 대규모 디자인에서 과도한 컴파일 시간을 유발할 수 있습니다.

자신의 메이크파일을 사용하는 경우 다음을 사용하여 Verilated 코드를 컴파일할 수 있습니다.
-DVL_INLINE_OPT=인라인. 이것은 함수를 인라인하지만 모든 cpp가 필요합니다.
파일은 단일 컴파일러 실행에서 컴파일됩니다.

Verilog 코드를 프로파일링하여 추가 조정 가능성을 발견할 수 있습니다. 사용
Verilator의 --profile-cfuncs, GCC의 -g -pg. 그런 다음 oprofile 또는
gprof는 C++ 코드에서 시간이 소요되는 위치를 확인합니다. 다음을 통해 gprof 출력 실행
verilator_profcfunc 그리고 대부분의 Verilog 행 번호를 알려줍니다.
시간을 보내고 있습니다.

완료되면 저자에게 결과를 알려주십시오. Verilator가 어떻게 작동하는지 확인하고 싶습니다.
비교하고 추가 개선 사항을 제안할 수 있습니다.

onworks.net 서비스를 사용하여 온라인으로 verilator_bin_dbg를 사용하세요.



최신 Linux 및 Windows 온라인 프로그램