用工具建工程對Verilog進行仿真、綜合或者其它操作時,在寫腳本的時候常常需要工程中Veriog文件的列表,若工程中.v文件過多,則常常需要手動編寫文件列表。本文教給大家用C語言簡單寫的一個自動生成某個文件夾下所有.v文件列表的方法。
使用說明
環境:Windows 7操作系統或其它常用Windows操作系統
編譯器:DEV C++或其它
使用方法:隨便找個C語言的編譯器,靜態編譯生成exe文件后,可隨意拷貝至某文件夾下,雙擊運行,等待輸出rtl.f文件即可。
使用舉例:將生成的exe文件拷貝至C:modeltech64_10.4目錄下,雙擊運行,如下動圖。
生成的rtl.f打開后如下圖所示。
另外,該代碼提供了一種操作Windows系統路徑的操作方法,可以簡單修改一下,用作它用。如找到某種類型的文件或某個文件進行拷貝、轉移、修改、刪除等操作。
源代碼
#include
#include
#include
#include
#include
#include
#defineFILE_NUM50000
#defineN50000
staticintcount_file=0;
typedefstruct
{
intnum;
charname[800];
intvtype;
}filetype;
filetypefiles[FILE_NUM];
BOOLIsRoot(LPCTSTRlpszPath)
{
TCHARszRoot[4];
wsprintf(szRoot,"%c:",lpszPath[0]);
return(lstrcmp(szRoot,lpszPath)==0);
}
voidFindInAll(LPCTSTRlpszPath)
{
WIN32_FIND_DATAwfd;
TCHARszFind[MAX_PATH];
HANDLEhFind;
TCHARszFile[MAX_PATH];
lstrcpy(szFind,lpszPath);
if(!IsRoot(szFind))
lstrcat(szFind,"");
lstrcat(szFind,"*.*");//找所有.v文件
hFind=FindFirstFile(szFind,&wfd);
if(hFind==INVALID_HANDLE_VALUE)//如果沒有找到或查找失敗
return;
do
{
if(wfd.cFileName[0]=='.')
continue;//過濾這兩個目錄
if(wfd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
{
if(IsRoot(lpszPath))
wsprintf(szFile,"%s%s",lpszPath,wfd.cFileName);
else
wsprintf(szFile,"%s\%s",lpszPath,wfd.cFileName);
FindInAll(szFile);//如果找到的是目錄,則進入此目錄進行遞歸
}
else
{
if(IsRoot(lpszPath))
wsprintf(szFile,"%s%s",lpszPath,wfd.cFileName);
else
wsprintf(szFile,"%s\%s",lpszPath,wfd.cFileName);
printf("%s
",szFile);
files[count_file].num=count_file;
strcpy(files[count_file].name,szFile);
count_file=count_file+1;
//printf("count_file=%d,num=%s
",count_file,files[count_file-1].name);
//對文件進行操作
}
}while(FindNextFile(hFind,&wfd));
FindClose(hFind);//關閉查找句柄
}
intmain(intargc,char*argv[])
{
FILE*fp1;
inti,j,k;
charbuf[800]="";
charbuf1[800]="";
inttype=0;
if((fp1=fopen("rtl.f","w+"))==NULL)
return;
memset(buf,0,800);
memset(buf1,0,800);
memset(files,0,FILE_NUM*sizeof(filetype));
getcwd(buf,sizeof(buf));
printf("currentworkingdirectory:%s
",buf);
FindInAll(buf);
for(i=0;imemset (buf1,0,800);
strcpy(buf1,files[i].name);
type=0;
k=strlen(buf1);
//printf("
k=%d;",k);
for(j=0;j<=k;j++)
????????{
????????????if((buf1[j]=='.')&&((buf1[j+1]=='v')||(buf1[j+1]=='V'))&&(j==k-2))
//if((buf1[j]=='.')&&(j==k-2))
{
//printf("
j=%d
",j);
type=1;
files[i].vtype=1;
fprintf(fp1,"%s
",files[i].name);
}
}
}
getch();
fclose(fp1);
return0;
}
版本更新記錄
版本號:V1.1.2
更新日期:2013-07-17
1446 修改代碼,擴展name的長度為800,可以處理長路徑的情況
版本號:V1.1.1
更新日期:2013-05-18
1038 修改代碼,添加判斷語句&& (j==k-2),避免.vhd等文件也被列出來
版本號:V1.1.0
更新日期:2013-02-10
1455 已添加對文件名進行判斷,能夠自動的將當前路徑下的所有文件及子文件夾下的.v文件列舉出來。
審核編輯 :李倩
-
操作系統
+關注
關注
37文章
6822瀏覽量
123331 -
Verilog
+關注
關注
28文章
1351瀏覽量
110095 -
代碼
+關注
關注
30文章
4788瀏覽量
68603
原文標題:如何快速生成Verilog代碼文件列表(附開源C代碼)
文章出處:【微信號:HXSLH1010101010,微信公眾號:FPGA技術江湖】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論