시스템 베릴로그를 사용하기 위한 기초적인 문법을 활용후 컴파일을 해보겠습니다.
module tb;
initial begin
forever begin
#5 $display ("Hello World !");
end
end
initial
#50 $finish;
endmodule

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

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

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


코드를 작성한대로 함수를 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

다음과 같이 코딩결과가 나온것으로보아 정확하게 코딩이 되었음을 알 수 있습니다.
다음내용은 다음에..
'나의 전자 공부방 > System Verilog 공부' 카테고리의 다른 글
| 3 system verilog) class의 기초, class handle (0) | 2023.06.25 |
|---|