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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Django之模板继承

    为了在Django模板配置中减少代码的冗余,需使用模板继承1.语法2.步骤(1)创建一个base.html把需要显示的页面内容写在里面(2)在title部分写个盒子,以后谁来扩展就在这里面

    2021年12月29日
  • Zynq 7020 学习心得【1】

    Zynq 7020 学习心得【1】今天对照Miz702的板子,学习了EMIO的用法,遇到了一点问题,经过分析和尝试,解决了,写出来,给大家参考一下。第一个问题,约束文件报warning,并且生成bitstream出错。开发板教程中

  • Jmeter安装及配置教程

    Jmeter安装及配置教程Jmeter安装及配置教程一、JMeter的安装配置过程二、JMeter的运行和语言设置一、JMeter的安装配置过程安装配置过程:第一步安装JDK,配置JDK路径到Oracle官方网站下载最新版本的jdk:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html这里使用的操作系统是Windows,选最后一个下载,下载完直接运行安装。安装完设置一下环境参数。JAVA_HOME:D:\

  • 如何用python显示一个弹窗_appium golang

    如何用python显示一个弹窗_appium golang以微信登录界面的toast弹窗为例:我的appium版本是1.17.1,服务器运行时日志有这样的打印信息所以我的desired_caps如下(如果是之前的版本,需要安装uiautomator2,并且在初始化时指定automationName为uiautomator2):desired_caps_a={‘platformName’:”Android”,’platFormVersion’:”10″,’d.

  • 功能测试数据测试之因果图分析方法[通俗易懂]

    功能测试数据测试之因果图分析方法[通俗易懂]定义是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况。因果图法产生的背景等价类划分法和边界值分析方法都是着重考虑输入条件,但没有考虑输入条件的各种组合、输入条件之间的相互制约关系。这样虽然各种输入条件可能出错的情况已经测试到了,但多个输入条件组合起来可能出错的情况却被忽视了。如果在测试时必须考虑输入条件的各种组合,则可能的组合数目将是天文数字,因此必须考虑采用一种适合于描述多种条件的组合、相应产生多个动作的形式来进行测试用例的设计,这就需要利用

  • 谁说而立之年,是程序员职业生涯的终点

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 原文始发于微信公众号(全栈程序员社区):谁说而立之年,是程序员职业生涯的终点

发表回复

您的电子邮箱地址不会被公开。

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