SoC 설계/Verilog, SystemVerilog 16

SystemVerilog: Arrays

SystemVerilog는 다양한 유형의 array를 제공하여, 복잡한 데이터 구조를 구축하는데 많은 유연성을 제공한다. Static arrays Dynamic arrays Associative arrays Queues 1. Static Arrays 정정 배열은 컴파일하기 전에 크기가 알려진 배열이다. 아래 예제에서는 8 bit 정적 배열이 선언되고 일부 값이 할당되고 반복되면서 해당값을 출력한다. // (a) module tb; bit [7:0] m_data; initial begin m_data = 8'h5a; for(int i=0; i

SystemVerilog: modport

direction을 가진 modport는 interface 내에서 정의된다. 이들은 한 module 내에서 interface를 접근할 때, 특정한 제한이 있다는 것을 내포한다. modport로 정의하면, 해당 모듈내에서 direction이 정의된 것으로 보면 된다. verilog에서 사용하는 input, output, inout들은 하나의 bundle로 묶은 것으로 생각하면 된다. 문법 modport [identifier] ) input [port_list], output [port_list] ); 아래 예제는 4 개의 logic들과, 2개의 modport 선언을 포함하는 인터페이스인 myInterface를 보여준다. (a9-11) modport인 dut0는 ack, sel을 입력으로, gnt, irq0..

SystemVerilog: Testbench

하드웨어 설계에 대해 시뮬레이션을 진행하려면 테스트벤치라는 환경이 필요하다. 목적 테스트벤치를 사용하면 시뮬레이션을 통해 설계의 동작을 확인할 수 있다. 이는 설계에 대해 다양한 입력 stimulus를 사용해서 구동하는 container이다. 테스트벤치에서는 다음과 같은 과정으로 동작 확인이 이뤄진다. 다양한 종류의 입력 생성 생성된 입력으로 설계 구동 제공된 입력으로 출력 생성 예상되는 동작으로 출력을 확인해서 기능적 결함 확인 기능상 결함이 발견되면 설계를 변경해서 결함 수정 기능적 결함이 모두 제거될 때 까지 위 단계를 반복 수행 구성요소 구성요소 내용 Generator DUT를 구동하는 다양한 입력 생성 Interface 구동하거나 모니터링할 신호들을 포함 Driver 생성된 입력을 구동 Moni..

SystemVerilog: 소개

SV: Tutorial 날짜: 2023년 2월 21일 Verilog 및 VHDL과 같은 Hardware Description Language (HDL)은 하드웨어 동작을 기술하기 위해 사용되고, combinantional logic과 sequential elements로 구성된 디지털 블럭으로 변환할 수 있다. HDL로 기술된 하드웨어가 제대로 동작하는지 확인하려면, 복잡한 테스트 과정을 지원하는 하드웨어 검증 언어가 필요하다. SystemVerilog는 엔지니어가 시뮬레이션에서 복잡한 테스트벤치 구조와 랜덤 stimulus를 사용하여, 설계를 검증할 수 있도록 하는 많은 검증 기능을 갖춘 Verilog의 확장이다. Verilog 비선호 1990년대에 Verilog는 복잡하지 않고, 작고 기능이 적은 하..

Verilog: Icarus Verilog, GTKwave

하드웨어 프런트엔드 (Hardware frontend) 설계를 위해서는 HDL 시뮬레이터와 합성 툴이 필요하다. C나 C++, Python과 같은 SW 들은 무료로 사용할 수 있는 Visual Studio, GCC와 같은 컴파일러들이 있지만, 하드웨어 설계 분야는 거의 대부분이 유료의 상용 소프트웨어들이고, 개인이 구매하기엔 소프트웨어 가격이 매우 높다. 주로 사용되는 상용 툴로는 Synopsys사의 VCS, Cadence사의 NCS, Mentor사의 Questa, Modelsim 등이 있다. Doulos가 운영하는 EDA Playground는 회원가입을 하면, Cadence, Synopsys, Mentor의 상용 시뮬레이터를 무료로 사용해 볼 수 있다. 또한, 디자인이 작거나, 약간의 불편함을 감수한다..

Verilog: timescale, delay

timescale timescale은 컴파일러 지시자 중 하나로서, 컴파일러 지시자는 backward quite(`)으로 시작한다 timescale은 합성과 상관없이, 회로를 테스트하기 위한 시뮬레이션에만 영향을 준다. timescale은 시뮬레이션시 기본적인 시간 단위를 결정하는데, 아래와 같이 설정하는경우, 기본 시뮬레이션 단위인 time unit은 1 ns이고, time precision은 1 ps 가 된다. // usage: `timescale [time unit]/[time precision] `timescale 1ns/1ps timescale 관련하여 몇가지 유용한 시스템 함수들을 알아보면, 시스템 함수인 $printtimescale은 time unit과 time precision을 출력할 수..

1 2