edalize是一个用于接口eda工具的库,主要用于fpga开发。

edalize的Python项目详细描述


这是什么?

所有eda工具,如icarus、yosys、modelsim、vivado、verilator、ghdl、quartus等,都会得到输入hdl文件(verilog和vhdl)和一些特定于工具的文件(约束文件、内存初始化文件、ip描述文件等)。除了这些文件,也许还有几个verilog的定义,还设置了一些顶级参数/泛型或一些特定于工具的选项。配置完成后,将构建一个仿真模型、netlist或fpga图像,在仿真的情况下,还将执行该模型,可能需要一些额外的运行时参数。

问题是,所有这些工具都在以完全不同的方式进行这项工作,而且通常无法将配置从一个模拟器导入到另一个模拟器。

不要害怕!Edalize帮你处理这个。通过告诉edalize您有哪些文件,以及一些信息,在编译和运行时要使用哪些参数化(例如plusargs、defines、generics、parameters)、vpi库源(如果适用)和任何其他尚未提及的特定于工具的选项,它将创建必要的项目文件,并提供为您构建和运行它。

这将使您不必亲自处理与eda工具交互的枯燥工作,同时仍然有足够的能力按照您想要的方式设置项目。

它允许您快速切换工具,至少在模拟器方面是这样。这对于摆脱特定于工具的bug非常有用,或者仅仅是为了让您使用您选择的武器。

它还可以用来获得一个快速模板,如果有,可以在工具的gui中打开,然后继续工作。

它可以直接集成到您现有的Python供电HDL项目的库中,或者可以单独使用(很快)从其他语言编写的项目中提供EDIALID。

如何使用?

好吧,听起来不错。现在,我该怎么开始呢?

假设我们有一个由verilog源文件blinky.v组成的项目,还有一个名为blinky_tb.v的测试平台和一个用于合成的约束文件constraints.sdc。您可以从这里获取这些文件https://github.com/fusesoc/blinky

对于模拟,我们希望使用两个verilog文件,将其构建在一个名为“build”的子目录中,然后使用一个参数运行它来控制模拟的时钟频率。

首先,我们注册要使用的文件:

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'}
]

然后我们得到一个名为clk_freq_hz的参数,它恰好是一个接受整数的verilog参数:

parameters = {'clk_freq_hz' : {'datatype' : 'int', 'paramtype' : 'vlogparam'}}

让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)

创建目录和项目文件:

args = ['--clk_freq_hz=1000']
os.makedirs(work_root)
backend.configure(args)

目前,我们还没有运行实际的eda工具,如果愿意的话,可以在不使用edalize的情况下使用work\u根目录中的文件。但让我们继续以edalize为例。

建立仿真模型:

backend.build()

最后用我们的论据运行它。此时,我们可以更改clk_freq_hz的值,而将使用新的值。或者我们可以完全跳过它,使用configure阶段的默认值。:

backend.run(args)

塔达!我们已经模拟过了。作为练习,尝试将tool变量更改为modelsim、xsim或edalize支持的任何其他模拟器,并查看它是否在没有任何更改的情况下工作。

现在是时候创建一个fpga图像了

如您所见,edalize是一个获奖的eda工具接口工具,因此

edalize,不要批评它!edalize,我会做广告的!

有关详细信息,请参见源代码。

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

推荐PyPI第三方库


热门话题
java PUT请求提供415不支持的媒体类型   JavaMockito:如何在不模拟所有参数的情况下轻松地存根一个方法   java如何将NameValuePair传递给安卓中的另一个活动?   servalet java中的tomcat错误   java Android手机无法连接到eclipse   nullpointerexception在Java中如何将null转换为false?   Java中的http代理身份验证   java如何确保最新版本的JAR与JNLP应用程序一起使用?   简单Java代码上的性能大内存占用   列出AWS EC2实例上运行的服务上的对象时,java 403访问被拒绝   java创建一个类,当创建一个新实例时,它会被添加到一个hasmap中   LookupService中的java getLocation方法返回null   java获取要在ListView中显示的ArrayList字符串编号/位置