vhdl依赖分析器和模拟驱动程序。

vhdeps的Python项目详细描述


vhdeps:vhdl文件依赖性分析器和测试运行程序

pypibuild statuscodecovlinuxmacoslicense

无论你使用什么工具,测试vhdl代码一直是一件痛苦的事。与大多数 必须编写tcl脚本进行编译的工具,需要复制粘贴 测试用例所依赖的文件的所有路径…最终领导你 尽管需要额外的编译时间,但还是要包含所有内容。自动化的 测试ci需要更多的tcl脚本,或者由于 授权或主要面向gui的工具。更不用说做了 所有这些对于超过两三个集成测试,单元测试是该死的。 甚至不要开始讨论代码覆盖率。

vhdeps旨在改变这一点,至少是针对一个常见的问题子集。用 它,运行测试套件就像访问项目的根目录一样简单 目录并运行vhdeps ghdl,vhdeps vsim或任何其他目标 以后可能会增加。应该是这样!

安装

vhdeps是一个python包。要安装它,只需运行:

sudo pip3 install vhdeps

当然,如果您 最好,只要您确定将bin文件夹添加到系统路径, 或者使用python3-m vhdeps调用vhdeps。

到目前为止,我们只在linux和macos上测试了vhdeps,但不应该 在Windows上运行时也会遇到一些基本问题。

以这种方式安装vhdeps可以处理所有的python依赖项,但是 不安装兼容的 模拟器(如modelsim)为您准备。

要使用ghdl目标的代码覆盖特性,您必须获得 使用gcc后端的ghdl build, 并安装lcov。 如果您想要更华丽的输出格式。

完成后,请尝试vhlib 存储库以查看操作中的vhdeps。

目标

在vhdeps确定项目的编译顺序之后,它传递给 所谓你选择的目标。目前,以下目标是 可用。

转储

这个目标只是以一种应该很容易的格式转储编译顺序 用你自己设计的任何剧本来阅读。它不需要 任何非python工具。

$ vhdeps dump StreamBuffer -o order
Including the current working directory recursively by default...

$ cat order
dep work 2008 /path/to/vhlib/stream/StreamSlice.vhd
dep work 2008 /path/to/vhlib/util/UtilRam1R1W.vhd
dep work 2008 /path/to/vhlib/stream/StreamFIFOCounter.vhd
dep work 2008 /path/to/vhlib/util/UtilRam_pkg.vhd
dep work 2008 /path/to/vhlib/util/UtilInt_pkg.vhd
dep work 2008 /path/to/vhlib/stream/Stream_pkg.vhd
dep work 2008 /path/to/vhlib/stream/StreamFIFO.vhd
top work 2008 /path/to/vhlib/stream/StreamBuffer.vhd

ghdl

此目标使用ghdl运行在编译顺序中检测到的测试用例。为了 例子:

$ vhdeps ghdl StreamBuffer_*_tc
...
Summary:
 * PASSED  work.streambuffer_0_tc
 * PASSED  work.streambuffer_200_tc
 * PASSED  work.streambuffer_2_tc
 * PASSED  work.streambuffer_4_tc
 * PASSED  work.streambuffer_6_tc
Test suite PASSED

以下是此目标支持的一些功能:

  • 默认情况下在临时目录中运行,防止.cf或对象文件 不会到处出现。
  • 支持并行精化和执行(并行分析是 不受ghdl支持)。
  • 可以将所有测试用例的VCD文件输出到您选择的目录。
  • 可自动打开gtkwave以查看波形。
  • 如果ghdl是用gcc后端构建的, 它可以为您生成覆盖率信息,一直到用户友好 HTML输出。

vsim

此目标在modelsim或questasim中运行测试套件,可以在gui或 批处理模式,或者只输出一个合适的文件。这里有一个 这一切的样子示例:

$ vhdeps vsim StreamBuffer_*_tc
...
# Summary:
 * PASSED  work.streambuffer_0_tc
 * PASSED  work.streambuffer_200_tc
 * PASSED  work.streambuffer_2_tc
 * PASSED  work.streambuffer_4_tc
 * PASSED  work.streambuffer_6_tc
Test suite PASSED

$ vhdeps vsim StreamBuffer_0_tc --gui
...

(放大到波形后:)

modelsim截图

