VHDL的TestBench仿真

本人是刚接触FPGA的小白,这也是我第一次写文章。如果文中有错误和不恰当的地方,还望大家提出建议和指导。以下就是我对testbench的理解和总结。
对于testbench文件,我是这样理解的:testbench文件实际上也是一个vhdl文件(后缀为.vhd)。我们将设计好的电路模块封装为一个元件,然后在testbench文件例化它,再通过映射的端口产生激励信号。这些激励信号模拟成待测试的电路模块所需要的信号,以此验证我们设计的电路是否符合要求。
testbench的基本格式如下:

library ieee;  --也可以加入其它的库;
use ieee.std_logic_1164.all; 
entity testbench    --testbench是测试文件的名字;
end testbench;
architecture  arch_test of testbench is
	signal clk : std_logic := '0';
	signal rst : std_logic := '1';
	......;
	signal qout : std_logic_vector(3 downto 0);
	......;
	constant clk_period : time := 20 ns;
	......;

	component  sample_name  --待测试电路模块的名字;
		port(
		clk : in std_logic;
		rst : in std_logic;
		......;
		qout : out std_logic_vector( 3 downto 0);
		......);
	end component sample_name;
begin
	UUT : sample_name
		port map(clk,rst,...,qout,...);
	clk <= not clk after clk_period/2;  --生成占空比为50%的时钟;
	process        --产生激励源的模块;
	begin
	end process;
end arch_test;

(1) testbench文件中对实体的描述:
在testbench文件的实体中,可以省略有关端口的描述。testbench文件名常以待测试的电路模块名加上“tb”命名,例如计数器(文件名为counter)的testbench名可以写为“counter_tb”。
(2) 待测试电路模块的例化:
对于待测试电路模块的例化和VHDL语法中例化的格式是一样的。但是testbench中,最好将映射的端口以信号量(signal)的形式定义,方便我们产生激励信号。另外,我们可以定义一个时间常量(如上面代码中的clk_period)来进行时钟和激励信号的生成。
(3) 用VHDL产生激励信号:
产生占空比为50%的时钟信号:
clk <= not clk after clk_period/2; --以这种形式产生时钟信号,需要在定义clk的时候用“:=”赋初值。
产生占空比为n/(n+m)的时钟信号:
process
begin
clk <= ‘1’;
wait for clk_period/n;
clk <= ‘0’;
wait for clk_period/m;
end process;
产生激励信号:
激励信号可以在一个进程中,用“wait”关键字生成。在testbench中,可综合和不可综合的关键字(语法)都可以使用。没有什么限制,只要产生我们需要的激励信号即可。这里没有什么固定的格式要求。
下面是一个测试文件的简单示例:
模为10的计数器:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity cnt_10 is
  port(
  clk : in std_logic;
  reset : in std_logic;
  dout : out std_logic_vector(3 downto 0));
end cnt_10;
architecture mybehave of cnt_10 is
  signal temp : std_logic_vector(3 downto 0);
begin
  process(clk)
  begin
    if reset = '1' then
      temp <= (others =>'0');
    elsif clk'event and clk='1' then
      if temp ="1001" then
        temp <= (others =>'0');
      else
        temp <= temp +1;
      end if;
    end if;
  end process; 
  dout <= temp;
end architecture mybehave;

计数器的testbench文件:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity cnt_10_tb is
end cnt_10_tb;
architecture mybehave of cnt_10_tb is
  signal clk,reset : std_logic := '0';
  signal dout : std_logic_vector(3 downto 0):= "0000";
  constant clk_period : time := 20 ns;
  component CNT_10
    port(
      clk: in std_logic;
      reset : in std_logic;
      dout : out std_logic_vector(3 downto 0));
   end component CNT_10; 
begin
  UUT:CNT_10
    port map(clk,reset,dout);
    clk <= not clk after clk_period/2;
    process
    begin
        wait for clk_period;
          reset <= '1';
        wait for clk_period;
          reset <= '0';
        wait;
    end process; 
end architecture mybehave;
  • 9
    点赞
  • 103
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
VHDLtestbench是用来对设计进行仿真测试的,通常包括以下几个部分: 1. Entity声明:与设计部分的entity声明相同,但是输入输出端口可以是信号而不是端口。 2. Architecture声明:与设计部分的architecture声明相同,但是包括一个process块来模拟输入信号,并将仿真结果输出到控制台。 3. 时钟和复位信号:模拟输入信号的过程应该包括一个时钟信号和一个复位信号。 4. 仿真输入:通过process块来模拟输入信号。 5. 仿真输出:在仿真结束后,在控制台上打印输出结果。 下面是一个简单的VHDL testbench示例: ```vhdl entity my_design_tb is end my_design_tb; architecture sim of my_design_tb is signal clk : std_logic := '0'; signal rst : std_logic := '0'; signal input_sig : std_logic_vector(7 downto 0) := (others => '0'); signal output_sig : std_logic_vector(7 downto 0); begin -- Generate clock signal clk <= not clk after 5 ns; -- Generate reset signal process begin rst <= '1'; wait for 10 ns; rst <= '0'; wait; end process; -- Instantiate the design under test my_design_inst : entity work.my_design port map ( clk => clk, rst => rst, input => input_sig, output => output_sig ); -- Stimulate the inputs and monitor the outputs process begin -- Stimulate the inputs input_sig <= "00000000"; wait for 20 ns; input_sig <= "00000001"; wait for 20 ns; input_sig <= "00000010"; wait for 20 ns; input_sig <= "00000011"; wait for 20 ns; input_sig <= "00000100"; wait for 20 ns; input_sig <= "00000101"; wait for 20 ns; input_sig <= "00000110"; wait for 20 ns; input_sig <= "00000111"; wait for 20 ns; -- Monitor the outputs report "Output value: " & to_string(output_sig); wait; end process; end sim; ``` 这个testbench包括了一个时钟信号、一个复位信号和一个8位的输入信号,用来对一个名为“my_design”的设计进行仿真测试。在仿真过程中,输入信号会在一定的时间间隔内改变,并且仿真结果会输出到控制台。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值