SoC 설계/Verilog, SystemVerilog

SystemVerilog: 소개

yztech 2023. 2. 22. 16:53
반응형

SV: Tutorial

날짜: 2023년 2월 21일

Verilog 및 VHDL과 같은 Hardware Description Language (HDL)은 하드웨어 동작을 기술하기 위해 사용되고, combinantional logic과 sequential elements로 구성된 디지털 블럭으로 변환할 수 있다. HDL로 기술된 하드웨어가 제대로 동작하는지 확인하려면, 복잡한 테스트 과정을 지원하는 하드웨어 검증 언어가 필요하다.

SystemVerilog는 엔지니어가 시뮬레이션에서 복잡한 테스트벤치 구조와 랜덤 stimulus를 사용하여, 설계를 검증할 수 있도록 하는 많은 검증 기능을 갖춘 Verilog의 확장이다.

Verilog 비선호

1990년대에 Verilog는 복잡하지 않고, 작고 기능이 적은 하드웨어 디자인을 검증하는 기본 언어였다. 설계 복잡성이 증가하면서, 설계 및 검증을 위한 더 나은 도구에 대한 요구 사항도 늘어났다. SystemVerilog는 random stimuli를 구성하거나, 테스트 벤치 구성의 편리함, 기능적 범위, assertion 등에서 OOP 기능을 사용할 수 있으므로, Verilog보다 하드웨어 디자인을 검증하는데 훨씬 우수하다.

하드웨어 검증

검증은 지정된 하드웨어 설계가 예상대로 작동하는지 확인하는 과정이다. 반도체 설계는 매우 범위가 넓고, 시간이 많이 소요되는 프로세스이며 제작하는데 수백만 달러의 비용이 들어간다, 만약, 설계의 기능적 결함이 설계 프로세스의 초기 단계에서 발견된 경우, 비용을 절감하는데 크게 도움이 된다. 만약 설계 과정 중에 결함이 발견되면 모든 설계 단계를 다시 반복해야 하므로, 더 많은 자원, 비용과 시간이 소모된다. 이렇게 반복되는 과정을 respin이라고 부른다.

검증 방법

하드웨어 설계는 대부분 하나의 최상위 모듈이 있는 여러 Verilog 파일들로 구성되고, 이 파일에서 다른 모든 하위 모듈들이 원하는 동작과 기능을 수행하기 위해 인스턴스로 생성된다. 테스트벤치는 주어진 Verilog 설계를 검증하는데 필요한 과정이고, 지금은 일반적으로 SystemVerilog로 작성된다. 기본적인 방법은 다양한 stimuli로 설계를 동작하여, 출력을 관찰하고 예상 값과 비교해여 설계가 제대로 작동하는지 확인한다.

이를 위해 최상위 모듈이 테스트벤치 내에서 인스턴스로 생성되고, 입출력 포트들이 적절하게 연결된다. 설계에 대한 입력은 설계가 어떻게 동작하는지 이미 알고 있는 특정 값으로 구동된다. 결과를 관찰하고 분석해서 예상 값과 비교하여 설계가 제대로 동작하는지 확인한다.

아래 예는 검증이 필요한 D-flipflop의 간단한 Verilog 설계이다. DFF의 기능은 Q출력 핀이 모든 posedge clock 에서 D입력 핀의 값을 래치하는, postive edge trigger flipflip이 된다. 이 DFF에는 reset과 clock 핀이 있다고 가정한다.

// d_ff.v
module d_ff (clk, resetn, q, d);

input clk;
input resetn;
input d;
output q;

reg q;

always @(posedge clk)
	if(!resetn)
		q <= 0;
	else
		q <= d;

endmodule

일부 신호 값들을 입력 핀 clk, resetn, d로 입력해서, 출력이 어떻게 되는지 관찰하기 위해 테스트벤치를 구성해야 한다, 적절한 stimuli를 구성하고, 결과를 관찰함으로써 정상 동작 여부를 확인할 수 있다. 그 다음 합성 도구들이 이 하드웨어 설계를 실제 하드웨어 로직 및 게이트로 변환하게 된다.

// tv_top.sv

module tb_top ();

reg clk;
reg resetn;
reg d;
wire q;

// Instantiation
d_ff u0 (
	.clk (clk),
	.resetn (resetn),
	.d (d),
	.q (q));

// Create a clock
always #10 clk <= ~clk;

initial begin
	resetn <= 0;
	d <= 0;

	#10 resetn <= 1;
	#5 d <= 1;
	#8 d <= 0;
	#2 d <= 1;
	#10 d<= 0;
end

endmodule

파일 tb_top.sv는 디자인 d_ff0 객체를 생성하고, 테스트벤처의 신호로 포트를 연결한 간단한 테스트벤치이다. 그런 다음 테스트벤치에서 신호를 할당하거나 구성하면 그 값들이 설계에 전달된다.

반응형

'SoC 설계 > Verilog, SystemVerilog' 카테고리의 다른 글

SystemVerilog: Arrays  (0) 2023.03.10
SystemVerilog: modport  (0) 2023.03.10
SystemVerilog: Testbench  (0) 2023.02.23
Verilog: Icarus Verilog, GTKwave  (0) 2021.10.16
Verilog: timescale, delay  (0) 2021.10.16