산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> verilog

Verilog 파일 IO 작업

Verilog에는 파일을 열고, 값을 파일로 출력하고, 파일에서 값을 읽고, 다른 변수로 로드하고, 파일을 닫을 수 있는 시스템 작업 및 기능이 있습니다.

파일 열기 및 닫기

  
  
module tb;
	// Declare a variable to store the file handler
	integer fd;
	
	initial begin
		// Open a new file by the name "my_file.txt" 
		// with "write" permissions, and store the file
		// handler pointer in variable "fd"
		fd = $fopen("my_file.txt", "w");
		
		// Close the file handle pointed to by "fd"
		$fclose(fd);
	end
endmodule

  

파일 모드 열기

인수 설명
"r" 또는 "rb" 읽기 위해 열기
"w" 또는 "wb" 쓰기 위한 새 파일을 만듭니다. 파일이 있으면 길이가 0이 되도록 자르고 덮어씁니다.
"a" 또는 "ab" 파일이 존재하면 추가(EOF에서 쓰기 위해 열림), 그렇지 않으면 새 파일 생성
"r+", "r+b" 또는 "rb+" 읽기와 쓰기 모두 가능
"w+", "w+b" 또는 "wb+" 업데이트를 위해 자르거나 만들기
"a+", "a+b" 또는 "ab+" EOF에서 업데이트할 새 파일 추가 또는 생성

파일 작성 방법

함수 설명
$f디스플레이 $display와 유사, 대신 파일에 기록
$fwrite $write와 유사, 대신 파일에 씁니다.
$fstrobe $strobe와 유사, 대신 파일에 기록
$fmonitor $monitor와 유사, 대신 파일에 기록

위의 각 시스템 함수는 기수 십진수로 값을 인쇄합니다. 또한 이진, 8진 및 16진법으로 값을 인쇄하는 세 가지 다른 버전이 있습니다.

함수 설명
$fdisplay() 기본적으로 10진수로 인쇄
$fdisplayb() 바이너리로 인쇄
$fdisplayo() 8진수로 인쇄
$fdisplayh() 16진수로 인쇄
  
  
module tb;
	integer  	fd;
	integer 	i;
	reg [7:0] 	my_var;
	
	initial begin
		// Create a new file
		fd = $fopen("my_file.txt", "w");
		my_var = 0;
		
      $fdisplay(fd, "Value displayed with $fdisplay");
		#10 my_var = 8'h1A;
		$fdisplay(fd, my_var);      // Displays in decimal
		$fdisplayb(fd, my_var); 	// Displays in binary
		$fdisplayo(fd, my_var); 	// Displays in octal
		$fdisplayh(fd, my_var); 	// Displays in hex
		
	  // $fwrite does not print the newline char '
' automatically at 
	  // the end of each line; So we can predict all the values printed
	  // below to appear on the same line
      $fdisplay(fd, "Value displayed with $fwrite");
		#10 my_var = 8'h2B;
		$fwrite(fd, my_var);
		$fwriteb(fd, my_var);
		$fwriteo(fd, my_var);
		$fwriteh(fd, my_var);
		
     
      // Jump to new line with '
', and print with strobe which takes
      // the final value of the variable after non-blocking assignments
      // are done
      $fdisplay(fd, "
Value displayed with $fstrobe");
		#10 my_var <= 8'h3C;
		$fstrobe(fd, my_var);
		$fstrobeb(fd, my_var);
		$fstrobeo(fd, my_var);
		$fstrobeh(fd, my_var);
		
      #10 $fdisplay(fd, "Value displayed with $fmonitor");
	  $fmonitor(fd, my_var);
		
		for(i = 0; i < 5; i= i+1) begin
			#5 my_var <= i;
		end
      
      #10 $fclose(fd);
	end
endmodule

  
시뮬레이션 로그
Value displayed with $fdisplay
26
00011010
032
1a
Value displayed with $fwrite
 43001010110532b
Value displayed with $fstrobe
 60
00111100
074
3c
Value displayed with $fmonitor
 60
  0
  1
  2
  3
  4

파일을 읽는 방법

줄 읽기

시스템 기능 $fgets [hl]fd[/hd]에 의해 지정된 파일의 문자를 str이 채워질 때까지 변수 str로 읽거나, 개행 문자를 읽어 str로 전송하거나, EOF 조건이 발생할 때까지 읽습니다.

읽는 동안 오류가 발생하면 코드 0을 반환합니다. 그렇지 않으면 읽은 문자 수를 반환합니다.

EOF 감지

시스템 기능 $feof EOF가 발견되면 0이 아닌 값을 반환하고, 인수로 주어진 파일 설명자에 대해 0을 반환합니다.

  
  
module tb;
	reg[8*45:1] str;
	integer  	fd;
	
	initial begin
	  fd = $fopen("my_file.txt", "r");
	  
	  // Keep reading lines until EOF is found
      while (! $feof(fd)) begin
      
      	// Get current line into the variable 'str'
        $fgets(str, fd);
        
        // Display contents of the variable
        $display("%0s", str);
      end
      $fclose(fd);
	end
endmodule

  

fdisplay에 대한 여러 인수

$fdisplay에 여러 변수가 주어졌을 때 , 단순히 공백 없이 주어진 순서대로 모든 변수를 인쇄합니다.

  
  
module tb;
  reg [3:0] a, b, c, d;
  reg [8*30:0] str;
  integer fd;
  
  initial begin
    a = 4'ha;
    b = 4'hb;
    c = 4'hc;
    d = 4'hd;
    
    fd = $fopen("my_file.txt", "w");
    $fdisplay(fd, a, b, c, d);
    $fclose(fd);
  end
endmodule

  
시뮬레이션 로그
10111213

문자열로 데이터 형식 지정

$sformat의 첫 번째 인수 시스템 함수는 결과가 배치되는 변수 이름입니다. 두 번째 인수는 format_string입니다. 다음 인수를 문자열로 형식화하는 방법을 알려줍니다.

  
  
module tb;
	reg [8*19:0] str;
	reg [3:0] a, b;
	
	
	initial begin
		a = 4'hA;
		b = 4'hB;
		
		// Format 'a' and 'b' into a string given
		// by the format, and store into 'str' variable
		$sformat(str, "a=%0d b=0x%0h", a, b);
		$display("%0s", str);
	end
endmodule

  
시뮬레이션 로그
xcelium> run
a=10 b=0xb
xmsim: *W,RNQUIE: Simulation is complete.


verilog

  1. Verilog 튜토리얼
  2. Verilog 연결
  3. Verilog 할당
  4. Verilog 차단 및 비 차단
  5. Verilog 기능
  6. Verilog 작업
  7. Verilog 클록 생성기
  8. Verilog 수학 함수
  9. Verilog 시간 형식
  10. Verilog 타임스케일 범위