一种设计原理图的编程方法。

pcbdl的Python项目详细描述


PCB设计语言

设计示意图的编程方法。

安装

pypi version

sudo apt-get install python3 python3-pip python3-pygments

sudo pip3 install pcbdl

交互式终端

无需单独编写文件即可尝试各种功能的好方法。

python3 -i -c "from pcbdl import *"

语言

pcbdl的目标是允许通过代码设计原理图。与vhdl或verilog以代码形式表示逻辑图的方式类似,pcbdl与之类似,但对于eda原理图来说则不同。

首先,应该定义两个网络:

>>> vcc, gnd = Net("vcc"), Net("gnd")
>>> vin = Net("vin")
>>> base = Net("base")

然后,我们可以使用<;运算符和to=参数(对于另一侧)在这些网络之间连接各种组件:

>>> base << C("1000u", to=vin)
>>> base << (
	R("1k", to=vcc),
	R("1k", to=gnd),
)

像电容器和电阻器这样的2针设备(在pcbdl中也叫果冻)是最容易连接的东西之一。它们内部有一个主(与>;连接)和一个辅助、另一侧的管脚(与to=连接)。

让我们通过定义一个晶体管并连接它的一些管脚来尝试变得更加复杂。

>>> class Transistor(Part):
	REFDES_PREFIX = "Q"
	PINS = ["B", "C", "E"]
...
>>> q = Transistor()
>>> base << q.B

如果从部件的管脚开始,也可以匿名创建网络:

>>> q.E << (
	R("100", to=gnd),
	C("1u", to=gnd),
)

让我们完成我们的A级放大器(注意我们是如何创建"Vout"网络的,以及我们是如何给一个电阻器命名的):

>>> q.C << (
	C("100u", to=Net("vout")),
	R("100", "Rc", to=vcc),
)

注:可以在示例/u a.py类中找到此放大器的完整版本:

python3 -i examples/class_a.py

现在可以为尚未手动命名的组件提供自动连续的引用指示符:

>>> global_context.autoname()

然后可以探索电路:

sudo apt-get install python3 python3-pip python3-pygments

sudo pip3 install pcbdl
0

示例

可在examples/文件夹中找到。另一种确保环境正常的方法。 我们可以用python"运行"任何示例示意图,add-i对示意图执行更多的分析操作。

  • 电压分配器.py:非常简单的电压分配器
  • a类。py:a类晶体管放大器,这是一个很好的例子,说明一个复杂的碟形模拟电路是什么样子的。
  • servo_micro.py伺服微示意图,在PCBDL中重新实现,最初是一个8页的PDF示意图

导出

网络列表

这种语言的主要目的是帮助制造多氯联苯。布局程序(其中一个设计物理板)的中间文件格式称为netlist。我们必须支持输出到该格式(或几种格式)。

目前我们有一个关于Allegro Cadence网表出口商的最小可行例子(见netlist.py):

sudo apt-get install python3 python3-pip python3-pygments

sudo pip3 install pcbdl
1

HTML

这将生成一个独立的HTML页面,其中所有内容都是交叉链接的:

  • 每个网络上都有指向部件和管脚的链接的列表
  • 具有零件特性的零件列表和链接到已连接网络的管脚列表
  • 突出显示的源代码,每个变量和对象都链接到前两个列表

下面是这样一个例子:伺服Micro的HTML输出

电路的示意图/图形表示法

为了使原理图更容易分析,我们希望以图形方式显示它们。netlistsvg项目已经被证明是解决这一难题的一个极好的工具。有关实现,请参见pcbdl/netlistsvg.py

  1. 将PCBDL原理图转换回传统原理图

    生成svg("svg文件名")

    下面是伺服_micro示例的SVG输出

  2. 有关如何连接特定对象的独立示意图:

    生成svg('svg_filename',net_regex='.*(sda scl.*',airwires=0)

    生成svg("svg文件名",net_regex='*(p p gnd vin vbus)。*")

  3. 整个系统的框图

    • 这取决于示意图是如何声明的,如果它不够层次化,它将没有很多"块"可显示
    • 此任务取决于是否允许PCBDL中的层次结构
  4. < > >

    BOM

    在pcbdl中实现物料清单是一件小事。

    Erc

    电气规则检查。如何对原理图进行单元测试?

    这是一个很大的"待办事项"。基本思想是,引脚将得到比普通eda软件更重的注释。

    管脚不仅具有简单的输入/输出/漏极开路/电源特性,还将详细介绍如下内容:

    • 输入和输出功率良好
    • VIH,VIL
    • 输出电压

    有了这些信息,就可以制作隔离的spice电路来检查电流泄漏。 对于每个网络,对于该网络上的每个输出管脚组合,所有输入管脚是否都接收到适当的电压?

    从传统EDA原理图导入

    考虑到图形输出可能是不可能的,并且语言比普通的示意图更不可读,也许我们应该使用pcbdl作为中间数据格式或库。

    使用它的方法是导入一个kicad示意图,用更多的类对其进行注释(为了bom和erc的目的,除非我们能找到一种方法将所有元数据放入kicad示意图中)。那么pcbdl的所有导出和分析功能仍然可以使用。

    kicad导入程序应该很容易实现。待办事项

    支架

    这不是官方支持的谷歌产品。

    语言本身仍然在变化,事情可能会改变。很多语法被添加为可能的演示,可能还需要改进。请不要使用这种语言,除非您希望进行一些修补以使您的示意图与语言保持最新。

    学分/感谢

    • cbold用于创意
    • netlistsvg支持SVG输出
    • Chrome OS硬件设计团队提供反馈

    欢迎加入QQ群-->: 979659372 Python中文网_新手群

    推荐PyPI第三方库


热门话题
java应用程序不是在Eclipse中运行,而是在命令行中运行   swing Java图形组件问题。似乎找不到错误   我需要键盘。close();让代码正常工作?   Springboot中的java HttpSession   抽象语法树我想添加一个语句。我试图解析它,java解析器异常被抛出。如何克服它?   java Hibernate:清理会话   具有不连续子集的java划分问题   java正则表达式查找最后一个冒号后的字符串   java从SpringShell执行OS命令   Java扫描器字符串输入   java字符串索引越界异常(charAt)   java执行器服务终止被卡住   Springockito没有继承java@ContextConfiguration   java如何为一个servlet映射多个url   java安卓获取命令的stderr   java生成类型。表:数据库中的大数字   安卓 Getter Setter返回NothingJava