跳转到主要内容

用于通过通用接口与仿真器、代码检查器或综合工具等EDA工具进行交互的库

项目描述

Documentation Status Join the chat at https://gitter.im/librecores/edalize PyPI downloads CI status

Edalize

这是什么?

Edalize是一个用于与EDA工具交互的Python库。它可以创建支持工具的项目文件,并在批处理或GUI模式(如果支持)中运行它们。

获奖的Edalize介绍视频

所有EDA工具,如Icarus、Yosys、ModelSim、Vivado、Verilator、GHDL、Quartus等,都获取输入HDL文件(Verilog和VHDL)以及一些特定工具的文件(约束文件、内存初始化文件、IP描述文件等)。与文件一起,可能还会设置一些Verilog `defines、一些顶层参数/generics或一些特定工具的选项。一旦完成配置,就会构建模拟模型、网表或FPGA映像,在模拟的情况下,模型也会执行,可能还会设置一些额外的运行时参数。

问题是,所有这些工具都在完全不同的方式下做这件事,并且通常没有办法将一个模拟器的配置导入到另一个模拟器中。

不要担心!Edalize会为您处理这些。通过告诉Edalize您有哪些文件,以及一些信息,编译和运行时使用的参数化(例如plusargs、defines、generics、参数),VPI库源代码(当适用时)以及任何其他未提及的工具特定选项,它会创建必要的项目文件,并为您构建和运行它。

这样,您就可以免于自己处理与EDA工具接口的枯燥工作,同时仍然可以几乎完全按照您想要的方式设置项目。

这允许您快速切换工具,至少在模拟器方面是这样。这对于消除特定工具的缺陷非常有用,或者只是让您能够使用您选择的工具。

它还可以用来快速获取一个模板,您可以在工具的GUI中打开它(如果有),然后从这里继续工作。

它可以直接集成到您现有的Python HDL项目中作为库,或者可以独立使用(不久的将来),从用其他语言编写的项目中为Edalize提供数据。

安装它

Edalize是一个Python模块。源代码位于github.com/olofk/edalize。下载后,我们可以使用以下Python命令进行安装

$ cd edalize
$ python -m pip install -e .

由于数据分析依赖项的使用,报告模块已设置为可选。可以使用以下方式安装它们

$ python -m pip install -e ".[reporting]"

如何使用它?

好的,这听起来很棒。现在,我该如何开始?请查阅edalize.rtfd.io上的文档。

假设我们有一个项目,该项目由一个名为blinky.v的Verilog源文件组成。还有一个名为blinky_tb.v的测试平台,以及一个名为constraints.sdc的合成约束文件。您可以从blinky获取这些文件,以及来自orpsoc-cores中的vlog_tb_utils.v

对于模拟,我们想要使用这两个Verilog文件,在名为build的子目录中构建,然后使用一个参数运行它来控制模拟时钟频率。

Edalize是一个Python工具,因此我们可以在Python脚本文件或直接在Python控制台中运行它。

首先,我们必须导入Edalize对象

from edalize import *

此教程还需要os模块

import os

然后注册要使用的文件

work_root = 'build'

files = [
  {'name' : os.path.relpath('blinky.v', work_root),
   'file_type' : 'verilogSource'},
  {'name' : os.path.relpath('blinky_tb.v', work_root),
   'file_type' : 'verilogSource'},
  {'name' : os.path.relpath('vlog_tb_utils.v', work_root),
   'file_type' : 'verilogSource'}
]

设计有一个名为clk_freq_hz的顶层Verilog参数,它接受整数。我们将其默认值设置为1000。测试平台还有一个选项,通过设置名为vcd的plusarg来启用波形转储

parameters = {'clk_freq_hz' : {'datatype' : 'int', 'default' : 1000, 'paramtype' : 'vlogparam'},
              'vcd' : {'datatype' : 'bool', 'paramtype' : 'plusarg'}}

让Edalize知道我们打算使用Icarus Verilog进行模拟

tool = 'icarus'

然后将所有内容放入一个单一的数据结构中,并包含有关顶层和项目名称的一些信息

edam = {
  'files'        : files,
  'name'         : 'blinky_project',
  'parameters'   : parameters,
  'toplevel'     : 'blinky_tb'
}

现在,我们需要从Edalize获取一个后端对象

backend = get_edatool(tool)(edam=edam,
                            work_root=work_root)

创建目录和项目文件

os.makedirs(work_root)
backend.configure()

在此阶段,我们还没有运行实际的EDA工具,位于work_root目录中的文件可以在不使用Edalize的情况下使用。但让我们继续使用Edalize的示例。

构建模拟模型

backend.build()

最后运行它,使用我们的参数。一些类型的参数(例如plusargs)是在运行时定义的,在此阶段我们可以通过传递名称和新的值给run()来更改它们的值。或者我们可以完全跳过它,并使用配置阶段的默认值。让我们启用VCD日志记录来运行

args = {'vcd' : True}
backend.run(args)

塔达!我们已经模拟了。作为一个练习,尝试将工具变量更改为例如modelsim、xsim或Edalize支持的任何其他模拟器,看看是否需要任何更改即可工作。

现在该是创建FPGA镜像的时候了

正如您所看到的,Edalize是一个获奖的EDA工具接口工具,所以

使用Edalize,不要批评它! 使用Edalize,我将宣传它!

查看源代码以获取更多信息。

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪一个,了解更多关于安装包的信息。

源代码发行版

edalize-0.5.4.tar.gz (374.2 kB 查看哈希值)

上传时间 源代码

由支持