ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SystemVerilog] 절차적 할당 1
    개발/SystemVerilog 2022. 1. 11. 22:15

     

    시스템베릴로그에서 procedural statement 기능이 강화됐다.

     

    기존 베릴로그는 begin .. end / fork .. join / task .. endtask 같은 코드블럭을 지정하는 키워드 쌍에서 시작 부분에만 블록에 label을 지정할 수 있었다. 시스템베릴로그에서는 블록의 끝에도 label을 지정할 수 있다.

    // 베릴로그 문법
    module test;
      initial begin : initial_block
        ...
      end
    endmodule
    
    
    // 시스템베릴로그 문법
    module test;
      initial 
      	begin : initial_block
        	...
      	end : initial_block
    endmodule
    
    
    // 시스템베릴로그 문법
    module test;
      initial 
      	initial_block : begin	// label 먼저 올 수도 있다.
        	...
      	end : initial_block 	// 끝부분에는 label이 나중에 와야함
    endmodule

    특이한 점은 블록의 label을 지정할 때 블록의 시작 전에 label을 붙일 수 있다. 하지만 블록의 끝에는 무조건 label이 뒤에 와야한다.

     

     

     

    루프 구문도 강화됐다고 한다.

    // 베릴로그
    int i;
    for (i = 0; i < 10; i=i+1) begin
    	...
    end
    
    
    // 시스템베릴로그
    for (int i = 0; i < 10; i=i+1) begin
    	...
    end
    
    
    // 여러변수의 초기조건 및 step 지정
    for (int i = 1; int j = 2; i + j < 100; i=i+1, j=j+2) begin
    	...
    end

    대부분의 시스템베릴로그 책에선 for 루프의 내부에서 루프변수를 선언하고 초기화 할 수 있다고 하는데

    그냥 베릴로그에서도 루프 내부에서 변수 선언 가능하다.

    또 루프 내부에서 여러개의 변수 선언 및 스텝을 지정할 수 있다고 하는데 이거도 베릴로그에서 해보니까 된다.

     

     

     

    C 언어처럼 do while 구문이 추가되었다.

    사용법은 C언어랑 같다.

    do
    	cnt <= cnt + 1;
    while (enable);
    
    
    do
    	cnt <= cnt + 1;
        if (cnt == 10)
        	break;
    while (enable);
    
    do
    	if (pass)
        	continue;
    	cnt <= cnt + 1;
    while (enable);

    루프구문에 대해서 break, continue 키워드가 추가되었다.

    기능은 C언어와 같다.

     

     

     

     

    foreach 구문도 추가됐다.

    특이하게 루프인덱스를 따로 선언할 필요 없이 바로 쓸 수 있다.

    int arr[15:0];
    foreach (arr[i]) // 변수 i 선언할 필요 없음
    	arr[i] = i;
        
    
    
    
    login arr2d [7:0][4:0];
    foreach (arr2d[i, j])		// 2d array
    	arr2d[i][j] = i + j;

    루프변수 i는 루프 밖에서는 참조할 수 없다. 오직 루프 안에서만 존재하는 변수이다.

    또한 루프변수는 read only 이다.

    2차원 배열에 대해서도 인덱스가 순차적으로 순회한다.

     

     

     

     

     

     

     

    '개발 > SystemVerilog' 카테고리의 다른 글

    [SystemVerilog] 연산자  (0) 2022.01.13
    [SystemVerilog] 절차적 할당 2  (0) 2022.01.11
    [SystemVerilog] 데이터 타입 2  (0) 2022.01.10
    [SystemVerilog] 데이터 타입 1  (0) 2022.01.10
    [SystemVerilog] 시스템베릴로그 개요  (0) 2022.01.10
Designed by Tistory.