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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【mysql系列】细谈explain执行计划之“谜”

    【mysql系列】细谈explain执行计划之“谜”目录理论Part概念实践Partidselect_typetabletypepossible_keyskeykey_lenrefrowsfilteredExtra总结聊到mysql数据库的优化,大家基本都会谈论explain关键字,确认sql是否使用数据库表中建立的索引,然后讨论sql语句或者索引优化方案等等~,那本篇文章主要谈论一下explain的理解。主要分为理论和实践相结合。理论Part概念我们先了解一下explain语法和相关理论知识。语法:EXPLAINSELECTselect_o

    2025年6月16日
    0
  • 从单片机到ARM Linux驱动——Linux驱动入门篇

    从单片机到ARM Linux驱动——Linux驱动入门篇大一到大二这段时间里学习过单片机的相关知识,对单片机有一定的认识和了解。如果要深究其原理可能还差了一些火候。知道如何编写程序来点量一个LED灯,改一改官方提供的例程来实现一些功能做一些小东西,对IIC、SPI底层的通信协议有一定的了解,但是学着学着逐渐觉得单片机我也就只能改改代码了(当然有的代码也不一定能改出来)。对于我这种以后只想搬砖的码农来说已经差不多了(仅仅是个人观点),…

    2022年7月14日
    14
  • eve模拟器上虚拟服务器,没有真机怎么做实验?EVE模拟器了解一下

    eve模拟器上虚拟服务器,没有真机怎么做实验?EVE模拟器了解一下网络很重要的一个环节就是大量的实践操作,通过教程学习知识点,再用实践来验证这些知识学会了没有,如此反复。这样的问题也随之而来,初学网络连概念都刚刚建立,怎么才能接触到网络设备:交换机、路由器、防火墙等等?既然避免不了实验测试,离不开实验环境,这就给大家推荐一款最好用的模拟器——eve模拟器。EVE模拟器已经不仅可以模拟网络设备,也可以运行一切虚拟机。理论上,只要能将虚拟机的虚拟磁盘格式转换为qco…

    2022年6月11日
    47
  • Thinkphp内核无限坐席在线客服系统源码

    Thinkphp内核无限坐席在线客服系统源码简介:Thinkphp内核无限坐席在线客服系统源码,直接一键安装的,启动两个端口就行了,安装倒是简单网盘下载地址:http://pan.zijiepan2.xyz/zJsKwfQH7Gb0图片:

    2022年7月19日
    74
  • 10款流程图绘制工具

    10款流程图绘制工具介绍10款免费、强大的在线流程图工具,绝对满足你对流程图的所有幻想!1.draw.iodraw.io是一款可以作为首选、强推的一款流程工具,不仅支持在线版,还可以安装到Windows、Mac进行离线使用,尤其是与VSCode的结合,让它支持的平台进一步得到丰富。2.ProcessOnProcessOn[2]可以算得上是一款老牌、知名的在线流程图工具。它不仅支持流程图,还支持思维导图、原型图、网络拓扑图、组织结构图、UML等。目前免费版支持个人文件存储9个,团队协作.

    2022年10月24日
    0
  • Jlink或者stlink用于SWD接口下载程序[通俗易懂]

    Jlink或者stlink用于SWD接口下载程序[通俗易懂]最近要使用stm32f103c8t6最小系统板,直接ISP串口下载程序太麻烦,就想着使用swd接口来调试。结果:通过SWD接口下载程序成功,但调试失败,还不知原因,会的的人麻烦交流一下。SWD接口:3.3VDIO(数据)CLK(时钟)GND1.首先声明jlink和stlink都有jtag和swd调试功能。jlink接口如下:如图,我使用的就是VCC…

    2022年4月25日
    54

发表回复

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

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