亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> VHDL

使用 Tcl 的交互式测试平台

交互式测试台是一种模拟器设置,其中在测试台运行时由操作员提供对被测设备 (DUT) 的输入。大多数情况下,这意味着您在模拟器控制台中输入命令来为 DUT 提供激励。

虽然您应该始终创建一个自检测试平台,但交互式测试平台可能是一个很好的补充。使用手头的交互式测试台进行临时测试比更改自检测试台的代码更容易。

很多时候,您会在实验室中发现您想在测试平台中尝试的问题。使用交互式测试平台,只需键入已观察到的输入序列即可复制模拟器中的不良行为。

Tcl 与 VHDL 交互

大多数 VHDL 模拟器使用 Tcl 作为它们的控制台语言。模拟器有一堆特定于供应商的命令,但好消息是它们可以被视为任何其他 Tcl 命令。您可以使用 Tcl 创建复杂的、主要是可移植的脚本来管理和支持您的 VHDL 测试平台。

从 Tcl 更改 VHDL 信号

要与 VHDL 交互,我们需要找到更改信号值的命令。在 ModelSim 中,这是“强制”命令。如命令参考文档中所述,该命令的概要是:

force {<object_name> <value> [[@]<time_info>][, <value> [@]<time_info>]...
[-deposit | -drive | -freeze] [-cancel [@]<time_info>] [-repeat [@]<time_info>]

您要使用的开关是“-deposit”标志。这会立即更改 VHDL 信号的值,但允许另一个 VHDL 或 Tcl 驱动程序稍后将其更改为其他值。

通过忽略我们不使用的选项,简化的概要如下所示:

force -deposit <signal_name> <value>

VHDL 触发器

现在我们知道如何控制来自 Tcl 的 VHDL 信号,我们需要在我们的 VHDL 测试平台中创建某种接收器进程。下面的代码显示了这种测试平台的一个最小示例。

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity interactive is
end interactive; 

architecture sim of interactive is

  -- Controlled by Tcl
  signal trigger : std_logic := '0';

begin

  process is
  begin

    wait until trigger = '1';
    report "Triggered!";

  end process;

end architecture;

trigger 时进程将被唤醒 信号从某物变为 '1' .它将打印“触发!”发生这种情况时发送到控制台,允许我们测试从 Tcl 控制 VHDL 进程的概念。

我所做的就是 ModelSim 控制台。发出的命令以及输出可以在下面的脚本中查看。

VSIM 1> run 10 ns;
VSIM 2> force -deposit /trigger '1'
VSIM 3> run 0 ns;
# ** Note: Triggered!
#    Time: 10 ns  Iteration: 0  Instance: /interactive
VSIM 4> force -deposit /trigger '0'
VSIM 5> run 10 ns;

我在开始模拟后运行了 10 纳秒的测试台。

然后,我强制 trigger'1' 发出信号 .在下一行,我等待 0 纳秒。这样做的目的是创建一个增量循环。我希望触发该过程,但我不希望任何模拟时间过去。

最后,我强制 trigger 信号返回 '0' 在继续测试平台之前。

我们可以看到 VHDL 进程在“run 0 ns”行之后被唤醒,并打印出“Triggered!”。到控制台。

在tcl中读取VHDL信号值

要在 ModelSim 中读取信号值,您可以使用“检查”命令。例如,我们可以读取 trigger 的值 在 ModelSim 控制台中使用此命令发出信号:

VSIM 6> examine /trigger
# 0

在脚本中使用“examine”时,您可能希望将该值分配给 Tcl 变量。让我们在 ModelSim 控制台中尝试一下:

VSIM 7> set triggerVal [examine /trigger]
# 0

然后我们可以例如使用“puts”Tcl 命令打印出变量:

VSIM 8> puts "triggerVal: $triggerVal"
# triggerVal: 0

每次测试后停止模拟器

要让 DUT 做出反应,运行测试的最简单方法是简单地运行模拟器一个固定的时间值。例如,如果 DUT 应该在两个时钟周期后做出反应,并且时钟周期为 10 纳秒,我们将在 Tcl 脚本中使用命令“run 20 ns”。

如果 DUT 没有固定的反应时间,则可以使用 VHDL 断言来停止仿真并将控制权移交给 Tcl 回调函数。在 ModelSim 中,这意味着使用“when”命令从 Tcl 脚本中设置断点:

when [[-fast] [-id <id#>] [-label <label>] {<when_condition_expression>} {<command>}]

您还必须在 Tcl 中定义一个“onBreak”回调函数,该函数将在断点被命中时运行。 “onBreak”函数在 ModelSim 命令参考中指定。

Tcl 驱动测试的缺点

使用严重依赖 Tcl 脚本的测试平台有一些缺点。最明显的是速度和便携性问题。

Tcl 驱动的测试平台通过多次启动和停止模拟器来与 VHDL 代码交互来工作。启动和停止仿真以在其间运行 Tcl 函数比连续运行 VHDL 测试台更耗时。虽然 Tcl 是一种解释型语言,但 VHDL 是在模拟器中编译的,运行速度比 Tcl 快得多。

虽然 Tcl 可移植到其他模拟器,但您必须使用的模拟器特定命令不是。即使您在其他模拟器中找到等效命令,它们的工作方式也可能不同。模拟器供应商为他们支持的命令制定了自己的一套规则。因此,应该认为 Tcl 驱动的测试平台比纯 VHDL 测试平台的可移植性差。

新的 VHDL 和 FPGA 课程

* 我正在创建一个新的 VHDL 和 FPGA 课程,该课程将深入研究测试平台。您将学习如何从头开始创建 FPGA 设计。完成课程后,您将了解如何创建自检测试台,以及如何重用代码创建交互式测试台。

* 2020 年 10 月 12 日更新: 我已经完成了课程。点击下图了解更多。

我们将创建的产品是点阵 LED 控制器模块。我们将使用 49 美元的 Lattice iCEstick 开发板。最后,我们将在面包板上实现设计。您将可以在计算机上的键盘上打字,字符将显示在FPGA控制的点阵LED屏幕上。

在此处阅读有关点阵 VHDL 和 FPGA 课程的更多信息!

打开:

待定 .


VHDL

  1. 教程 - VHDL 简介
  2. VHDL 转换示例
  3. 过程语句 - VHDL 示例
  4. 记录 - VHDL 示例
  5. VHDL 中的有符号与无符号
  6. 变量 - VHDL 示例
  7. C# 使用
  8. 使用 PSL 在 VHDL 中进行形式化验证
  9. 如何在 VHDL 中创建字符串列表
  10. 如何创建自检测试平台
  11. 使用 Zigbee 传感器的交互式激光投影仪
  12. 将铣床用作车床