如何快速生成Verilog代碼文件列表?(內(nèi)附開源C代碼)
用工具建工程對Verilog進(jìn)行仿真、綜合或者其它操作時(shí),在寫腳本的時(shí)候常常需要工程中Veriog文件的列表,若工程中.v文件過多,則常常需要手動編寫文件列表。本文教給大家用C語言簡單寫的一個(gè)自動生成某個(gè)文件夾下所有.v文件列表的方法。
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)發(fā)分享或贊賞
使用說明
環(huán)境:Windows 7操作系統(tǒng)或其它常用Windows操作系統(tǒng)
編譯器:DEV C++或其它
使用方法:隨便找個(gè)C語言的編譯器,靜態(tài)編譯生成exe文件后,可隨意拷貝至某文件夾下,雙擊運(yùn)行,等待輸出rtl.f文件即可。
使用舉例:將生成的exe文件拷貝至C:\modeltech64_10.4目錄下,雙擊運(yùn)行,如下動圖。
生成的rtl.f打開后如下圖所示。
另外,該代碼提供了一種操作Windows系統(tǒng)路徑的操作方法,可以簡單修改一下,用作它用。如找到某種類型的文件或某個(gè)文件進(jìn)行拷貝、轉(zhuǎn)移、修改、刪除等操作。
源代碼
#include <stdio.h>
#include <windows.h>
#include <unistd.h>
#include <math.h>
#include <time.h>
#include <string.h>
#define FILE_NUM 50000
#define N 50000
static int count_file=0;
typedef struct
{
int num;
char name[800];
int vtype;
}filetype;
filetype files[FILE_NUM];
BOOL IsRoot(LPCTSTR lpszPath)
{
TCHAR szRoot[4];
wsprintf(szRoot, "%c:\\", lpszPath[0]);
return (lstrcmp(szRoot, lpszPath) == 0);
}
void FindInAll(LPCTSTR lpszPath)
{
WIN32_FIND_DATA wfd;
TCHAR szFind[MAX_PATH];
HANDLE hFind;
TCHAR szFile[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; // 過濾這兩個(gè)目錄
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); // 如果找到的是目錄,則進(jìn)入此目錄進(jìn)行遞歸
}
else
{
if (IsRoot(lpszPath))
wsprintf(szFile, "%s%s", lpszPath, wfd.cFileName);
else
wsprintf(szFile, "%s\\%s", lpszPath, wfd.cFileName);
printf("%s\n",szFile);
files[count_file].num=count_file;
strcpy(files[count_file].name,szFile);
count_file = count_file + 1;
//printf("count_file=%d,num=%s\n",count_file, files[count_file-1].name);
// 對文件進(jìn)行操作
}
} while (FindNextFile(hFind, &wfd));
FindClose(hFind); // 關(guān)閉查找句柄
}
int main(int argc, char* argv[])
{
FILE *fp1;
int i,j,k;
char buf[800]=" ";
char buf1[800]=" ";
int type=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("current working directory : %s\n", buf);
FindInAll(buf);
for(i=0;i<count_file;i++)
{
memset(buf1,0,800);
strcpy(buf1,files[i].name);
type=0;
k=strlen(buf1);
//printf("\n 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("\n j=%d\n",j);
type=1;
files[i].vtype=1;
fprintf(fp1,"%s\n",files[i].name);
}
}
}
getch();
fclose(fp1);
return 0;
}
版本更新記錄
版本號:V1.1.2
更新日期:2013-07-17
14:46:46 修改代碼,擴(kuò)展name的長度為800,可以處理長路徑的情況
版本號:V1.1.1
更新日期:2013-05-18
10:55:38 修改代碼,添加判斷語句&& (j==k-2),避免.vhd等文件也被列出來
版本號:V1.1.0
更新日期:2013-02-10
14:49:55 已添加對文件名進(jìn)行判斷,能夠自動的將當(dāng)前路徑下的所有文件及子文件夾下的.v文件列舉出來。
全文完。
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請聯(lián)系工作人員刪除。
攝像頭相關(guān)文章:攝像頭原理