从AD的原理图自动提取引脚网络的小工具

这里跟大家分享一个我自己写的小软件,实现从AD的原理图里自动找出网络名称和引脚的对应。存成文本方便后续做表格或是使用简单行列编辑生成引脚约束文件(如.XDC  .UCF .TCL等)。

我们在FPGA设计中需要引脚锁定文件,就是指示TOP层的端口名称是实际芯片的那个哪个IO脚。这个工作比较繁琐,我们对照原理图每个网络这样搜索,效率很低。由于我基本使用AD设计原理图,知道可以生成protel的网表,我对protel网表格式很熟悉,可以做个软件找出他的引脚对应的网络名称,这样列出一个表格,就得到了原理图中网络名称跟FPGA芯片引脚对应的一个表格。

通过以下方式可以生成protel格式的网络:

即在打开的原理图项目:Design -> Netlist for Project -> Protel . 

生成的网表是有小括号和中括号组成的,其中中括号内的是原件属性。小括号是网络名称以及连接的原件引脚。我们就从这个小括号里面找到看是否连接了FPGA的引脚,如果有连接就记录下这个网络和引脚,并输出到文件。


比如我们原理图中U1是要处理的FPGA,程序找到下面的网络就会记录下来。

记录下来生成文本文件:

有了这个文本文件就可以使用行列编辑生成自己需要文件格式。

这里我提供出自己写的这个小工具。如下图:

这里主要看dec_net.c这个文件,代码如下:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static char line[1024];
static char ux[20];

int str_find(char*a,char*b)
{
    //find if b in a .
    char*p=strstr(a,b);
    return p!=NULL ;
}

static char buff[1000][100];
static int idx=0 ;

void prt_len(char*p,int len)
{
    int r=len-strlen(p);
    printf("%s",p);
    while(r--)printf(" ");
}


void print_buff()
{
    int i ;
    int valid=0 ;
    for(i=0;i<idx;++i)if(strstr(buff[i],ux))valid++;
    
    if(valid>=2)return ;
    if(valid==0)return ;
    if(idx==1)return ;
    if(idx!=2)return ;
    
    for(i=0;i<idx;++i)prt_len(buff[i],30);
     	printf("%s \t",buff[i]) ;
    
    puts(" ");
    
}

int feed_a_line(char*p)
{
    ///puts(p);
    if(p)
    {
        strcpy(buff[idx++],p);
        return idx ;
    }
    print_buff();
    idx=0 ;
}


int check_a_line(char*p)
{
    
    static int st=0 ;
    if(st==0)
    {
        if(p[0]=='(')st=1 ;
        return st ;
    }
    else if(st==1)
    {
        if(p[0]==')')
        {
            st=0 ;
            feed_a_line(NULL);
            return st ;
        }
        if(strstr(p,ux))feed_a_line(p);
        else if(strstr(p,"-")==NULL)feed_a_line(p);
    }
    
}


int main(int argc,char*argv[])
{
    FILE*file ;
    static char fn[20];
    if(argc<3)
    {
        printf("uasge :\n\t dec_net file_name Ux\n ");
        exit(1);
    }
    strcpy(fn,argv[1]);
    strcpy(ux,argv[2]);
    strcat(ux,"-");
    
    file=fopen(fn,"r");
    if(file==NULL)
    {
        printf("无法打开文件.\n");
        return 1 ;
    }
    
    while(fgets(line,sizeof(line),file)!=NULL)
    {
        line[strcspn(line,"\n")]='\0' ;
        check_a_line(line);
    }
    
    fclose(file);
    return 0 ;
}


运行这个需要两个参数 第一个是输入网络文件名,第二个就是要找的原件号。

dec_net oct_sdr.net U1 就是在oct_sdr.net这个文件里面找到U1的网络和引脚对应关系。

另外我还写一个对行进行排序的小工具sort_line,就使用简单冒泡排序,实现代码如下:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>


static char buff[2000][1024];
static int idx=0 ;

void print_buff()
{
    int i ;
    for(i=0;i<idx;++i)
    printf("%s \n",buff[i]);
}

void bubble_sort(void)
{
    static char temp[1000];
    int n=idx ;
    for(int i=0;i<n-1;i++)
    {
        for(int j=0;j<n-i-1;j++)
        {
            if(strcmp(buff[j+0],buff[j+1])>0)
            {
                strcpy(temp,buff[j]);
                strcpy(buff[j],buff[j+1]);
                strcpy(buff[j+1],temp);
            }
        }
    }
}

