C언어 같은 경우는 String 처리가 편하기 때문에 동적으로 파일을 읽어오거나 하는데 문제가 없는데,

Verilog 는 String 처리가 Bit 단위로 처리되기 때문에 공백 문제, align, 문제가 존재한다.

Verilog 2001 에는 $swrite라는 task 를 추가하여 String 처리를 보다 쉽게 만들어 준다.

웹서핑으로 찾았는데 정확한 Definition은 못찾았다.

C언어의 sprintf와 유사하다고 하길래 혹시나 하고 sprintf 문법처럼 사용했더니 된다.

$swrite (fname1,"STIMULUS/%0d_input_%0d.dat",`K,i);
$readmemh (fname1,mem_in);
위 사용법에 주의사항은 "%0d" 로 , C언어의 경우 %0d 는 Data type의 크기만큼 0을 채워준다.
그런데 Verilog에서는 %d로 하면 해당 data type만큼 공백이 생기고 (0이 생기는것이 아니라)
%0d 로 하게되면 공백이 없어진다. (0으로 채워지는것도 아닌것 같다.)

정확한 원리는 모르겠지만 하여튼 loop 안에서 동적으로 input 파일을 바꾸면서 입력이 가능하다.

verilog가 점점 프로그램 작성하기 쉽게 바뀐다.
여유가 된다면 System Verilog를 활용해보고 싶지만 개발일정을 맞추기까지 배워야 할것이 부담되어 당분간은 포기 ..

6개월 이상 Verilog 코딩을 안했더니 task 문법도 모르고 시뮬레이션 코드작성법도 까먹고 난리났다.
그래도 코드 분석은 가능해서 다행인건가 ㅎㅎ;; 쪽팔리다 ㅡㅡ;
저작자 표시 비영리