본문 바로가기
나의 전자 공부방/System Verilog 공부

1. systemverilog Hello world, eum사용, string 사용

by 나만의생각 2023. 6. 12.

시스템 베릴로그를 사용하기 위한 기초적인 문법을 활용후 컴파일을 해보겠습니다.

 

module tb;
 initial begin
 forever begin
 #5	$display ("Hello World !");
 end
 end
 
 initial
 	#50	$finish;
endmodule

 

 

 

 

tb

 

module enum_test2();

enum {RED, GREEN, BLUE, YELLOW} color;
initial begin
color = color.first();
# 20 $display("color = %0d, %0s", color, color.name() );
color = color.next();
# 20 $display("color = %0d, %0s", color, color.name() );
color = color.next();
# 20 $display("color = %0d, %0s", color, color.name() );
color = color.prev();
# 20 $display("color = %0d, %0s", color, color.name() );
color = color.last();
$display("color = %0d, %0s", color, color.name() );
end
endmodule



tb2

 

tb1과 tb2를 작성하여 Hello World !를 각각 10번, 9번 출력한 모습입니다.

 

다음은 enum을 사용하여 출력해보겠습니다.

 

 

 

enum의 문법의 경우 예를들어,  { } 안에 들어가는 변수들을 차례대로 2비트의경우 0, 1 ,2 ,3으로 자동으로 지정해줄수 있습니다.

 

module enum_test();

enum int {RED = 1, GREEN =2} color;
enum int {DAY,NIGHT} 		mode;

initial begin
	color = RED;
	$display("color = %0d", color);
	mode = DAY;
	$display("mode = %0d", mode);
end
endmodule

enum_test

 

module enum_test2();

enum {RED, GREEN, BLUE, YELLOW} color;
initial begin
	color = color.first();
	# 20 $display("color = %0d, %0s", color, color.name() );
	color = color.next();
	# 20 $display("color = %0d, %0s", color, color.name() );
	color = color.next();
	# 20 $display("color = %0d, %0s", color, color.name() );
	color = color.prev();
	# 20 $display("color = %0d, %0s", color, color.name() );
	color = color.last();
	$display("color = %0d, %0s", color, color.name() );
	end
endmodule

 

enum_test2
enum_test2 시뮬레이션 결과

코드를 작성한대로 함수를 first, next, next, prev, last순으로 코딩을하였는데 eun을통해 {RED, GREEN, BLUE, YELLO}순으로 선언을 해주었기때문에 첫번째는 RED, 두번째는 GREEN, 세번째는 BLUE, 네번째는 GREEN, 다섯번쨰는 YELLOW가 나와서 정확하게 시뮬레이션이 되었음을 알수 있습니다.

 

마지막으로 string함수입니다.

 

module string_test();

logic[7:0]i = 4'd12;

string name = "Kim";
string name2 = {name,name};
string str = "13579";
int a;

initial begin
	$display("i=%d",i);
	$display("i=%0d",i);
	$display("i=%0b",i);
	$display("i=%0h",i);
	
	#50;
	$display("Hello %s",name);
	$display("Hello %s",name2);
	$display("Hello %s",{name2,"",name});
	
	#50;
	$display("%s",name.toupper() ); // 대문자로
	$display("%s", name.tolower() ); // 소문자로
	$display("%s", name.getc(2) ); // 2번째 문자출력
	$display("%s", name.substr(0,1) ); //0번째와 1번째 문자  출력
	
	#50;
	a = str.len();  // 길이함수
	#10$display("%s, %d",str, a );
	a = str.atoi( ); // %s -> %d // 문자열을 숫자열로 바꾸는함수
	#10 $display("%s, %d", str, a);
end

endmodule

 

string_test

 

다음과 같이 코딩결과가 나온것으로보아 정확하게 코딩이 되었음을 알 수 있습니다.

 

다음내용은 다음에..