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

server/2025/2/8 4:44:33/

这里跟大家分享一个我自己写的小软件,实现从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 buffprintf("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 李伟


http://www.ppmy.cn/server/165851.html

相关文章

MySQL知识点总结(一)

1.SQL分类 数据定义&#xff08;DDL&#xff09;:创/改/删/名/清&#xff08;cadrt&#xff09; 数据库对象&#xff1a;表/视图/存储/函数/触发器/事件 数据操作&#xff08;DML&#xff09;&#xff1a;增/删/改/查&#xff08;idus&#xff09; 操作数据库对象 数据控制&…

深度学习篇---深度学习框架图像预处理各部分组件

文章目录 前言第一部分&#xff1a;图像预处理PaddlePaddle 图像预处理PyTorch 图像预处理 第二部分&#xff1a;框架各部分组件PaddlePaddle1.卷积层 (Convolutional Layer)2.池化层 (Pooling Layer)3.全连接层 (Fully Connected Layer)4.激活函数 (Activation Function)5.优化…

Node.js学习指南

一、模块化规范 nodejs使用的模块化规范 叫做 common.js 规范: 每一个模块都有独立的作用域 代码在各自模块中执行 不会造成全局污染 每一个模块都是一个独立的文件&#xff08;module对象&#xff09; 模块可以被多次加载&#xff08;module.exports 属性&#xff09; 但是仅…

使用Python的Tabulate库优雅地格式化表格数据

使用Python的Tabulate库优雅地格式化表格数据 在数据分析和软件开发中&#xff0c;表格数据的展示是一个常见的需求。无论是简单的数据报告&#xff0c;还是复杂的数据可视化&#xff0c;表格都是一种直观且有效的信息展示方式。Python作为一门强大的编程语言&#xff0c;拥有…

Nginx如何实现 TCP和UDP代理?

文章目录 前言 Nginx之TCP和UDP代理 工作原理示意图 配置文件和命令参数注释 基本命令 配置实例说明 TCP代理实例UDP代理实例 总结 前言 Nginx是一个高性能的HTTP和反向代理服务器&#xff0c;同时也支持TCP/UDP代理。在1.9.13版本后&#xff0c;Nginx已经支持端口转发&…

input 超出maxlength限制后,输入框变红

一、前言 最近收到产品的一个需求&#xff1a;输入框限制了maxlength“11”&#xff0c;需要在输入第12位时&#xff0c;输入框变红&#xff1b;当然&#xff0c;第12位是不能真正输入到输入框中的。 二、实现难点 其实&#xff0c;单纯的要监听 字母和数字以及字符 还是比较容…

selenium记录Spiderbuf例题C01

防止自己遗忘&#xff0c;故作此为记录。 步骤&#xff1a; &#xff08;1&#xff09;进入例题&#xff0c;找到需要点击的元素。 可得button xpath&#xff1a; click_xpath: str r//li/a[title"mnist"] WebDriverWait(driver, 10).until(expected_conditions.…

洛谷 P8724 [蓝桥杯 2020 省 AB3] 限高杆

洛谷题目传送门 题目描述 某市有 n 个路口&#xff0c;有 m 段道路连接这些路口&#xff0c;组成了该市的公路系统。其中一段道路两端一定连接两个不同的路口。道路中间不会穿过路口。 由于各种原因&#xff0c;在一部分道路的中间设置了一些限高杆&#xff0c;有限高杆的路…