我已经完成了一个制作物理逻辑门的项目,现在正在寻找一种方法将任意程序转换为一系列逻辑门,以便我可以使用它们。
我需要一个程序,它可以取任意函数(比如f= x^2 -1)直接到一些逻辑门系列中。这已经存在了吗?
我找到了Verilog和其他几个开源选项,但它们似乎没有输出电路图。也有Quartus II和其他程序将VHDL代码转换成示意图。
最好我想直接编译Python/c++到逻辑门原理图的东西-但实际上任何语言都很好。
谢谢。
编辑:我指的是物理门——他们使用滚珠轴承!
我有所有的1位输入/1位输出门和所有的2位输入/1位输出门。从这些我也可以构造一个MAJ门做纠错。
在VHDL中编写任意代码,将VHDL转换为门是合成工具所做的。
不是你写的所有东西都可以合成;文件处理不能被翻译成门,任何传统上使用堆的东西(如C中的malloc或指针,或"new")也不能。和VHDL中的访问类型)。浮点可以合成(与VHDL-2008),但它不像signal A : Real; A <= 2.0 * X * X - 1.0;
那么简单,你必须使用来自可合成浮点库的类型。因此,您可能需要与工具协商可以使用的编程语言子集。
但我感觉到这里有一个稍微不同的问题:我如何将任意代码转换为MY逻辑门,实现在(问题中未描述的技术)中。这个问题更难回答。
合成工具通常来自供应商,例如FPGA供应商,它们将任意代码转换为该供应商的逻辑门,而不是您的。
理想的解决方案是创建一个描述您的逻辑技术的库,将其插入到供应商中立的合成工具中,例如Synopsys的Synplicity。然后Synplicity可以合成到您的技术而不是FPGA供应商的。
OK,但是创建这个库可能是一个大致等同于为自定义CPU指令集编写后端并将该后端集成到gcc中的任务。但是Synplicity与gcc不同,它不是开源的,所以如果没有大量的财务和技术资源,以及来自主要EDA工具公司的帮助和内部文档,它几乎是不可能实现的。(在这一点上,我很高兴被真正做过的人纠正)
编辑(近7年后!)
Github提供的GHDL(开源VHDL模拟器)已经发展了一个合成分支,所以这条路线现在可能更容易(我不会说容易!)或者可能是比下面路线的专有工具集更好的选择。它与YOSYS开源合成套件有关联。警告:我还没有试过,但对于未来这个问题的观众来说,这可能值得一看。
(结束编辑)
所以我们需要一个不同的方法。
回到FPGA合成器工具:我将使用Xilinx XST作为示例。它将以某种Xilinx封闭的内部格式合成到Xilinx原语。
然而,也有一个标签为"写合成后netlist"的选项。
使用它,您可以获得一个结构化的VHDL文件,表示将任意代码翻译成Xilinx门、触发器和其他元素,这些元素从Simprims
库中绘制。
尝试编译(例如在模拟器中),而不使Simprims库可见(例如用library Simprims; use Simprims;
语句注释掉,你会得到一些有价值的东西:
编译错误列表
你可能会认为,它并没有那么有价值,除非它实际上是一个实现你的设计所需的门、触发器和其他元素的列表。
如果您能找到(或创建)这些元素之间的一对一对应关系,以及您所选择的技术中的元素,那么您可以将此网络列表映射到您的技术。
如果有Simprims元素,你没有对应的,你需要实现它们-例如,通过从你的2输入NAND门的网络创建3输入与门。
使用您自己的(VHDL)库中的相应元素,而不是Simprims,从理论上讲,您应该有一个可用的编译设计。
你得自己解决布局、路线、时间分析等问题。这不是微不足道的,但为了这个问题,我假设你的"项目制造物理门"。首先,逻辑综合是对逻辑电路进行基本的逻辑优化,或将结构逻辑电路转化为表示逻辑电路的数据结构。有关逻辑综合的参考资料,请参阅https://stackoverflow.com/a/60535990/1531728。
其次,要将计算机程序(例如Python, C, c++或其他语言)转换为逻辑电路,您需要执行高级合成(或行为合成),通过将计算机程序解析为控制和数据流图(CDFG,或一对控制流图和数据流图)来转换计算机程序,优化CDFG,然后将该CDFG转换为逻辑电路进行逻辑合成。一旦你有了逻辑电路,你仍然需要执行物理设计(例如,平面规划,放置和路由),将逻辑电路映射到一个条带(基于标准单元的数字集成电路设计)的布局或到现场可编程门阵列(FPGA)。
下面的参考文献提供了我所提到的主题的文献综述。
@book{Lavagno2016a,
Address = {Boca Raton, {FL}},
Author = {Luciano Lavagno and Igor L. Markov and Grant Martin and Louis K. Scheffer},
Doi = {https://dx.doi.org/10.1201/b19569},
Edition = {Second},
Publisher = {{CRC} Press},
Series = {Electronic Design Automation for Integrated Circuits Handbook},
Title = {Electronic Design Automation for {IC} System Design, Verification, and Testing},
Volume = {1},
Year = {2016}}
@book{Lavagno2016,
Address = {Boca Raton, {FL}},
Author = {Luciano Lavagno and Igor L. Markov and Grant Martin and Louis K. Scheffer},
Doi = {https://dx.doi.org/10.1201/b19714},
Edition = {Second},
Publisher = {{CRC} Press},
Series = {Electronic Design Automation for Integrated Circuits Handbook},
Title = {Electronic Design Automation for {IC} Implementation, Circuit Design, and Process Technology},
Volume = {2},
Year = {2016}}
请参阅https://github.com/lsils/lstools-showcase,查看瑞士洛桑EPFL (Ecole Polytechnique fsamdsamusanne)最先进的逻辑合成库。
您可以使用这些工具来执行逻辑合成。它们是程序,商业高级合成软件,将C或c++代码转换为Verilog(或其他一些硬件描述语言,HDL),并随后转换为逻辑电路。
您还可以考虑基于python的HDL(例如PyMTL, PyRTL或MyHDL),基于scala的HDL(例如Chisel HDL)或基于haskell的HDL(例如Clash)。这些hdl为您将计算机程序转换为逻辑电路的目标提供了一种解决方法。