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

news2025/1/30 14:41:22

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构】(1)集合类的认识

一、什么是数据结构 1、数据结构的定义 数据结构就是存储、组织数据的方式&#xff0c;即相互之间存在一种或多种关系的数据元素的集合。 2、学习数据结构的目的 在实际开发中&#xff0c;我们需要使用大量的数据。为了高效地管理这些数据&#xff0c;实现增删改查等操作&…

解决使用Selenium时ChromeDriver版本不匹配问题

在学习Python爬虫过程中如果使用Selenium的时候遇到报错如下session not created: This version of ChromeDriver only supports Chrome version 99… 这说明当前你的chrome驱动版本和浏览器版本不匹配。 例如 SessionNotCreatedException: Message: session not created: This…

CAN波特率匹配

STM32 LinuxIMX6ull&#xff08;Linux&#xff09;基于can-utils测试

JavaScript中的相等运算符:`==`与`===`

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

A7. Jenkins Pipeline自动化构建过程,可灵活配置多项目、多模块服务实战

服务容器化构建的环境配置构建前需要解决什么下面我们带着问题分析构建的过程:1. 如何解决jenkins执行环境与shell脚本执行环境不一致问题?2. 构建之前动态修改项目的环境变量3. 在通过容器打包时避免不了会产生比较多的不可用的镜像资源,这些资源要是不及时删除掉时会导致服…

66-《虞美人》

虞美人 虞美人&#xff08;学名&#xff1a;Papaver rhoeas L.&#xff09;&#xff1a;一年生草本植物&#xff0c;全体被伸展的刚毛&#xff0c;稀无毛。茎直立&#xff0c;高25-90厘米&#xff0c;具分枝。叶片轮廓披针形或狭卵形&#xff0c;羽状分裂&#xff0c;裂片披针形…

obsidian插件——Metadata Hider

原本是要找导出图片时显示属性的插件&#xff0c;奈何还没找到&#xff0c;反而找到了可以隐藏属性的插件。唉&#xff0c;人生不如意&#xff0c;十之八九。 说一下功能&#xff1a; 这个插件可以把obsidian的文档属性放在右侧显示&#xff0c;或者决定只显示具体几项属性&a…

特种作业操作之低压电工考试真题

1.下面&#xff08; &#xff09;属于顺磁性材料。 A. 铜 B. 水 C. 空气 答案&#xff1a;C 2.事故照明一般采用&#xff08; &#xff09;。 A. 日光灯 B. 白炽灯 C. 压汞灯 答案&#xff1a;B 3.人体同时接触带电设备或线路中的两相导体时&#xff0c;电流从一相通过人体流…

[免费]基于Python的Django博客系统【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的基于Python的Django博客系统&#xff0c;分享下哈。 项目视频演示 【免费】基于Python的Django博客系统 Python毕业设计_哔哩哔哩_bilibili 项目介绍 随着互联网技术的飞速发展&#xff0c;信息的传播与…

进程池的制作(linux进程间通信,匿名管道... ...)

目录 一、进程间通信的理解 1.为什么进程间要通信 2.如何进行通信 二、匿名管道 1.管道的理解 2.匿名管道的使用 3.管道的五种特性 4.管道的四种通信情况 5.管道缓冲区容量 三、进程池 1.进程池的理解 2.进程池的制作 四、源码 1.ProcessPool.hpp 2.Task.hpp 3…

Gurobi 基础语法之 tupledict 和 tuplelist

Python中的字典&#xff1a;dict 我们先来介绍一下Python语法中的 dict 类型, 字典中可以通过任意键值来对数据进行映射&#xff0c;任何无法修改的python对象都可以当作键值来使用&#xff0c;这些无法修改的Python对象包括&#xff1a;整数(比如&#xff1a;1)&#xff0c;浮…

Flutter:搜索页,搜索bar封装

view 使用内置的Chip简化布局 import package:chenyanzhenxuan/common/index.dart; import package:ducafe_ui_core/ducafe_ui_core.dart; import package:flutter/material.dart; import package:get/get.dart; import package:tdesign_flutter/tdesign_flutter.dart;import i…

IoTDB 2025 春节值班与祝福

2025 春节快乐 瑞蛇迎吉庆&#xff0c;祥光映华年&#xff0c;2025 春节已近在眼前。社区祝福 IoTDB 的所有关注者、支持者、使用者 2025 新年快乐&#xff0c;“蛇”来运转&#xff01; IoTDB 团队的春节放假时间为 2025 年 1 月 27 日至 2 月 4 日&#xff0c;1 月 25 日、26…

刀客doc:禁令影响下,TikTok广告业务正在被对手截胡

一、 现如今&#xff0c;TikTok在美国的命运迎来了暂时的反转&#xff0c;根据Adage的报道&#xff0c;广告主的投放在恢复。但短暂的关闭带来的影响依然有余震&#xff0c;一些广告主在重新评估TikTok在自己广告预算中的地位&#xff0c;这些是竞争对手截胡的机会。 长期以…

中国电信AI大模型发布:评分超o1-preview,近屿智能带您探索AI技术新境界

近日&#xff0c;中国电信人工智能研究院宣布&#xff0c;其自主研发的复杂推理大模型TeleAI-t1-preview即将上线天翼AI开放平台。该模型采用强化学习训练方法&#xff0c;显著提升了逻辑推理和数学推导的准确性&#xff0c;展现了强大的复杂问题解决能力。 在权威评测中&#…

开发环境搭建-4:WSL 配置 docker 运行环境

在 WSL 环境中构建&#xff1a;WSL2 (2.3.26.0) Oracle Linux 8.7 官方镜像 基本概念说明 容器技术 利用 Linux 系统的 文件系统&#xff08;UnionFS&#xff09;、命名空间&#xff08;namespace&#xff09;、权限管理&#xff08;cgroup&#xff09;&#xff0c;虚拟出一…

Git 如何将旧仓库迁移新仓库中,但不显示旧的提交记录

一、异常错误 场景&#xff1a;我想把旧仓库迁移新仓库中&#xff0c;放进去之后&#xff0c;新仓库会显示这个项目之前的所有提交&#xff0c;如何不显示这些旧的提交&#xff1f; 二、原因 我们需要将旧仓库迁移新仓库中&#xff0c;但是又不想在新仓库中显示旧的提交记录…

使用Python和Qt6创建GUI应用程序--关于Qt的一点介绍

关于Qt的一点介绍 Qt是一个免费的开源部件工具包&#xff0c;用于创建跨平台GUI应用程序&#xff0c;允许应用程序从Windows瞄准多个平台&#xff0c;macOS&#xff0c; Linux和Android的单一代码库。但是Qt不仅仅是一个Widget工具箱和功能内置支持多媒体&#xff0c;数据库&am…

4、PyTorch 第一个神经网络,手写神经网络的基本部分组成

假设有一个二维数据集&#xff0c;目标是根据点的位置将它们分类到两个类别中&#xff08;例如&#xff0c;红色和蓝色点&#xff09;。 以下实例展示了如何使用神经网络完成简单的二分类任务&#xff0c;为更复杂的任务奠定了基础&#xff0c;通过 PyTorch 的模块化接口&#…

挂载mount

文章目录 1.挂载的概念(1)挂载命令&#xff1a;mount -t nfs(2)-t 选项&#xff1a;指定要挂载的文件系统类型(3)-o选项 2.挂载的目的和作用(1)跨操作系统访问&#xff1a;将Windows系统内容挂载到Linux系统下(2)访问外部存储设备(3)整合不同的存储设备 3.文件系统挂载要做的事…