vhdl testbench实例_支持veriloghdl的工具及获取方法

vhdl testbench实例_支持veriloghdl的工具及获取方法VHDL与VerilogHDL的Testbench模板一般而言,一个testbench需要包含的部分如下:(1)VHDL:entity和architecture的声明;Verilog:moduledeclaration(2)信号声明(3)实例化待测试文件(4)提供仿真激励其中第(4)步是关键所在,需要完成产生时钟信号,以及提供激励信号两个任务。VHDLTestbench中产生…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

VHDL与VerilogHDL的Testbench模板

一般而言,一个testbench需要包含的部分如下:
(1)VHDL:entity 和 architecture的声明;Verilog:module declaration
(2)信号声明
(3)实例化待测试文件
(4)提供仿真激励
其中第(4)步是关键所在,需要完成产生时钟信号,以及提供激励信号两个任务。

VHDL Testbench中产生时钟信号的两种方法

首先要在信号声明部分,定义一个constant如下:

constant clk_period:TIME:=10ns;
  1. 方法一
clk<= not clk after clk_period/2;
  1. 方法二
	process 
	begin 
	wait for clk_period/2;
	clk<='1';
	wait for clk_period/2;
	clk<='0';
	end process;

其次激励信号生成语法也利用wait for语句产生即可

	process
	begin 
	  rst_n<='0';
	  en<='0';
	  wait for(clk_period*30);
	  rst_n<='1';
	  wait for(clk_period*30);
	  en<='0';
	  wait;
	end process;

Testbench模板

首先写了一个简单二分频电路作为待测试文件如下:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;

entity two_Divider is 
port(
     clk    :  in std_logic;
	  rst_n  :  in std_logic;
	  clkout :  out std_logic
);
end entity two_Divider;

architecture behav of two_Divider is 
signal clkout_temp  :  std_logic:='0'; 


begin 
    process(clk,rst_n)
    begin 
	 if(rst_n='0')then 
		 clkout_temp<='0';
	 elsif(clk'event and clk='1')then 
	    clkout_temp<=not clkout_temp;
	 end if ;
	 clkout<=clkout_temp;
	 end process;
end behav;
    	 

这里为了验证之前两种产生时钟的方法,特生成了两个时钟,编写testbench如下:

library ieee;
use ieee.std_logic_1164.all;

entity two_Divider_tb is 
end entity;

architecture behav of two_Divider_tb is 
component two_Divider  
port(
     clk    :  in std_logic;
	  rst_n  :  in std_logic;
	  clkout :  out std_logic
);
end component;

signal clk       : std_logic:='0'; --初始化,否则仿真结果中可能出现高阻态
signal rst_n     : std_logic;
signal clkout    : std_logic;
signal clk1      : std_logic:='0';
constant clk_p1:TIME:=10ns;
constant clk_p2:TIME:=10ns;

begin 

   --实例化待测试文件
	instant:two_Divider port map(clk=>clk ,rst_n=>rst_n,clkout=>clkout); 
	
	--方法一产生时钟
	clk1<= not clk1 after clk_p2/2;
	
	--方法二产生时钟
	process 
	begin 
	wait for clk_p1/2;
	clk<='1';
	wait for clk_p1/2;
	clk<='0';
	end process;
	
	--提供激励信号
	process
	begin 
	  rst_n<='0';
	  wait for(clk_p1*30);
	  rst_n<='1';
	  wait;
	end process;
end behav;
	

仿真结果如下:

在这里插入图片描述
与理论分析一致

Verilog编写testbench与VHDL大同小异,附一个testbench如下:


`timescale 1ns/1pstestbench

module my_tb;
 
reg datain,clk,rst,clk1; //对DUT而言,输入定义为reg型
wire q;                  //对DUT而言,输出定义为wire型

parameter clock_period=10;
parameter clock_period1=20;

DUT u1(.datain(datain),.rst(rst),.clk(clk), .q(q));//调用待测试程序

initial   //产生时钟方法一
begin 
   clk1 = 1'b1;
	forever clk1=#(clock_period1/2) ~clk1;
end 
	
initial clk = 1'b1;   //产生时钟方法一
	always #(clock_period/2)clk=~clk;	

//初始化,激励信号产生
initial
begin

	
	datain   = 1'b0;
	rst = 1'b0;
	
	
	#(clock_period*10) rst = 1'b1;
	#(clock_period*10) datain = 1'b1;
	                         
end
 

endmodule
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/193046.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 奇怪的print progname “:\n”日志

    奇怪的print progname “:\n”日志

    2022年2月24日
  • echarts柱状图显示值_echarts tooltip

    echarts柱状图显示值_echarts tooltip犯罪嫌疑人Xhttp://echarts.baidu.com/opti…sunburst没有提供tooltip显示item的name属性,name在data中,所以可以在sunburst.data.emphasis设置vardata=[{name:’Grandpa’,emphasis:{itemStyle:{color:’r…

    2022年9月26日
  • rolling在舞蹈里是什么意思_机械舞和街舞有啥区别

    rolling在舞蹈里是什么意思_机械舞和街舞有啥区别原标题:这,就是街舞中的那些“Swag”十足的舞蹈类型,你了解吗?世界越来越小了,人们越靠越近,视野越来越广,局限于逼仄的小空间的时代已经一去不复返了。现在,一推门,迎面就是全世界。自去年开始,嘻哈文化开始通过综艺节目进入公众视野(中国有嘻哈),这种来自大洋彼岸的“陌生文化”随即引起了广泛的关注。尽管作为“第一个吃螃蟹的人”,《中国有嘻哈》的最终结果不尽如人意,但却为后来的综艺制作人提供了全新的视…

    2022年11月2日
  • eigen库的使用_sfml是什么库

    eigen库的使用_sfml是什么库Eigen是开源的C++线性代数库,常用在计算机图形学中。有份英文的Eigen使用手册,简要整理一下#include<Eigen/Core>创建新矩阵的时候如下Matrix3fA;Matrix4dB;这里的命名有一个便利性,比如A的类型是Matrix3f,就表示A是3x3float型矩阵,同理B是4x4double型矩阵。但并不是所有组合都work的,比如Matrix5s就会报错(虽然想的是5x5short);也不是必须是正方形的矩阵。那如果想用5x5shor

    2022年8月31日
  • mysql b+树优点_基础B

    mysql b+树优点_基础B写在前面大家在面试的时候,肯定都会被问到MySql的知识,以下是面试场景:面试官:对于MySQL,你对他索引原理了解吗?我:了解面试官:MySQL的索引是用什么数据机构的?我:B+树面试官:为什么要用B+树,而不是B树?我:…面试官:用B+树作为MySql的索引结构,用什么好处?我:…B树和B+树是MySQL索引使用的数据结构,对于索引优化和原理理解都非常重要,下面我的写文章就是要把B树,B+树的神秘面纱揭开,让大家在面试的时候碰到这个知识点一往无前,不再成为你的知识盲点!欢迎关注公

    2022年11月2日
  • android studio 皮肤,Android Studio 自定义皮肤主题和背景

    android studio 皮肤,Android Studio 自定义皮肤主题和背景AndroidStudio自定义皮肤主题-ColorThemes最近有人问我,“你代码这是用的什么字体?看着好舒服”,其实这是用了自定义皮肤主题包,主题包下载网站http://color-themes.com/?view=index这个皮肤主题不仅可以在AndroidStudio上使用,也可以在WebStorm,PyCharm,RubyMine,PhpStorm,AppCode等好多开发工…

    2022年10月29日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号