用于通过通用接口与仿真器、代码检查器或综合工具等EDA工具进行交互的库
项目描述
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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0ac5bac1955afb28d1c7191298a30e799268ce96c0c42e25d4d95b3eaa4e9862 |
|
MD5 | 518cb42fc3c35eccbd3c58a436f4bb25 |
|
BLAKE2b-256 | d167b7d92383dc424da8a18f7eec778f1dc5ec21578017260f1b2cdb55d1e770 |