Blogs

MyHDL综合:五秒钟内从浏览器到FPGA

马丁·斯特鲁贝尔2020年5月22日

对于馈送(主要是专有)综合工具,支持最广泛的HDL(硬件设计语言)可能是普通的Verilog,然后是VHDL。这样做的原因仅仅是基于受欢迎程度,或者基于VHDL解析起来要复杂一些的事实。

因此,所有超级HDL(例如Chisel,SpinalHDL等)都以一种或另一种方式转移到这些V * HDL中的一个,然后合成/映射/布局布线将其转变为硅的布线图。 MyHDL或它的流行竞争对手(n)migen也是如此。

现在是开源综合领域的后起之秀,主要是 优思 到目前为止,已经改变了游戏规则,因此生成可合成元素变得相当容易 你想要的方式 并将它们转换为固件文件,而不必经过冗长的,有时是有问题的转换过程。

Yosys(默认情况下)采用了Verilog,并且通过 ghdl-yosys-plugin。最重要的是,有一个Python API,可以即时创建设计元素。就好像是:

  • 创建门或图元(就像74xx芯片中的XOR元素一样,还记得吗?)
  • 接线
  • 将逻辑封装在用户定义的单元中,例如,将所有这些元素打包到具有定义明确的输入/输出引脚的虚拟74xx中

优思还可以做更多的事情:

  • 显示设计原理图(或其中的元素)
  • 写出综合,映射或其他优化设计的Verilog

验证

让我们回顾一下工作流程:使用描述语言(实际上是滥用HDL的编程语言)进行设计,然后创建并连接元素。该语言描述了事物在功能上如何工作,但是生成的元素的工作原理可能有所不同。为了确保它们在做同一件事,您需要将它们相互验证(通过共同仿真)。 MyHDL具有内置的这些机制,可以通过运行以下命令与yosys和辅助外部模拟器很好地交互 合成的 设计与原始描述平行。

批判性思想

有些人可能会在想:哦,不,不再,又是另一种(不完整/笨拙/无论如何)的HDL方法。

好吧,这很令人欣慰:MyHDL多年来已在各种大型项目中使用Verilog作为传输方式,从而在维护和测试方面节省了大量时间。因此,总有一些事情要回过头来:MyHDL的开发相当保守,以免破坏用户的大型项目。实际上,VHDL端的工具迁移导致了更多的痛苦,然后才将整个设计迁移到MyHDL。但是回到焦点。

13个理由...

好的,为什么要为所谓的RTL(寄存器传输语言)创建新的传输方法呢?

实际上,由于存在用于单元测试和与现实世界交互的现有模块的大量工具箱,因此某些设计的复杂性,尤其是DSP元素,可以通过Python进行最佳处理和测试。

例如,建模/开发某些DSP应用程序所面临的挑战,从功能原型(又称Matlab脚本)开始,到在许多场景和极端情况下经过测试的设计,在CI方面(连续集成)被证明是最可重用且性能最佳的(持续集成) ) 使用 Jupyter笔记本 环境(有人可能将其称为工程师的真正梦想)。

设计好功能良好/经过良好测试的元素后,您可能希望将其粘贴到库中,再也不要碰它。那就像一个黑匣子。过去,维护这些黑匣子并将它们用经典的HDL组成复杂的流水线一直很痛苦,以至于用各种语言(从C,C ++到Python或其他类概念)开发了大量不同的HLS概念。

换句话说,您可能想要编写如下内容:

@hls(style_sheet)
def dsp_elem(res, a, b):
    q = a * b
    result = q >> 1
    res.out = result    
并看到已验证的经过验证的黑匣子,因此您可以确定公式计算正确,并且数值误差与最初建模时完全相同。

由于其“隐藏的推论”,这还允许您通过使用不同的“ style_sheet”将上述抽象公式与其他数据类型重用,或为数字信号处理器生成代码。

Yosys允许您:

  • 通过Python API显式推断创建的黑盒元素
  • 通过任何HDL包装现有的Verilog黑盒模型

因此,一旦确保使用已验证的黑匣子的核心数据类型具有正确的行为,就可以跳过复杂的建模过程或更高级别的仿真过程。

底线:
  • 您可以创建自己的高级综合结构,而无需发明新的语言,也可以使用现有的,久经考验的Python机制。
  • 您可以从实际模型(可能是过程性的或面向软件的)中很好地分离出明确的描述(定义应如何推断硬件元素)。
  • 您不必通过尝试将抽象公式转换为显式表示来进行迭代过程,直到 那一种特定的综合工具 恰好推断出正确的权利(最重要的是,相同的迭代可以进一步移植)。您自己可以通过构建库来定义推理规则。
  • 通过使用经典的HDL进行传输或创建显式的设计元素/模拟构造,您始终具有后备方案。

我要玩

那么时髦的标题呢?

是的,有一个操场,叫 jupyosys 现在,这证明了上面的一些内容。如果您使用的是ECP5 Versa主板或类似产品,这要归功于Docker特色技术,而无需安装大量软件即可在短时间内获得“眨眼间”的旋转。如果没有硬件,您仍然可以修改Python代码并查看yosys从中创建的内容。但是请记住,这一切仍处于试验性的初期阶段,您可能不喜欢所看到的。欢迎提供反馈,错误报告和更多示例。

您将在此处找到所有代码和入口点:

//github.com/hackfin/myhdl/tree/jupyosys

单击活页夹徽标将在浏览器中启动虚拟机(请耐心等待)。

玩得开心!



要发布对评论的回复,请单击每个评论所附的“回复”按钮。要发布新评论(而不是回复评论),请查看评论顶部的“写评论”标签。

注册后,您可以参加所有相关网站上的论坛,并获得所有pdf下载的访问权限。

注册

我同意 使用条款隐私政策.

试试我们偶尔但很受欢迎的时事通讯。非常容易退订。
或登录