tcl脚本除其他外支持以下内容:

  • 通过重新运行在gui中增量重新编译和重新运行 命令。
  • 重新运行保持波形视图配置(缩放级别、信号, 等)
  • 默认情况下,顶层测试用例实体中的所有信号及其 立即实例化被添加到波形视图中,并且 设计已记录。输入为蓝色,输出为黄色, 内部信号为白色以提高可读性。这种行为 可以用pragma vhdeps vsim wave config tcl<;do file>;--如果需要,测试用例文件中的pragma vhdeps vsim no log all
  • 当有多个测试用例时,脚本将执行所有这些测试用例 最初不显示任何波形。然后可以运行调试 在启用波形的情况下运行(其中一个)失败的测试用例 调试它。
  • 自动图形用户界面与批处理模式检测。在批处理模式下,modelsim 根据测试套件的结果,以0或1自动退出。

到目前为止,该脚本只在modelsim和questasim中测试,需要一些 相当神奇的构造使信号着色并恢复波形 视图工作正常。您的里程数可能与其他VSIM兼容工具不同 例如里维埃拉。

(你的目标在这里?)

在vhdeps中添加新目标很容易。只需寻找它的安装 目录(或克隆此存储库并使用setup.py安装)并添加 指向vhdeps/target目录的文件。vhdeps自动检测 可用目标,因此无需将目标添加到任何索引。

然而,api文档仍然有些缺乏。再说一遍,它不应该 也很难从docstring和现有目标中找出答案。

vhdl代码要求

vhdeps在其vhdl解析中目前相当简单——它只是使用 匹配实体、组件和包声明的正则表达式,使用, 定义和工作都是从这里开始的——但它应该足够用于大多数用途 病例。列出了一些已知的限制/问题/6" rel="nofollow">此处

默认情况下,vhdeps通过查找 以tc结尾。这有意与行业标准不同, 因为测试台很少用来检查自身和自我终止 实际上,这只会导致超时。你当然可以调整这个 使用命令行选项的行为。目前,vhdeps不支持定义 一个文件中有多个测试用例实体,但是它应该能够处理 这对设计文件很好。

我们所说的自终止,是指它要么通过耗尽事件来终止 表示成功(通常,这意味着停止时钟),或通过 严重性故障报告或断言语句以指示故障。如果A 测试用例没有在指定的超时内终止,测试用例也 被认为是失败的。此超时在测试用例文件中指定 使用pragma,如下所示:

-- pragma simulation timeout 10 ms

如果未指定超时,则该超时将任意默认为1毫秒。

vhdeps可以在一次运行中处理来自不同vhdl版本的输入(如 只要目标也支持这一点)并且能够区分 仅模拟、仅合成和通用源文件。它是基于 在vhdl文件名中指定的标记上:

对于单个设计单元,您甚至可以同时拥有vhdl-93和vhdl-2008文件; vhdeps将根据所需的vhdl自动消除歧义 在命令行中指定的版本。

其他功能

黑箱检测

大多数工具,令人恼火的是,在默认情况下,完全可以使用黑框(黑色 框是组件实例化,不解析为任何以前的 编译实体,以防您不知道)。vhdeps不是:默认情况下,它将 如果您的设计有黑匣子,则拒绝为您输出编译顺序。你 可以通过包含包含黑框的文件来覆盖此行为 带有-x标志而不是-i的组件定义,这可能很有用 用于获取使用供应商原语的项目的编译顺序。

样式检查

除了上述规则之外,vhdeps还可以为 如果您喜欢,可以"严格"包含vhdl文件(-i而不是-i)。 这些规则是:

贡献

欢迎拉取请求。打开PR之前,请检查所有测试是否成功 (或者由于缺少依赖关系而被跳过,如果它们与 而且那个皮林特很高兴:

$ ./setup.py test
...
OK (SKIP=...)

$ ./setup.py lint
...
Your code has been rated at 10.00/10

您可以按以下方式脱机检查代码覆盖率:

$ coverage html
$ xdg-open htmlcov/index.html

一旦你打开你的公关,azure也会帮你检查。

我们努力使用github flowgithub flow

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

推荐PyPI第三方库


热门话题
JavaPax考试:从非标准Maven存储库解析Karaf特性存储库(XML文件)   java Spring启动Bean创建异常   java中将ArrayList转换为数组的方法   Android Studio的java Unity插件。   java在CheckStyle中从方法计数中排除getter和setter   HibernateJava。sql。SQLSyntaxErrorException:表/视图“序列”不存在   与命令行程序Java vs C通信   java WebView膨胀异常   java在O(n)java8流中寻找两个列表的交集   java使用Gradle运行单元测试时,最大堆大小在哪里设置?   ssl加载java应用程序(CXF)内的jks文件   CI:Jenkins Git:Simple Java项目:希望在特定时间在脚本上发送消息   java根据位置更改数字   java按数值排序字符串数组   macos java版本“1.6.0_65”是否与java 6模棱两可?   Cassandra中的java时间戳