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)
上一篇 2025年12月3日 上午9:22
下一篇 2025年12月3日 上午10:01


相关推荐

  • vue 富文本插件_前端富文本编辑器插件

    vue 富文本插件_前端富文本编辑器插件1.引用quill&lt;scriptsrc="/lib/quill/quill.min.js"&gt;&lt;/script&gt;&lt;linkhref="/lib/quill/quill.snow.css"rel="stylesheet"/&gt;2.RichEditorDemo.vue&lt;template&gt;&lt;divcl

    2022年10月14日
    4
  • svn如何删除当前账号,重新登录

    svn如何删除当前账号,重新登录

    2021年7月17日
    107
  • loadrunner server压力测试 sql_LoadRunner压力测试实例.pdf[通俗易懂]

    loadrunner server压力测试 sql_LoadRunner压力测试实例.pdf[通俗易懂]论坛测试资源交流区专用LoadRunner压力测试实例摘要:本文通过实例讲解介绍了LoadRunner工具的使用,介于公司的实际情况,文中主要是对工具的基本使用做了详细描述,高级运用方面除性能计数器与参数设置外其它均未涉及,待以后补充。目的是使公司人员根据该手册便可以独立运用Loadrunner进行压力测试主题词:Loadrunner工具压力测试1LoadRunne…

    2022年7月18日
    20
  • perl 正则表达式 匹配字符串 或逻辑

    perl 正则表达式 匹配字符串 或逻辑mark,备忘#!/usr/local/bin/perlusestrict;usewarnings;my@data=qw(nihaowohao);foreach(@data){if($_=~/^(ni|wo)hao$/){print$_}}

    2022年5月18日
    49
  • 计算机病毒防治——计算机病毒种类

    计算机病毒防治——计算机病毒种类在介绍病毒种类之前,先来介绍一些常识1、计算机病毒防治要确定安全的度,针对不同的指标设立不同的安全手段,通过以下三个方面来确定度: <1>安全威胁 <2>被保护物品的价值 <3>安全措施所要达到的目标 当攻破防御的成本大于得到数据的收益时,则系统相对来说攻击的人员较少,这时称这个系统是安全的。2、病毒是指是指编制或者在计算机程序中插入的破坏计算机功能或者毁坏数据,影响计算机使用,并且能够自我复制的一组计算机指令或者程序代码。它的根本特点是能够进行自我复制

    2022年6月4日
    54
  • c++面试选择题_北京易联达C语言面试咋样

    c++面试选择题_北京易联达C语言面试咋样1.new、delete、malloc、free关系delete会调用对象的析构函数,和new对应free只会释放内存,new调用构造函数。malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要…

    2022年10月21日
    5

发表回复

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

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