教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 幼儿教育 >

实例解读Testbench编写方法

来源:网络收集 时间:2026-10-02
导读: 实例解读Testbench编写方法 前言: 在进行quartusII设计时,不少人刚开始觉得仿真极其不方便,还需要编写 测试文件,浪费时间精力。 不过小编想告诉大家,其实testbench编写很容易学, 不外乎wait for 语句的堆叠就可以了,至于高深的用法,对一般程序都涉及

实例解读Testbench编写方法

前言: 在进行quartusII设计时,不少人刚开始觉得仿真极其不方便,还需要编写

测试文件,浪费时间精力。

不过小编想告诉大家,其实testbench编写很容易学,

不外乎wait for 语句的堆叠就可以了,至于高深的用法,对一般程序都涉及不

到,没必要弄得那么复杂。

下面看看实例吧,将详细说明testbench的编写:

我们可以通过Quartus自动生成一个Testbench的模板,选择Processing

-> Start -> Start Test Bench Template Writer,等待完成后打开刚才生成的

Testbench,默认是保存在simulation\modelsim文件夹下的.vt格式文件。

打开vt文件后可以看到Quartus已经为我们完成了一些基本工作,包括端口部分的代

码和接口变量的声明,我们要做的就是在这个做好的模具里添加我们需要的测试代码。

一个最基本的Testbench包含三个部分,信号定义、模块接口和功能代码。

‘timescale 1ns/ 1ps表示仿真的单位时间为1ns,精度为1ps。想要进行仿真首先

要规定时间单位,而且最好在Testbench里面统一规定时间单位,而不要在工程代码里定

义,因为不同的模块如果时间单位不同可能会为仿真带来一些问题,而timescale本身对综

合也就是实际电路没有影响。

其实Testbench本身可以看做一个模块或者设备(本例中的模块名为add_vlg_tst),

和你自己编写的模块进行通信。通过Testbench模块向待测模块输出信号作为激励,同时

接收从待测模块输出的信号来查看结果。因此,在待测模块中的reg型信号在Testbench

中就变成了wire,待测模块中的wire型信号在Testbench中则对应为reg型。那么inou

t怎么办呢,inout型信号也要设成wire,同时要用一个reg型信号作为输出寄存器,同时

设置一个三态门,由一个使能信号控制,如:assign inout_sig = out_en ? out_reg : 1’

bz;

处理完接口和声明之后,

需要自己设置一些激励信号,激励信号的内容就是肯能会输入

到待测模块中的波形。下面我们就来写一个简单的测试程序。

实例:60进制计数器

源代码:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

entity cnt60 is

port(

clk,reset:in std_logic;

p:out std_logic_vector(3 downto 0);

q:out std_logic_vector(3 downto 0)

);

end cnt60;

architecture arch of cnt60 is

signal cp:std_logic;

signal m:std_logic_vector(3 downto 0);

signal n:std_logic_vector(3 downto 0);

begin

p_1:process(reset,clk)

begin

if (reset='1') then

m<="0000";

else

if (clk'event and clk='1') then

if (m="1001") then

m<="0000";

else

m<=m+"0001";

end if;

end if;

end if;

end process p_1;

cp<=m(3) and m(0);

p_2:process(clk,reset)

begin

if (reset='1') then

n<="0000";

else

if(clk'event and clk='1') then

if (cp='1') then

if (n="0101") then

n<="0000";

else

n<=n+"0001";

end if;

end if;

end if;

end if;

end process p_2;

p<=m(3)&m(2)&m(1)&m(0);

q<=n(3)&n(2)&n(1)&n(0);

end arch;

Testbench编写:

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY cnt60_vhd_tst IS

END cnt60_vhd_tst;

ARCHITECTURE cnt60_arch OF cnt60_vhd_tst IS

-- constants

-- signals

SIGNAL clk : STD_LOGIC;

SIGNAL p : STD_LOGIC_VECTOR(3 DOWNTO 0);

SIGNAL q : STD_LOGIC_VECTOR(3 DOWNTO 0);

SIGNAL reset : STD_LOGIC;

COMPONENT cnt60

PORT (

clk : IN STD_LOGIC;

p : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

reset : IN STD_LOGIC

);

END COMPONENT;

BEGIN

i1 : cnt60

PORT MAP (

-- list connections between master ports and signals

clk => clk,

p => p,

q => q,

reset => reset

);

p_reset : PROCESS BEGIN

reset<='0';

wait for 10 ns; reset<='1';

wait for 10 ns; reset<='0';

WAIT;

END PROCESS p_reset;

p_clk : PROCESS BEGIN

wait for 1 ns; clk<='1';

wait for 1 ns; clk<='0';

END PROCESS p_clk;

END cnt60_arch;

根据生成的模板,只需改动红色字体部分。该部分提供激励信号,激励表现为输入端口的配

置,只需要在进程中配置in端口的激励部分,比如常用的clk,rst,en等,这些在进程中用

wait for 语句就可以描述出来,对应的激励波形。

Modelsim仿真图:

…… 此处隐藏:853字,全部文档内容请下载后查看。喜欢就下载吧 ……
实例解读Testbench编写方法.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/1527030.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150份
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150份
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)