风波邪人

幸福,幸福就是心里有那么一个人,不管你走到哪儿,也不管她走到哪儿,心里永远想着她

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

首先,在Cadence中生成网络表,默认是一个“pstxnet.dat”文件,所有的网络之间的连接关系都在该文件中。

我们也是修改该文件。

现在来操作步骤:

1. 把生成的NetCheckMain.exe和pstxnet.dat文件放在同一个目录,双击运行,会产生out.dat文件。

 

image

 

image

2. 建立一个Excel表格文件,打开out.dat文件,复制所有内容;粘贴在Excel表格中。

image

image

3. 调整表格列的位置,即可得到简化的网络表。

image

说明:

第一行和第二行是网络表文件生成的日期时间,第三行是列的说明。

第一列:表示一个网络节点;

第二列:表示网络节点的名称,即在原理图中的网络名称;

第三列:该网络的连接点的编号(自己定义的,为了统计该网络有多少个节点);

第四列:表示该节点属于原理图中的那个芯片,那个管脚;

第五列:表示该节点是什么芯片;

第六列:表示该芯片的管脚名称。

 

 

 

 

 

 

 

 

程序源码如下:

本代码又本人编写,大神不喜勿喷!

/*---------------------------------------我是源码分割线-----------------------------------------*/

/* 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;
}

/*---------------------------------------我是源码分割线-----------------------------------------*/

posted on 2014-01-09 18:20  风波邪人  阅读(498)  评论(0编辑  收藏  举报