实例解读Testbench编写方法
实例解读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字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [幼儿教育]【完整版】2019-2025年中国药物发现外
- [幼儿教育]2018-2019年初中信息技术广东初一竞赛
- [幼儿教育]最新外研版(一起)小学英语五年级上册《
- [幼儿教育]农业推广与创新管理专业 -中农大毕业论
- [幼儿教育]2017-2022年中国更年期用药行业市场深
- [幼儿教育]数学1.1.2第1课时棱柱、棱锥和棱台的结
- [幼儿教育]二年级群文阅读课例欣赏
- [幼儿教育]2010-2015年中国保险行业投资分析及深
- [幼儿教育]厄运打不垮的信念第一课时
- [幼儿教育]巧用文本,让表达在言语中绽放论文
- [幼儿教育]中学生百科知识竞赛题及答案
- [幼儿教育]八大菜系英文简介
- [幼儿教育]中国男装牛仔裤市场发展研究及投资前景
- [幼儿教育]远程数字视频监控系统在银行的应用
- [幼儿教育]光纤光缆制造工艺及设备
- [幼儿教育]国家安全法试题及答案
- [幼儿教育]2011高中提前招生及竞赛试题(物理卷1)
- [幼儿教育]宁夏第三产业房地产业、科学研究和技术
- [幼儿教育]中兴通讯 ME3000模块用户硬件设计手册_
- [幼儿教育]紫外线灯管的辐照强度问题
- 苏联东欧剧变的原因和历史教训浅析
- 人工智能导论实验报告(学生)
- 思科ITE章考试原题及答案
- 《学习雷锋好榜样》主题班会教案
- 加油站建设项目安全评价报告
- 剖析社保卡管理系统
- 2017-2018年影视剧新媒体版权运营行业
- 2017-2018学年四川省成都市高一上学期
- 2019最新高中数学 第三章 3.2.1 几类不
- 2011-2015年中国基酸市场调查及行业前
- 人教版新课标选修八Unit 1 课件Warming
- 郭溪燎原小学辅导学生记录表
- 教师资格证统考综合素质写作秘笈
- 国外校园绿色建筑研究方向与建设实践
- 15.1 动物运动的方式 课件(北师大版八
- 民用飞机空调系统
- 长安侠文化传统与唐诗的任侠主题
- 《中国近现代史纲要》名词解释
- 11金本《保险学概论》复习资料
- 民用建筑机电安装工程专业施工图图纸会




