首先,在Cadence中生成网络表,默认是一个“pstxnet.dat”文件,所有的网络之间的连接关系都在该文件中。
我们也是修改该文件。
现在来操作步骤:
1. 把生成的NetCheckMain.exe和pstxnet.dat文件放在同一个目录,双击运行,会产生out.dat文件。
2. 建立一个Excel表格文件,打开out.dat文件,复制所有内容;粘贴在Excel表格中。
3. 调整表格列的位置,即可得到简化的网络表。
说明:
第一行和第二行是网络表文件生成的日期时间,第三行是列的说明。
第一列:表示一个网络节点;
第二列:表示网络节点的名称,即在原理图中的网络名称;
第三列:该网络的连接点的编号(自己定义的,为了统计该网络有多少个节点);
第四列:表示该节点属于原理图中的那个芯片,那个管脚;
第五列:表示该节点是什么芯片;
第六列:表示该芯片的管脚名称。
程序源码如下:
本代码又本人编写,大神不喜勿喷!
/*---------------------------------------我是源码分割线-----------------------------------------*/
/* FileStream.h*/
#ifndef _FILESTREAM_H_
#define _FILESTREAM_H_
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define INFNAME_ERR 2
#define OUTFNAME_ERR 3
int NetFile(char * lpInFileName, char * lpOutFileName);
#endif
/*FileStream.cpp*/
#include "FileStream.h"
#include "StringPro.h"
int NetFile(char * lpInFileName, char * lpOutFileName)
{
char buf[150];
char *pbuf;
char times[30];
char date[12];
char time[8];
int iNetNumber = 0;
int netCount = 0;
bool bNetName = false;
bool bNetNameFlag = false;
char cNetName[30] ;
bool bVersionNOFlag = false;
char cVersionNO[20] ;
bool bNodeNameFlag = false;
char cNodeName[30];
int iNodeNum = 0;
bool bChipModFlag = false;
char cChipMod[30];
bool bPinNameFlag = false;
char cPinName[30];
int ipos = 0;
int i = 0;
FILE * inputFile;
FILE * outputFile;
inputFile = fopen(lpInFileName, "r");
outputFile = fopen(lpOutFileName, "w");
if(!inputFile)
{
printf("%s does not exist\n", lpInFileName);
return INFNAME_ERR;
}
if(!outputFile)
{
printf("%s create fail!\n", lpOutFileName);
return OUTFNAME_ERR;
}
fgets(buf, 150, inputFile);
fgets(buf, 150, inputFile);
pbuf = strstr(buf, "p001");
strCatch(pbuf, times, 4, '}');
strCatch(times, date, 0, ' ');
fprintf(outputFile, "日期\t%s\n", date);
strCatch(times, time, 15, ' ');
fprintf(outputFile, "时间\t%s\n", time);
fprintf(outputFile, "网络名称编号\t网络名称\t连接点编号\t连接点位号/对应芯片管脚号\t芯片名称\t管脚名称\n");
while(feof(inputFile) != EOF)
{
fgets(buf, 150, inputFile);
if(buf[0] == 'E' && buf[1] == 'N' && buf[2] == 'D' && buf[3] == '.')
break;
//查找网络标号
if(bNetNameFlag == false)
{
if(strFind(buf, "NET_NAME"))
{
iNetNumber ++;
iNodeNum = 0;
if(iNetNumber){
printf("\n");
fprintf(outputFile, "\n");
}
printf("NET_NAME_%d\t", iNetNumber);
//fprintf(outputFile, "NET_NAME_%d\t", iNetNumber);
fprintf(outputFile, "NET_NAME\t");
bNetNameFlag = true;
bNetName = false;
}
else if(strFind(buf, "NODE_NAME"))
{
bNetNameFlag = true;
bNodeNameFlag = false;
}
}
if(bNetName == false && bNetNameFlag == true && buf[0] == 39) //第一个是 ' ,说明下一个字符到下次出现 ' 之前的字符串为网络标号
{
strCatch(buf, cNetName, 1, 39); //在buf中偏移一个地址,将ascii为39之前的字符串复制到cNetName中
printf("%s\n", cNetName);
fprintf(outputFile, "%s", cNetName);
bNetName = true;
bNodeNameFlag = false;
continue;
}
//一次性查找网络表版本信息
if(bNetName == true && bVersionNOFlag == false && buf[1] == 39 && buf[2] == '@')
{
strCatch(buf, cVersionNO, 3, '.');
//printf(" %s ", cVersionNO);
//fprintf(outputFile, " %s ", cVersionNO);
bVersionNOFlag = true;
continue;
}
//查找网络标号对应的连接点
if(bNodeNameFlag == false )
{
if(strFind(buf, "NODE_NAME") == true )
{
iNodeNum ++;
strCatch(buf, cNodeName, 10, '\n');
//printf("\t-%d-->%s\t\t", iNodeNum, cNodeName);
if(iNodeNum == 1)
fprintf(outputFile, "\t%d\t%s", iNodeNum, cNodeName);
else
fprintf(outputFile, "\t\t%d\t%s", iNodeNum, cNodeName);
bNodeNameFlag = true;
bChipModFlag = false;
}
}
//查找网络节点的芯片型号
if(bNodeNameFlag == true && bChipModFlag == false)
{
pbuf = buf;
ipos = 0;
while(*pbuf != '\n')
{
if(*pbuf == '.')
ipos++;
if(ipos == 2)
{
strCatch(pbuf, cChipMod, 1, '.');
//printf("--%s\t\t", cChipMod);
fprintf(outputFile, "\t%s", cChipMod);
bChipModFlag = true;
bPinNameFlag = false;
break;
}
pbuf++;
}
if(bChipModFlag == true)
continue;
}
//查找芯片管脚名称
if(bPinNameFlag == false && bChipModFlag == true)
{
if(buf[1] == 39)
{
strCatch(buf, cPinName, 2, 39);
//printf("->%s\n", cPinName);
fprintf(outputFile, "\t%s\n", cPinName);
bPinNameFlag = true;
bNetNameFlag = false;
}
}
}
fclose(inputFile);
fclose(outputFile);
return OK;
}
/*StringPro.h*/
#ifndef _STRINGPRO_H_
#define _STRINGPRO_H_
#include <string.h>
bool strFind(char* bufString, char* findString);
void strCatch(char * buf, char *retStr, int pos, char ch);
#endif
/*StringPro.cpp*/
#include "StringPro.h"
bool strFind(char* bufString, char* findString)
{
char *p;
p = strstr(bufString, findString);
if(p == NULL)
return false;
else
return true;
}
void strCatch(char * buf, char *retStr, int pos, char ch)
{
buf += pos;
while(*buf != ch)
{
*retStr++ = *buf++;
}
*retStr = '\0';
}
/*NetCheckMain.cpp*/
#include "FileStream.h"
int main()
{
NetFile("pstxnet.dat", "out.dat");
return 0;
}
/*---------------------------------------我是源码分割线-----------------------------------------*/