Blogs

VHDL教程 - 第2部分 - Testbench

BENE BRENIMAN.2007年10月30日3评论

快速链接

在A. 早些时候的文章 我走过了简单的设计的VHDL编码。在本文中,我将继续流程并创建测试台模块以测试早期的设计。 Xilinx ISE环境使得开始测试过程非常容易。要启动过程,请从“项目”下的菜单项中选择“新源”。这启动了“新源向导”。从向导内选择“VHDL测试台”并输入新模块的名称(单击“下一步”以继续)。然后,“新源向导”允许您选择要关联的源代码(在此情况下,从先前的文章中的CLKDIV),然后单击“下一步”。然后,向导将为测试台模块创建必要的样板(见下文)。

batherplate1.

本文以PDF格式提供,便于打印

batherplate2.

水板包括元件声明部分(线38-58)和测试的实例化(线62-70)。 Boilerplate还包括主测试过程的存根(TB:Process,第72-81行)。这是我们的工作将这个简单的存根转变为实际的测试序列,它将锻炼我们的设计。

测试台面设计的第一步是为主时钟(MCLK)创建一个连续的时钟信号。 VHDL提供了一种创建重复信号的简单方法。这是在以下代码片段中完成的。

时间段

钟声

第一个语句(第60行)定义了等于主时钟周期的一半的常数。剩余的线(74-48)创建一个切换主时钟(MCLK)的过程。 MCLK在前12.5ns后被驱动为低电平,并在接下来的12.5ns后驱动高。该过程等待总共25ns,然后重复。此步骤序列会产生40MHz的主时钟信号。

下一步是建立设备的初始条件并生成复位脉冲。以下陈述显示了此序列。

初始化

在上图中,线路80-81打开试验台处理(TB)。第一延迟(第84行,等待100 ns)允许在CPLD内的重置动作进行电源以完成。在该语句之后,我们建立了设备的初始条件(第86行,注意:SEQRESET驱动器低电平)。在100NS(第87行)之后,从复位(第89行)中移除设备并允许运行。默认时钟速率有效,可以通过暂停测试台过程并允许设备运行(第90行,等待1μs)来观察。

现在可能是看一些数据的好时机。模拟上面的陈述,我们可以检查数据是否开始看起来像我们期望的那样。

重新推荐

从时间为零的数据看数据,我们可以看到MCLK切换与SEQRESET保持低位。在第一个主要时序标记(200ns),我们可以看到SEQRESET被驱动高,ADC_CLK即将切换(500ns的半期,或预期的1MHz率)。到现在为止还挺好。

该过程中的下一步是写入时钟除数(Regsel ='01',inbyte =速率选择,Regstrb ='0'然后Regstrb ='1')。在必要的延迟之后(对于REGSTRB并允许时钟除数运行),我们可以对每个时钟速率重复序列。以下代码片段显示这些序列。

Clocksel.

对于每个目标时钟速率,我们需要重复设置时钟选择寄存器(inbyte)的基本序列和寄存器选择(regsel)值以及切换regstrb行(即行92-94)。我们还需要允许时间观察所选择的时钟速率(即第95行)。然后针对每个时钟速率重复这些陈述(记住以增加每个新时钟速率的“观察”等待时间)

现在我们可以看看完成的结果。

wh

在每个时钟选择点(Regstrb的切换),我们看到了outpur时钟速率(ADC_CLK)的变化。我测试了这段代码是一件好事。在这一测试台的生成过程中,我发现我在我之前的VHDL代码(剪切和粘贴了粘贴,但在第48行和第50行的数据没有变化)。在上一篇文章中,CLKDIV过程写为:

oldclkdiv

在测试中,我发现我需要纠正CLKDIV过程:

Newclkdiv.

它只去展示,如果你没有测试它,它可能不起作用。

在未来的文章中,我将展示一些更高级的VHDL编程技术。

再次,开心的设计!

基因


[]
评论 博博 2007年11月17日
谢谢,基因。我发现这篇文章非常有用,在了解测试台一代。 --bobd.
[]
评论 eddysteady.2011年6月8日
谢谢!非常有帮助!
[]
评论 杰里米 2007年11月15日
谢谢你的教程。我是一名学生开始与FPGA合作,当有人可以简单地解释它时,它真的有助于。 你对Xilinx Spartan-3E董事会的任何东西都不会知道你吗?

要发布回复评论,请单击连接到每个注释的“回复”按钮。发布新的评论(不是回复评论),请在评论的顶部查看“写评论”选项卡。

注册将允许您参加所有相关网站的论坛,并为您提供所有PDF下载。

注册

我同意 使用条款隐私政策.

尝试我们偶尔但流行的时事通讯。非常容易取消订阅。
或登录