static char line[1024];
int main(int argc,char*argv[])
{
    FILE*file ;
    if(argc>1)
    file=fopen(argv[1],"r");
    if(file==NULL)
    {
        printf("can not read file.\n");
        return 1 ;
    }
    
    while(fgets(line,sizeof(line),file)!=NULL)
    {
        line[strcspn(line,"\n")]='\0' ;
        //    puts( line );
        strcpy(buff[idx++],line);
        ///   feed_a_line (line ) ;
    }
    
    fclose(file);
    //now all line in buff
    
    printf("find line is %d \r\n",idx);
    
    bubble_sort();
    
    print_buff();
    
    return 0 ;
    
}

这样做出来的列表很整齐。如下图:

具体使用的时候,我们修改run_dec.bat 修改dec_net的两个参数,

运行之后就得到了一个nnn.txt 文件,用文本打开就看到生成的结果。

这里注意里面也可能包含了电源等非IO的网络以及引脚,这里注意手工排除一下。

通过网盘分享的文件:dec_net.zip
链接: https://pan.baidu.com/s/1zqR6sT5M37d1-pwwdPGERA 提取码: zxgd 

by 李伟

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/962237.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【2025年最新版】Java JDK安装、环境配置教程 (图文非常详细)

文章目录 【2025年最新版】Java JDK安装、环境配置教程 &#xff08;图文非常详细&#xff09;1. JDK介绍2. 下载 JDK3. 安装 JDK4. 配置环境变量5. 验证安装6. 创建并测试简单的 Java 程序6.1 创建 Java 程序&#xff1a;6.2 编译和运行程序&#xff1a;6.3 在显示或更改文件的…

WGCLOUD服务器资源监控软件使用笔记 - Token is error是什么错误

[wgcloud-agent]2025/01/30 10:41:30 WgcloudAgent.go:90: 主机监控信息上报server开始 [wgcloud-agent]2025/01/30 10:41:30 WgcloudAgent.go:99: 主机监控信息上报server返回信息: {"result":"Token is error"} 这个错误是因为agent配置的wgToken和serv…

MySQL(表空间)

​开始前先打开此图配合食用 MySQL表空间| ProcessOn免费在线作图,在线流程图,在线思维导图 InnoDB 空间文件中的页面管理 后面也会持续更新&#xff0c;学到新东西会在其中补充。 建议按顺序食用&#xff0c;欢迎批评或者交流&#xff01; 缺什么东西欢迎评论&#xff01;我都…

白嫖DeepSeek:一分钟完成本地部署AI

1. 必备软件 LM-Studio 大模型客户端DeepSeek-R1 模型文件 LM-Studio 是一个支持众多流行模型的AI客户端&#xff0c;DeepSeek是最新流行的堪比GPT-o1的开源AI大模型。 2. 下载软件和模型文件 2.1 下载LM-Studio 官方网址&#xff1a;https://lmstudio.ai 打开官网&#x…

知识管理平台在数字经济时代推动企业智慧决策与知识赋能的路径分析

内容概要 在数字经济时代&#xff0c;知识管理平台被视为企业智慧决策与知识赋能的关键工具。其核心作用在于通过高效地整合、存储和分发企业内部的知识资源&#xff0c;促进信息的透明化与便捷化&#xff0c;使得决策者能够在瞬息万变的市场环境中迅速获取所需信息。这不仅提…

关于MySQL InnoDB存储引擎的一些认识

文章目录 一、存储引擎1.MySQL中执行一条SQL语句的过程是怎样的&#xff1f;1.1 MySQL的存储引擎有哪些&#xff1f;1.2 MyIsam和InnoDB有什么区别&#xff1f; 2.MySQL表的结构是什么&#xff1f;2.1 行结构是什么样呢&#xff1f;2.1.1 NULL列表&#xff1f;2.1.2 char和varc…

【开源免费】基于SpringBoot+Vue.JS公交线路查询系统(JAVA毕业设计)

本文项目编号 T 164 &#xff0c;文末自助获取源码 \color{red}{T164&#xff0c;文末自助获取源码} T164&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

【Unity3D】实现横版2D游戏角色二段跳、蹬墙跳、扶墙下滑

目录 一、二段跳、蹬墙跳 二、扶墙下滑 一、二段跳、蹬墙跳 GitHub - prime31/CharacterController2D 下载工程后直接打开demo场景&#xff1a;DemoScene&#xff08;Unity 2019.4.0f1项目环境&#xff09; Player物体上的CharacterController2D&#xff0c;Mask添加Wall层…

讯飞智作 AI 配音技术浅析(二):深度学习与神经网络

