시스템 Verilog
SystemVerilog패러다임 | 구조화(설계) 오브젝트 지향(검증) |
---|---|
설계자 | Synopsys, 이후 IEEE |
처음 등장한 | 전( |
안정된 릴리스 | IEEE 1800-2017 / 2018년 2월 , 전( |
타이핑 분야 | 정전기, 약기 |
파일 이름 확장자 | .timeout, .timeouth |
영향을 받다 | |
설계: Verilog, VHDL, C++, 검증:OpenVera, Java |
IEEE 1800으로 표준화된 SystemVerilog는 전자 시스템의 모델링, 설계, 시뮬레이션, 테스트 및 구현에 사용되는 하드웨어 기술 및 하드웨어 검증 언어입니다.SystemVerilog는 Verilog 및 일부 확장을 기반으로 하며 2008년부터 Verilog는 동일한 IEEE 표준의 일부가 되었습니다.Verilog의 진화로 반도체 및 전자 설계 업계에서 일반적으로 사용됩니다.
역사
SystemVerilog는 2002년 스타트업 회사인 Co-Design [1]Automation에 의해 Accellera에 Superlog 언어를 기증하면서 시작되었습니다.검증 기능의 대부분은 Synopsys가 기증한 OpenVera 언어를 기반으로 합니다.2005년에 SystemVerilog는 IEEE 표준 1800-2005로 [2]채택되었습니다.2009년에 이 표준은 기본 Verilog(IEEE 1364-2005) 표준과 병합되어 IEEE 표준 1800-2009가 작성되었습니다.현재 버전은 IEEE 표준 1800-2017입니다.[3]
SystemVerilog 의 기능 세트는, 다음의 2개의 다른 롤로 나눌 수 있습니다.
- SystemVerilog for Register-Transfer Level(RTL; 등록 전송 수준) 설계는 Verilog-2005의 확장판입니다.이 언어의 모든 기능은 SystemVerilog에서 사용할 수 있습니다.따라서 Verilog는 SystemVerilog의 서브셋입니다.
- 검증을 위한 SystemVerilog는 광범위한 객체 지향 프로그래밍 기술을 사용하며 Verilog보다 Java와 더 밀접하게 관련되어 있습니다.이 구성들은 일반적으로 합성할 수 없다.
이 문서의 나머지 부분에서는 Verilog-2005에는 없는 SystemVerilog의 기능에 대해 설명합니다.
설계 기능
data 라이프 타임
SystemVerilog에는 스태틱과 자동의 두 가지 유형의 데이터가 지정되어 있습니다.자동변수는 프로그램 실행이 변수의 범위에 도달하는 순간 생성됩니다.정적 변수는 프로그램 실행 시작 시 생성되며 실행 중에 새 값이 할당되지 않는 한 전체 프로그램 수명 동안 동일한 값을 유지합니다.
유형을 지정하지 않고 작업 또는 함수 내에서 선언된 변수는 자동으로 간주됩니다.변수가 정적임을 지정하려면 "static
예를 들어, "와 같이 형식 앞의 선언에 키워드를 입력합니다.static int x;
". "automatic
키워드도 같은 방법으로 사용됩니다.
새로운 데이터 유형
확장된 변수 유형은 Verilog의 "reg" 유형에 새로운 기능을 추가합니다.
논리 [31:0] my_var;
Verilog-1995 및 -2001은 RTL 코드 등의 동작문으로 reg 변수를 제한합니다.SystemVerilog는 게이트나 모듈 등의 단일 드라이버로 구동할 수 있도록 레지스트리 유형을 확장합니다.SystemVerilog는 이 타입에 "logic"이라는 이름을 붙입니다.이는 이 기능이 추가되어 하드웨어 레지스터가 아님을 사용자에게 알리기 위해서입니다."logic"과 "reg"는 서로 바꿔 사용할 수 있습니다.복수의 드라이버를 가지는 신호(일반적인 입출력용의 3 스테이트 버퍼등)는, 「와이어」등의 넷 타입으로 선언할 필요가 있기 때문에, SystemVerilog 는 최종치를 해결할 수 있습니다.
다차원 패킹 어레이는 Verilog의 "레지스터" 및 "메모리" 개념을 통합하고 확장합니다.
논리 [1:0][2:0] my_pack[32];
Classic Verilog에서는 변수 이름의 왼쪽에 하나의 차원만 선언할 수 있습니다.SystemVerilog는 이러한 "패킹된" 치수를 얼마든지 허용합니다.패킹 배열 유형의 변수는 1:1로 정수 연산량을 매핑한다.위의 예에서 각 요소는my_pack
식에서 6비트 정수로 사용할 수 있습니다.이름 오른쪽에 있는 치수(이 경우 32)를 "패킹되지 않은" 치수라고 합니다.Verilog-2001에서와 같이 포장되지 않은 치수는 얼마든지 허용된다.
열거된 데이터 유형(enums
)를 사용하면 수치로 의미 있는 이름을 할당할 수 있습니다.열거형식으로 선언된 변수는 캐스팅하지 않고 열거형식이 다른 변수에 할당할 수 없습니다.이는 Verilog-2005에서 열거된 수량에 대해 선호되는 구현 기법이었던 매개변수에는 해당되지 않는다.
유형화된 열거하다 논리 [2:0] { 빨간., 초록의, 파랑색, 시안, 마젠타, 노란 색 } color_t; color_t my_color(컬러) = 초록의; 초기의 $표시("색상은 %s", my_color(컬러).이름.());
위와 같이 설계자는 기본 산술 유형을 지정할 수 있습니다.logic [2:0]
이 경우)는 열거값을 나타내기 위해 사용됩니다.여기서 메타값 X 및 Z를 사용할 수 있습니다.부정 상태를 나타낼 수도 있습니다.내장 기능name()
는 현재 열거된 값의 ASCII 문자열을 반환합니다.이 값은 검증 및 테스트에 도움이 됩니다.
새 정수 유형:SystemVerilog 정의byte
,shortint
,int
그리고.longint
각각 8, 16, 32 및 64비트를 가진 2스테이트 부호 적분형으로서 사용됩니다.abit
type은 가변폭의 2스테이트 타입으로 다음과 같이 동작합니다.logic
2가지 상태 유형에는 기존 Verilog의 X 및 Z 메타값이 없습니다.이러한 유형을 사용하면 시뮬레이션을 고속화할 수 있습니다.
구조와 조합은 C 프로그래밍 언어에서와 같이 작동합니다.SystemVerilog 확장 기능에는 패킹된 Atribut과 태그 부착 Atribut이 포함됩니다.그tagged
attribute를 사용하면 현재 사용 중인 유니언 멤버를 런타임 트래킹할 수 있습니다.그packed
attribute를 지정하면 구조 또는 결합이 1:1로 패킹된 비트 배열에 매핑됩니다.의 내용struct
데이터 타입은 C 및 C++의 비트필드와 마찬가지로 공백이 없는 메모리의 연속 블록을 점유합니다.
유형화된 구조 포장된 { 조금 [10:0] 엑스포; 조금 서명하다; 조금 [51:0] 맨트; } FP; FP 영 = 64'b0;
이 예에서 보듯이 SystemVerilog는 C 및 C++와 같이 typedef도 지원합니다.
절차 블록
SystemVerilog에서는 하드웨어 모델링을 목적으로 한3가지 새로운 프로시저 블록이 도입되었습니다.always_comb
(조합 로직을 모델링하기 위해),always_ff
(플립 플랍용) 및always_latch
(래치의 경우).반면 Verilog는 1개의 범용 용도를 사용했습니다.always
다양한 유형의 하드웨어 구조를 모델링하기 위한 블록입니다.SystemVerilog의 새로운 블록은 블록에 의해 기술된 하드웨어가 모델의 의도된 용도와 일치하도록 의미 제한을 가함으로써 특정 유형의 하드웨어를 모델링하기 위한 것입니다.HDL 컴파일러 또는 검증 프로그램은 의도된 유형의 동작만 발생하도록 추가 절차를 수행할 수 있습니다.
안always_comb
블록 모델 조합 로직.시뮬레이터는 포함된 문장에서 민감도 목록을 모든 변수로 추론합니다.
항상 콤비 시작한다. tmp = b * b - 4 * a * c; no_root = (tmp < > 0); 끝.
안always_latch
블록 모델의 레벨 감지 래치.다시, 감도 리스트는, 코드에서 유추됩니다.
항시_항상_항상_항상 한다면 (en) q <=> d;
안always_ff
블록 모델은 동기 로직(특히 에지-센서티브 등가 로직):
항상_ff @(엣지 째깍째깍 소리를 내다) 세어보세요 <=> 세어보세요 + 1;
EDA(Electronic Design Automation) 도구는 하드웨어 모델이 블록 사용 시멘틱스를 위반하지 않는지 확인함으로써 설계의 의도를 확인할 수 있습니다.예를 들어, 새로운 블록은 하나의 소스만 허용함으로써 변수에 대한 할당을 제한하는 반면, Verilog의 블록은always
여러 절차 소스에서 허용된 할당을 차단합니다.
인터페이스
소형 설계의 경우 Verilog 포트는 모듈 및 주변 환경과의 연결을 간략하게 설명합니다.그러나 대규모 설계 계층 내의 주요 블록에는 일반적으로 수천 개의 포트 수가 있습니다.SystemVerilog는 접속 모듈 간의 포트명 선언의 용장성뿐만 아니라 그룹 및 추상 관련 신호의 사용자 선언 번들에 대한 용장성을 줄이기 위해 인터페이스 개념을 도입했습니다.추가 개념은 modport로, 로직 접속의 방향을 나타냅니다.
예:
인터페이스 내부; 논리 a; 논리 b; 모듈 포트 에 (입력 a, 산출량 b); 모듈 포트 나가. (입력 b, 산출량 a); 엔드 인터페이스 모듈 정상; 내부 i (); u_a m1 (.i1(i.에)); u_b m2 (.i2(i.나가.)); 엔드 모듈 모듈 u_a (내부.에 i1); 엔드 모듈 모듈 u_b (내부.나가. i2); 엔드 모듈
검증 기능
다음의 검증 기능은, 통상은 합성할 수 없습니다.즉, HDL 코드에 근거해 하드웨어에 실장할 수 없습니다.대신 확장 가능하고 유연한 테스트 벤치를 만드는 데 도움이 됩니다.
새로운 데이터 유형
그string
data type은 가변 길이의 텍스트 문자열을 나타냅니다.예를 들어 다음과 같습니다.
스트링 s1 = "안녕하세요"; 스트링 s2 = "세계"; 스트링 p = ".?!"; 스트링 s3 = {s1, ", ", s2, p[2]}; // 문자열 연결 $표시([%d] %s, s3.렌(), s3); // 시뮬레이션에서 다음과 같이 인쇄됩니다. "[13] 안녕, 세상아!"
설계에 사용되는 정적 어레이와 더불어 SystemVerilog는 동적 어레이, 관련지어 어레이 및 큐를 제공합니다.
인트 cmdline_module; // 동적 배열 요소 수 인트 다[]; // 동적 배열 인트 ai[인트]; // 연관 배열, int에 의해 인덱싱됨 인트 ~하듯이[스트링]; // 문자열로 인덱싱된 연관 배열 인트 qa[$]; // 큐, 어레이 또는 임베디드 메서드로 인덱싱 초기의 시작한다. cmdline_module = 16; 다 = 신규[ cmdline_module ]; // 16개의 요소로 어레이 할당 끝.
다이내믹 어레이는 언팩된 어레이와 매우 유사하지만 런타임에 동적으로 할당된다는 장점이 있습니다(위 그림 참조).패킹된 배열의 크기는 컴파일 시(정수식 또는 상수식을 통해) 알아야 하지만 동적 배열 크기는 다른 런타임 변수에서 초기화할 수 있으므로 필요에 따라 어레이의 크기와 크기를 임의로 조정할 수 있습니다.
연관 배열은 사용자 지정 키 유형 및 데이터 유형을 가진 이진 검색 트리로 간주할 수 있습니다.키는 순서를 나타냅니다.관련 배열의 요소는 사전순으로 읽을 수 있습니다.마지막으로 큐는 C++ STL deque 유형의 많은 기능을 제공합니다.즉, 요소를 효율적으로 추가 및 삭제할 수 있습니다.이러한 기본 요소를 통해 대규모 설계에 스코어 보드에 필요한 복잡한 데이터 구조를 생성할 수 있습니다.
반
SystemVerilog는 객체 지향 프로그래밍 모델을 제공합니다.
SystemVerilog에서는 클래스는 단일 상속 모델을 지원하지만, 이른바 "인터페이스 클래스"를 사용함으로써 다중 상속과 유사한 기능을 구현할 수 있습니다(이러한 개념은interface
Java의 기능)C++ 템플릿의 기본 기능을 제공하는 클래스는 유형별로 매개 변수를 지정할 수 있습니다.단, 템플릿 지정 및 함수 템플릿은 지원되지 않습니다.
SystemVerilog의 다형성 특징은 C++의 다형성 특징과 유사합니다: 프로그래머는 특별히 다음을 작성할 수 있습니다.virtual
함수에 대한 파생 클래스 게인 컨트롤을 가지기 위한 함수입니다.자세한 내용은 가상 기능을 참조하십시오.
캡슐화와 데이터 은닉은local
그리고.protected
키워드: 숨길 항목에 적용해야 합니다.기본적으로 모든 클래스 속성은 공용입니다.
클래스 인스턴스는 를 사용하여 동적으로 생성됩니다.new
키워드를 지정합니다.에 의해 나타나는 컨스트럭터function new
정의할 수 있습니다.SystemVerilog에는 자동 가비지 수집 기능이 있으므로 새 오퍼레이터에 의해 생성된 인스턴스를 명시적으로 파기할 언어 기능은 없습니다.
예:
가상 학급 기억; 가상 기능. 조금 [31:0] 읽어주세요(조금 [31:0] 주소); 기능 종료 가상 기능. 무효 쓰다(조금 [31:0] 주소, 조금 [31:0] 데이터.); 기능 종료 엔드클래스 학급 SRAM #(파라미터 하지 않다=10) 확장 기억; 조금 [31:0] 메모리 [1<< >하지 않다]; 가상 기능. 조금 [31:0] 읽어주세요(조금 [31:0] 주소); 돌아가다 메모리[주소]; 기능 종료 가상 기능. 무효 쓰다(조금 [31:0] 주소, 조금 [31:0] 데이터.); 메모리[주소] = 데이터.; 기능 종료 엔드클래스
제약된 랜덤 생성
클래스 정의 또는 일부 어휘적 범위에서 독립형 변수로 정의된 정수량은 일련의 제약 조건에 따라 랜덤 값을 할당할 수 있습니다.이 기능은 검증용으로 랜덤화된 시나리오를 작성할 때 유용합니다.
클래스 정의 내에서rand
그리고.randc
수정자 신호 변수를 랜덤화할 수 있습니다. randc
는 치환 기반의 랜덤화를 지정합니다.변수는 값이 반복되기 전에 가능한 모든 값을 1회 사용합니다.수식자가 없는 변수는 랜덤화되지 않습니다.
학급 eth_frame; 랜드 조금 [47:0] 증류; 랜드 조금 [47:0] src; 랜드 조금 [15:0] f_type; 랜드 바이트 페이로드[]; 조금 [31:0] fcs; 랜드 조금 [31:0] fcs_filename(fcs_filename); 제약 기본의 { 페이로드.크기 안에서. {[46:1500]}; } 제약 good_fr { fcs_filename(fcs_filename) == 0; } 엔드클래스
이 예에서는fcs
필드는 랜덤화되지 않습니다.실제로 CRC 생성기를 사용하여 계산됩니다.fcs_corrupt
필드를 파괴하여 FCS 오류를 주입하기 위해 사용합니다.다음 2가지 제약사항은 준거 이더넷프레임에도 적용됩니다.제약조건을 선택적으로 이노블로 할 수 있습니다.위의 예에서는 파손된 프레임을 생성하기 위해 이 기능이 필요합니다.제약조건은 변수, 시사 및 반복 간의 상호 관계를 포함하여 임의로 복잡할 수 있습니다.SystemVerilog 제약 해결사는 솔루션을 찾기 위해 필요합니다.단, 일반적으로는 NP-하드 문제(부울의 충족 가능성)이기 때문에 필요한 시간에 대해서는 보증하지 않습니다.
랜덤화 방식
각 SystemVerilog 클래스에는 pre_randomize, randomize 및 post_randomize의 3가지 랜덤화 방법이 미리 정의되어 있습니다.사용자가 클래스 변수를 랜덤화하기 위해 랜덤화 메서드를 호출합니다.pre_randomize 메서드는 랜덤화 전에 랜덤화 메서드에 의해 호출되며 post_randomize 메서드는 랜덤화 후에 랜덤화 메서드에 의해 호출됩니다.
학급 eth_frame; 랜드 조금 [47:0] 증류; 랜드 조금 [47:0] src; 랜드 조금 [15:0] f_type; 랜드 바이트 페이로드[]; 조금 [31:0] fcs; 랜드 조금 파손된 프레임; 제약 기본의 { 페이로드.크기 안에서. {[46:1500]}; } 기능. 무효 post_inflicize(포스트_inflicize 후() 이것..계산_fcs(); // 임의 프레임에 따라 fcs 필드를 업데이트합니다. 한다면 (파손된 프레임) // 이 프레임이 파손되어야 하는지 여부 이것..파손된_fcs(); // fcs가 파손되었습니다. 기능 종료 엔드클래스
제약의 제어
restraint_mode() 및 random_mode() 메서드는 랜덤화를 제어하기 위해 사용됩니다.contraint_mode()는 특정 제약 조건을 켜고 끄기 위해 사용되며 random_mode는 특정 변수의 랜덤화를 켜거나 끄기 위해 사용됩니다.다음 코드는 이더넷프레임의 설명과 테스트 순서를 나타내고 있습니다.
학급 eth_frame; 랜드 조금 [47:0] 증류; 랜드 조금 [47:0] src; 랜드 조금 [15:0] f_type; 랜드 바이트 페이로드[]; 조금 [31:0] fcs; 랜드 조금 파손된 프레임; 제약 기본의 { 페이로드.크기 안에서. {[46:1500]}; } 제약 1_src_cst { src == 48'h1f00 } 제약 dist_to_fcs { fcs 일그러뜨리다 {0:/30,[1:2500]:/50}; // 30 및 50은 가중치입니다(이 예에서는 30/80 또는 50/80). } 엔드클래스 . . . eth_frame my_frame; my_frame.1_src_cst.contrastraint_mode(0); // 제약 조건 1_src_cst는 고려되지 않습니다. my_frame.f_type.랜덤 모드(0); // 이 프레임인스턴스에 대해 f_type 변수는 랜덤화되지 않습니다. my_frame.무작위화하다();
어설션
어설션은 특정 조건 또는 상태에 도달한 후 나타나는 설계의 속성을 확인하는 데 유용합니다.SystemVerilog에는 속성 사양 언어와 유사한 자체 어설션 사양 언어가 있습니다.어설션을 제공하는 SystemVerilog 언어 구조의 서브셋은 일반적으로 SystemVerilog Assertion 또는 [4]SVA라고 불립니다.
SystemVerilog 어설션은 시퀀스 및 속성에서 구축됩니다.속성은 시퀀스의 슈퍼셋입니다.모든 시퀀스는 속성인 것처럼 사용할 수 있습니다.다만, 이것은 통상은 유용하지 않습니다.
시퀀스는 시간 연산자로 증강된 부울식으로 구성됩니다.가장 단순한 시간 연산자는##
연결을 [clarification needed]수행하는 연산자:
순서 S1; @(엣지 째깍째깍 소리를 내다) 요구하다 ##1 gnt; 엔드시퀀스
이 시퀀스는, 다음의 경우에 일치합니다.gnt
신호는 클럭 사이클 1회 후에 하이 상태가 된다.req
높아요.모든 시퀀스 조작은 클락에 동기화됩니다.
다른 순차 연산자에는 반복 연산자와 다양한 연결사가 포함됩니다.이러한 연산자를 통해 설계자는 설계 구성요소 간의 복잡한 관계를 표현할 수 있습니다.
어설션은 시퀀스 또는 속성을 지속적으로 평가함으로써 작동합니다.속성이 실패하면 어설션이 실패합니다.위의 시퀀스는 항상 실패합니다.req
낮습니다.다음과 같은 요건을 정확하게 표현한다.gnt
팔로우req
속성이 필요합니다.
소유물 요구 사항; @(엣지 째깍째깍 소리를 내다) 요구하다 => gnt; 엔드 프로퍼티 assert_req_gnt: 주장하다 소유물 (요구 사항) 또 다른 $에러("요구에 gnt가 뒤따르지 않습니다.");
다음 예에서는 암시 연산자를 보여 줍니다. =>
암시의 왼쪽에 있는 절을 선행절, 오른쪽에 있는 절을 결과절이라고 합니다.암시에 대한 평가는 선행 조건을 평가하기 위한 반복적인 시도를 통해 시작됩니다.선행어가 성공했을 때, 결과가 시도되고, 주장의 성공은 결과의 성공 여부에 달려 있다.이 예에서 결과는 다음 시간까지 시도되지 않습니다.req
이 경우 속성이 실패하게 됩니다.gnt
다음 클럭에서는 높지 않습니다.
어설션과 더불어 SystemVerilog는 속성의 전제조건과 적용범위를 지원합니다.가정은 공식 논리 증명 도구가 참이라고 가정해야 하는 조건을 확립한다.어설션은 참임을 증명해야 하는 속성을 지정합니다.시뮬레이션에서 주장과 가정은 모두 시험 자극에 대해 검증된다.검증 엔지니어는 속성 범위를 통해 어설션이 [vague]설계를 정확하게 감시하고 있는지 확인할 수 있습니다.
범위
하드웨어 검증 언어에 적용되는 적용 범위는 시뮬레이션 내의 샘플링 이벤트에 기초한 통계 수집을 말합니다.커버리지는 테스트 대상 장치(DUT)가 DUT가 올바르게 기능하고 있다는 높은 신뢰성이 있을 정도로 충분한 다양한 자극에 노출되었을 때 판단하기 위해 사용된다.이는 설계 내의 모든 코드 행이 실행되도록 설계 코드를 계측하는 코드 적용 범위와는 다릅니다.기능적 적용범위는 설계공간의 모든 원하는 모서리 및 모서리 케이스를 탐색할 수 있도록 합니다.
SystemVerilog 커버리지 그룹은 연관된 변수의 값 히스토그램을 저장하는 "bins" 데이터베이스를 만듭니다.교차 적용 범위를 정의할 수도 있습니다. 그러면 여러 변수의 데카르트 곱을 나타내는 히스토그램이 생성됩니다.
샘플링 이벤트는 샘플 채취 시기를 제어합니다.샘플링 이벤트는 Verilog 이벤트, 코드 블록의 시작/종료 또는 에 대한 콜입니다.sample
커버리지 그룹의 메서드.의미 있는 경우에만 데이터가 샘플링되도록 주의할 필요가 있습니다.
예를 들어 다음과 같습니다.
학급 eth_frame; // 위와 같은 정의 커버 그룹 동작하다; 커버 포인트 증류 { 휴지통 캐스트[1] = {48'FFFFFFFFFFFFFF}; 휴지통 ucast[1] = 체납; } 커버 포인트 f_type { 휴지통 길이[16] = { [0:1535] }; 휴지통 입력했다[16] = { [1536:32767] }; 휴지통 다른.[1] = 체납; } psize: 커버 포인트 페이로드.크기 { 휴지통 크기[] = { 46, [47:63], 64, [65:511], [512:1023], [1024:1499], 1500 }; } sz_x_t: 건너다 f_type, 사이즈; 엔드 그룹 엔드클래스
이 예에서 검증 엔지니어는 브로드캐스트프레임과 유니캐스트프레임의 배포, size/f_type 필드 및 payload 크기에 관심이 있습니다.페이로드 크기 커버포인트 범위는 최소 및 최대 크기 프레임 등 대상 코너 케이스를 반영합니다.
동기
복잡한 테스트 환경은 서로 통신해야 하는 재사용 가능한 검증 컴포넌트로 구성됩니다.Verilog의 '이벤트' 프리미티브는 서로 다른 프로시저 스테이트먼트 블록이 트리거되도록 허용했지만 스레드 동기화를 적용하는 것은 프로그래머(클리버)의 사용에 달려 있었습니다.SystemVerilog는 특히 스레드 간 동기용으로 우편함과 세마포어의 두 가지 프리미티브를 제공합니다.우편함은 FIFO 메시지 큐로 모델링됩니다.임의로 지정된 유형의 객체만 통과할 수 있도록 FIFO를 유형 파라미터화할 수 있습니다.일반적으로 오브젝트는 트랜잭션을 나타내는 클래스 인스턴스입니다.검증 컴포넌트에 의해 실행되는 기본 작업(프레임 전송 등)입니다.세마포는 카운트 세마포로 모델링됩니다.
Verilog의 일반적인 개량점
SystemVerilog는 위의 신기능과 더불어 Verilog의 기존 언어기능의 사용성을 향상시킵니다.이러한 기능 확장의 일부를 다음에 나타냅니다.
- 이제 절차 할당 연산자(<=, =)가 어레이에서 직접 작동할 수 있습니다.
- 포트(inout, input, output) 정의가 확장되어 구조, 열거, 실제 및 다차원 유형 등 다양한 데이터 유형을 지원합니다.
- for 루프구조를 사용하면 for 스테이트먼트 내에서 변수 자동 선언을 할 수 있게 되었습니다.continue 스테이트먼트와 break 스테이트먼트에 의해 루프 플로우 제어가 향상됩니다.
- SystemVerilog는 while 루프 구성에 do/while 루프를 추가합니다.
- 상수 변수, 즉 런타임 중에 변경되지 않는 것으로 지정된 변수는 const를 사용하여 지정할 수 있습니다.
- 이제 어레이에서 가변 초기화를 실행할 수 있습니다.
- 증가 연산자 및 감소 연산자(
x++
,++x
,x--
,--x
)는 다른 복합 할당 연산자와 마찬가지로 SystemVerilog에서 지원됩니다(x += a
,x -= a
,x *= a
,x /= a
,x %= a
,x <<= a
,x >>= a
,x &= a
,x ^= a
,x = a
C 및 그 후손과 같이). - 프리프로세서는, 「마크로 치환 기능의 정의」, 특히 리터럴 스트링(")내의 치환 기능, 및 복수의 매크로 토큰을 1개의 워드로 접속하는 기능을 개선했습니다.
- fork/fork 구조가 join_none 및 join_any로 확장되었습니다.
- 타임스케일 디렉티브에 추가함으로써 대규모 시뮬레이션 환경에서 각 소스 파일이 로컬 타임스케일을 사용하여 시뮬레이션 타임스케일을 보다 예측 가능하게 제어할 수 있습니다.
- 이제 작업 포트를 ref로 선언할 수 있습니다.참조는 컴퓨터 프로그래밍에서 "참조 통과"로 알려진 호출자 범위의 소스 인수에 태스크 본체가 직접 액세스할 수 있도록 합니다.인수 값의 복사본이 아닌 원래 변수 자체에 대해 작동하기 때문에, 태스크/함수는 호출자의 범위에 있는 변수(넷은 아님)를 실시간으로 수정할 수 있습니다.inout/output 포트 선언은 값을 기준으로 변수를 전달하고 작업이 종료될 때까지 발신자 범위 변수 업데이트를 지연합니다.
- 함수는 void로 선언할 수 있습니다.즉, 값이 반환되지 않습니다.
- 매개 변수는 사용자 정의 typedef를 포함하여 모든 유형으로 선언할 수 있습니다.
또한 SystemVerilog는 SystemVerilog DPI(Direct Programming Interface)에 의해 외국어(C/C++ 등)에 대한 편리한 인터페이스를 제공합니다.
검증 및 합성 소프트웨어
설계 검증의 역할로서 SystemVerilog는 칩 설계 업계에서 널리 사용되고 있습니다.3대 EDA 벤더(Cadence Design Systems, Mento Graphics, Synopsys)는 혼합 언어 HDL 시뮬레이터에 SystemVerilog를 통합했습니다.아직 시뮬레이터가 SystemVerilog Language Reference Manual 전체를 지원한다고 주장할 수 없기 때문에 테스트벤치의 상호 운용성이 문제가 되고 있지만 벤더 간 호환성을 촉진하기 위한 노력은 [when?]진행 중입니다.2008년, Cadence and Mentor는 재사용 가능한 테스트 벤치 및 캔 검증 IP의 개발을 촉진하기 위한 오픈 소스 클래스 라이브러리 및 사용 프레임워크인 Open Verification Methodology를 발표했습니다.Synopsys는 SystemVerilog Class-Library(VMM; 클래스 라이브러리)를 최초로 공개하였으며, 그 후 자체 VMM을 일반에 공개하였습니다.많은 서드파티 프로바이더가 SystemVerilog 검증 IP를 발표했거나 이미 릴리스했습니다.
설계 합성 역할(하드웨어 설계 기술을 게이트 넷 목록으로 변환)에서 SystemVerilog의 채택은 느렸습니다.많은 설계팀은 서로 다른 벤더의 여러 도구를 포함하는 설계 플로우를 사용합니다.대부분의 설계팀은 프런트 엔드 툴 스위트 전체(라이너, 정식 검증 및 자동화된 테스트 구조 생성기)가 공통 언어 [needs update?]서브셋을 지원할 때까지 SystemVerilog RTL 설계로 이행할 수 없습니다.
「 」를 참조해 주세요.
- SystemVerilog 시뮬레이터 목록 (SV2005 검색)
- Verilog-AMS
- e(검증 언어)
- 사양
- 악셀레라
- 시스템 C
- 시스템 RDL
레퍼런스
- ^ 리치, D. "SystemVerilog의 진화" IEEE 설계 및 컴퓨터 테스트, 2003년 7월/8월
- ^ IEEE가 SystemVerilog, Verilog 리비전 승인
- ^ 1800-2017 - SystemVerilog IEEE 표준 - 통합 하드웨어 설계, 사양 및 검증 언어
- ^ SystemVerilog 아사션:서론
- 1800-2005 — IEEE Standard for System Verilog—Unified Hardware Design, Specification, and Verification Language. 2005. doi:10.1109/IEEESTD.2005.97972. ISBN 978-0-7381-4810-6.
- 1800-2009 — IEEE Standard for SystemVerilog—Unified Hardware Design, Specification, and Verification Language. 2009. doi:10.1109/IEEESTD.2009.5354441. ISBN 978-0-7381-6130-3.
- 1800-2012 — IEEE Standard for SystemVerilog—Unified Hardware Design, Specification, and Verification Language. 2013. doi:10.1109/IEEESTD.2013.6469140. ISBN 978-0-7381-8110-3.
- 1800-2017 — IEEE Standard for SystemVerilog—Unified Hardware Design, Specification, and Verification Language. 2017. doi:10.1109/IEEESTD.2018.8299595. ISBN 978-1-5044-4509-2.
- McGrath, Dylan (2005-11-09). "IEEE approves SystemVerilog, revision of Verilog". EE Times. Retrieved 2007-01-31.
- Puneet Kumar (2005-11-09). "System Verilog Tutorial".
- Gopi Krishna (2005-11-09). "SystemVerilog ,SVA,SV DPI Tutorials".
- HDVL. "More SystemVerilog Weblinks".
- Spear, Chris, "SystemVerilog for Verification" 스프링어, 뉴욕, ISBN 0-387-76529-8
- Stuart Sutherland, Simon Davidmann, Peter Flake, "SystemVerilog for Design Second Edition: SystemVerilog for Hardware Design and Modeling 사용 가이드' Springer, 뉴욕시, ISBN 0-387-33399-1
- Ben Cohen, Srinivasan Venkataraman, Ajeetha Kumari 및 Lisa Piper [1] SystemVerilog Assertions Handbook, 제4판, 2016-http://SystemVerilog.us
- Ben Cohen Srinivasan Venkataraman과 Ajeetha Kumari [2] VMM 도입에 대한 실용적인 접근법, http://SystemVerilog.us
- Erik Seligman과 Tom Schubert [3] 공식 검증:현대 VLSI 설계를 위한 필수 툴킷, 2015년 7월 24일
외부 링크
- IEEE 표준 레퍼런스
최신 SystemVerilog 표준 문서는 IEEExplore에서 무료로 이용할 수 있습니다.
- 튜토리얼
- 표준 개발
- IEEE P1800 – SystemVerilog 작업 그룹
- IEEE 1800-2005 이전에 사용된 사이트
- 언어 확장자
- Verilog AUTOs – Verilog 코드 유지보수를 단순화하는 오픈 소스 메타 댓글 시스템
- 온라인 툴
- EDA Playground – 웹 브라우저에서 SystemVerilog 실행(무료 온라인 IDE)
- sverule – SystemVerilog BNF Navigator (현재 IEEE 1800-2012)
- 기타 도구