vhdl依赖分析器和模拟驱动程序。
vhdeps的Python项目详细描述
vhdeps:vhdl文件依赖性分析器和测试运行程序
无论你使用什么工具,测试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
...
(放大到波形后:)
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文件名中指定的标记上:
- 与
*.<;version>;*
匹配的文件名,其中<;version>;
是两位VHDL 版本代码(93、08等)与指定的版本兼容。 可以为兼容的文件链接多个版本标记 多个版本。如果不存在版本标记,则假定文件为 兼容所有版本。 - 与
*.syn.*
匹配的文件名仅为合成文件。 - 与
*.sim.*
匹配的文件名仅为模拟文件。
对于单个设计单元,您甚至可以同时拥有vhdl-93和vhdl-2008文件;
vhdeps
将根据所需的vhdl自动消除歧义
在命令行中指定的版本。
其他功能
黑箱检测
大多数工具,令人恼火的是,在默认情况下,完全可以使用黑框(黑色
框是组件实例化,不解析为任何以前的
编译实体,以防您不知道)。vhdeps
不是:默认情况下,它将
如果您的设计有黑匣子,则拒绝为您输出编译顺序。你
可以通过包含包含黑框的文件来覆盖此行为
带有-x
标志而不是-i
的组件定义,这可能很有用
用于获取使用供应商原语的项目的编译顺序。
样式检查
除了上述规则之外,vhdeps
还可以为
如果您喜欢,可以"严格"包含vhdl文件(-i
而不是-i
)。
这些规则是:
- 每个vhdl文件必须恰好定义一个实体或一个包。
- vhdl包名称必须使用
\u pkg
后缀。 - 文件名必须与vhdl实体/包的名称匹配。
贡献
欢迎拉取请求。打开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