讯飞智作 AI 配音技术依赖于深度学习与神经网络&#xff0c;特别是 Tacotron、WaveNet 和 Transformer-TTS 模型。这些模型通过复杂的神经网络架构和数学公式&#xff0c;实现了从文本到自然语音的高效转换。 一、Tacotron 模型 Tacotron 是一种端到端的语音合成模型&#xff…

初始化mysql报错cannot open shared object file: No such file or directory

报错展示 我在初始化msyql的时候报错&#xff1a;mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory 解读&#xff1a; libaio包的作用是为了支持同步I/O。对于数据库之类的系统特别重要&#xff0c;因此…

DeepSeek介绍

目录 前言 1.介绍一下你自己 2.什么是CUDA CUDA的核心特点&#xff1a; CUDA的工作原理&#xff1a; CUDA的应用场景&#xff1a; CUDA的开发工具&#xff1a; CUDA的局限性&#xff1a; 3.在AI领域&#xff0c;PTX是指什么 1. PTX 的作用 2. PTX 与 AI 的关系 3. …

python学opencv|读取图像(五十一)使用修改图像像素点上BGR值实现图像覆盖效果

【1】引言 前序学习了图像的得加方法&#xff0c;包括使用add()函数直接叠加BGR值、使用bitwise()函数对BGR值进行按位计算叠加和使用addWeighted()函数实现图像加权叠加至少三种方法。文章链接包括且不限于&#xff1a; python学opencv|读取图像&#xff08;四十二&#xff…

【硬件介绍】三极管工作原理(图文+典型电路设计)

什么是三极管&#xff1f; 三极管&#xff0c;全称为双极型晶体三极管&#xff0c;是一种广泛应用于电子电路中的半导体器件。它是由三个掺杂不同的半导体材料区域组成的&#xff0c;这三个区域分别是发射极&#xff08;E&#xff09;、基极&#xff08;B&#xff09;和集电极&…

【解决方案】MuMu模拟器移植系统进度条卡住98%无法打开

之前在Vmware虚拟机里配置了mumu模拟器&#xff0c;现在想要移植到宿主机中 1、虚拟机中的MuMu模拟器12-1是目标系统&#xff0c;对应的目录如下 C:\Program Files\Netease\MuMu Player 12\vms\MuMuPlayer-12.0-1 2、Vmware-虚拟机-设置-选项&#xff0c;启用共享文件夹 3、复…

C++中常用的十大排序方法之1——冒泡排序

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于C中常用的排序方法之——冒泡排序的相关…

开源2+1链动模式AI智能名片S2B2C商城小程序:利用用户争强好胜心理促进分享行为的策略研究

摘要&#xff1a;随着互联网技术的快速发展和社交媒体的普及&#xff0c;用户分享行为在企业营销中的作用日益凸显。本文旨在探讨如何利用用户的争强好胜心理&#xff0c;通过开源21链动模式AI智能名片S2B2C商城小程序&#xff08;以下简称“小程序”&#xff09;促进用户分享行…

DeepSeek-R1环境搭建推理测试

引子 这两天国货之光DeepSeek-R1火爆出圈&#xff0c;凑个热闹。过来看看 aha moment&#xff08;顿悟时刻&#xff09;的神奇&#xff0c;OK&#xff0c;我们开始吧。 一、模型介绍 1月20日&#xff0c;中国AI公司深度求索&#xff08;DeepSeek&#xff09;发布的DeepSeek-…

【深度分析】微软全球裁员计划不影响印度地区,将继续增加当地就业机会

当微软的裁员刀锋掠过全球办公室时&#xff0c;班加罗尔的键盘声却愈发密集——这场资本迁徙背后&#xff0c;藏着数字殖民时代最锋利的生存法则。 表面是跨国公司的区域战略调整&#xff0c;实则是全球人才市场的地壳运动。微软一边在硅谷裁撤年薪20万美金的高级工程师&#x…

架构技能(六):软件设计(下)

我们知道&#xff0c;软件设计包括软件的整体架构设计和模块的详细设计。 在上一篇文章&#xff08;见 《架构技能&#xff08;五&#xff09;&#xff1a;软件设计&#xff08;上&#xff09;》&#xff09;谈了软件的整体架构设计&#xff0c;今天聊一下模块的详细设计。 模…

unity使用内置videoplayer打包到安卓手机进行视频播放

1.新建UI&#xff0c;新建RawImage在画布当作视频播放的显示载体 2.新建VideoPlayer 3.新建Render Texture作为连接播放器视频显示和幕布的渲染纹理 将Render Texture同时挂载在VideoPlayer播放器和RawImage上。这样就可以将显示的视频内容在RawImage上显示出来了。 问题在于&a…