HDL/Verilog

Verilog HDL과 테스트 벤치(Test Bench) 설계 및 결과 확인

Torrance 2023. 9. 27. 14:35

안녕하세요,

 

이번 글에서는 Verilog HDL로 Adder를 구현하고, 그 결과를 테스트 벤치(Test Bench)로 확인하겠습니다.

 

환경

  • HDL : Verilog’ 2001 spec
  • RTL Synthesis : Intel(Altera), Quartus prime 18.1
  • Functional Simulation : Intel(Altera), ModelSim 10.5b

Quatus의 [File] → [New]에서 Verilog HDL File을 선택합니다.

Adder를 구현했습니다.

module adder(
	input	[3:0]	data_a,
	input	[3:0]	data_b, 
	output	[3:0]	sum
);

	assign sum = data_a + data_b ;

endmodule

Verilog HDL Check point

  • module과 endmodule로 module 시작 및 종료했습니다.
  • 40 bit의 data_a, data_b를 합한 4 bit의 sum 값을 도출합니다.
  • assign 구문을 이용해 sum이 data_a와 data_b의 합으로 설정합니다.

 

Test Bench를 작성했습니다.

`timescale 1 ns/1 ns

module adder_tb();

	reg		[3:0]	data_a ;
	reg		[3:0]	data_b ; 
	wire	[3:0]	sum ;

	adder Uadder_0(
		
		.data_a(data_a), 
		.data_b(data_b), 
		.sum(sum)
	);
	
	initial begin
		data_a = 4'd2 ;
		data_b = 4'd3 ;	
	end

endmodule

Test Bench Check point

  • module과 endmodule로 module 시작 및 종료했습니다.
  • 입력은 register인 reg로, 결과는 wire로 선언했습니다.
  • adder Uadder_0은 instantation으로 Port name을 직접 Association 하는 방식을 사용했습니다.
    즉, adder의 data_a 자리에 adder_tb의 data_a 값을 직접 mapping 했습니다.
    다른 방식도 있으나 디버깅 효율을 높이기 위해 이 방법을 택했습니다.
  • data_a의 초기 값은 2, data_b의 초기 값은 3으로 설정했습니다.

이제 ModelSim에서 시뮬레이션을 하기 위한 tcl파일을 만들겠습니다.

Quatus의 [File] → [New]에서 Tcl Script File을 선택합니다.

 

즉, 1번의 시뮬레이션을 위해서는 총 3개의 파일(Verilog HDL 기능 구현, TestBench, TCL)이 필요합니다.

vlib work
vlog adder.v adder_tb.v
vsim work.adder_tb

add wave -radix dec /data_a
add wave -radix dec /data_b
add wave -radix dec /sum

run 50 ns

TCL file Check point

  • vlib work, vlog, vsim work은 필수 항목입니다.
    vlog 다음엔 verilog HDL 파일과 test bench 파일 이름이 나와야 합니다.
    vsim work 다음 test bench 파일이 나와야 합니다.
  • add wave는 파형 추가입니다. dec는 decimal인 10진법입니다.
  • '/' 다음 결과를 보고자 하는 변수를 입력하면 됩니다.
  • run 이후 시뮬레이션 시간을 입력하면 됩니다.

 

최종 결과