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

基于Tcl的交互式测试平台增强硬件验证

交互式测试平台是指在测试平台运行时由操作员向被测器件(DUT)提供输入的仿真器设置。通常意味着在仿真器控制台输入命令为DUT提供激励。

虽然应始终创建自检测试平台,但交互式测试平台可以作为很好的补充。手头有交互式测试平台时,临时测试比修改自检测试平台代码更容易。

常在实验室发现问题后,想在测试平台中复现。有了交互式测试平台,只需在仿真器中输入观察到的输入序列,即可复现不良行为。

Tcl与VHDL交互

大多数VHDL仿真器使用Tcl作为控制台语言。仿真器有一堆厂商特定命令,好消息是它们可像其他Tcl命令一样对待。可用Tcl创建复杂、可移植的脚本管理和支持VHDL测试平台。

从Tcl修改VHDL信号

要与VHDL交互,需找到修改信号值的命令。ModelSim中是“force”命令。命令参考文档中其语法概要为:

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'时,进程唤醒。此时向控制台打印“Triggered!”,验证从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纳秒,目的是创建一个delta周期。希望进程被触发但不让仿真时间推进。

最后在继续测试平台前将trigger强制回'0'。

可见VHDL进程在“run 0 ns”行后唤醒,向控制台打印“Triggered!”。

在Tcl中读取VHDL信号值

ModelSim中可用“examine”命令读取信号值。例如在ModelSim控制台用此命令读取trigger信号:

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中指从Tcl脚本用“when”命令设置断点:

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

还需在Tcl中定义“onBreak”回调函数,断点命中时运行。“onBreak”函数在ModelSim命令参考中指定。

Tcl驱动测试的缺点

严重依赖Tcl脚本的测试平台有缺点。最明显是速度和可移植性问题。

Tcl驱动测试平台通过多次启停仿真器与VHDL代码交互。启停仿真运行中间的Tcl函数比连续运行VHDL测试平台更耗时。Tcl是解释型语言,VHDL在仿真器中编译运行快得多。

虽Tcl可移植到其他仿真器,但必须使用的仿真器特定命令不可移植。即使在另一仿真器找到等效命令,工作方式也可能不同。仿真器厂商自定命令规则。因此Tcl驱动测试平台应视为比纯VHDL测试平台可移植性差。

新VHDL和FPGA课程

* 我正在创建新的VHDL和FPGA课程,将深入讲解测试平台。你将学习从零创建FPGA设计。完成课程后,你将知道如何创建自检测试平台,并复用代码创建交互式测试平台。

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

我们将创建的产品是点阵LED控制器模块。使用49美元的Lattice iCEstick开发板。最终在面包板上实现设计。你能在电脑键盘输入,字符将显示在FPGA控制的点阵LED屏上。

基于Tcl的交互式测试平台增强硬件验证

点击了解点阵VHDL和FPGA课程详情!

开放时间:

待定。


VHDL

  1. Zigbee 传感器与 Gravio 边缘平台打造交互式激光投影
  2. 铣床改车床:金属工实操步骤
  3. 掌握 C# using 指令:命名空间导入、别名与静态导入全解析
  4. VHDL入门:构建你的第一个与门
  5. VHDL类型转换全攻略:Numeric_Std与Std_Logic_Arith包详解
  6. VHDL过程示例:标准逻辑向量自增
  7. 善用VHDL记录类型构建整洁可复用FIFO接口
  8. 掌握VHDL有符号与无符号类型:实战洞察
  9. VHDL变量详解:实用示例与可靠设计规则
  10. 精通PSL形式化验证VHDL模块:从理论到实战
  11. VHDL 字符串列表创建:最佳实践与示例
  12. 构建VHDL自检测试平台实战指南