⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 53_counter_testbench.vhd

📁 北京里工大学ASIC设计研究所的100个 VHDL程序设计例子
💻 VHD
字号:
library IEEE;
use IEEE.std_logic_1164.all;
entity testcnt is
end testcnt;

use work.mycntpkg.all;
architecture mytest of testcnt is 
	signal clk,rst:std_logic;
	signal cnt:std_logic_vector(2 downto 0);

for all :count use entity work.count(archcount); 

begin 
--instantiate unit under test
uut:count port map(clk =>clk,rst =>rst,cnt =>cnt);
--apply test vectors and check results
verify:process
	variable errors:boolean := false;
	begin 
--#1#@@@@@@@@@@@@@@@0 reset the counter
		--schedule vector i 
		clk <= '0';
		rst <= '1';

		--wait for circuit to settle
		wait for 20 ns;

		-- check output vectors
		if cnt /= "000" then 

		assert false 

		report "cnt is wrong value";
		errors := true;
		end if;

--2 @@@@@@@@@@@@@@@@@@@@@@@@@@@
		--schedule vector i 
		clk <= '1';
		rst <= '1';

		--wait for circuit to settle
		wait for 20 ns;

		-- check output vectors
		if cnt /= "000" then 

		assert false 

		report "cnt is wrong value";
		errors := true;
		end if;

--3 @@@@@@@@@@@@@@@@@@@@@@@@@@@@
		--schedule vector i 
		clk <= '0';
		rst <= '0';

		--wait for circuit to settle
		wait for 20 ns;

		-- check output vectors
		if cnt /= "000" then 

		assert false 

		report "cnt is wrong value";
		errors := true;
		end if;
-- 4# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
		clk <= '1';
		rst <= '0';

		--wait for circuit to settle
		wait for 20 ns;

		-- check output vectors
		if cnt /= "001" then 

		assert false 

		report "cnt is wrong value";
		errors := true;
		end if;

--5# @@@@@@@@@@@@@@@@@@@@@@@@
		clk <= '0';
		rst <= '0';
		wait for 20 ns;

		if cnt /= "001" then 
		assert false 
		report "cnt is wrong value";
		errors := true;
		end if;
--6# @@@@@@@@@@@@@@@@@@@@@@@@
		clk <= '1';
		rst <= '0';
		wait for 20 ns;

		if cnt /= "010" then 
		assert false 
		report "cnt is wrong value";
		errors := true;
		end if;

--7# @@@@@@@@@@@@@@@@@@@@@@@@
		clk <= '0';
		rst <= '0';
		wait for 20 ns;

		if cnt /= "010" then 
		assert false 
		report "cnt is wrong value";
		errors := true;
		end if;


--8# @@@@@@@@@@@@@@@@@@@@@@@@
		clk <= '1';
		rst <= '0';
		wait for 20 ns;

		if cnt /= "011" then 
		assert false 
		report "cnt is wrong value";
		errors := true;
		end if;

--9# @@@@@@@@@@@@@@@@@@@@@@@@
		clk <= '0';
		rst <= '0';
		wait for 20 ns;

		if cnt /= "011" then 
		assert false 
		report "cnt is wrong value";
		errors := true;
		end if;

--10# @@@@@@@@@@@@@@@@@@@@@@@@
		clk <= '1';
		rst <= '0';
		wait for 20 ns;

		if cnt /= "100" then 
		assert false 
		report "cnt is wrong value";
		errors := true;
		end if;

--11# @@@@@@@@@@@@@@@@@@@@@@@@
		clk <= '0';
		rst <= '0';
		wait for 20 ns;

		if cnt /= "100" then 
		assert false 
		report "cnt is wrong value";
		errors := true;
		end if;

--12# @@@@@@@@@@@@@@@@@@@@@@@@
		clk <= '1';
		rst <= '0';
		wait for 20 ns;

		if cnt /= "101" then 
		assert false 
		report "cnt is wrong value";
		errors := true;
		end if;

--13# @@@@@@@@@@@@@@@@@@@@@@@@
		clk <= '0';
		rst <= '0';
		wait for 20 ns;

		if cnt /= "101" then 
		assert false 
		report "cnt is wrong value";
		errors := true;
		end if;

--14# @@@@@@@@@@@@@@@@@@@@@@@@
		clk <= '1';
		rst <= '0';
		wait for 20 ns;

		if cnt /= "110" then 
		assert false 
		report "cnt is wrong value";
		errors := true;
		end if;

--15# @@@@@@@@@@@@@@@@@@@@@@@@
		clk <= '0';
		rst <= '0';
		wait for 20 ns;

		if cnt /= "110" then 
		assert false 
		report "cnt is wrong value";
		errors := true;
		end if;

--16# @@@@@@@@@@@@@@@@@@@@@@@@
		clk <= '1';
		rst <= '0';
		wait for 20 ns;

		if cnt /= "111" then 
		assert false 
		report "cnt is wrong value";
		errors := true;
		end if;

--17# @@@@@@@@@@@@@@@@@@@@@@@@
		clk <= '0';
		rst <= '0';
		wait for 20 ns;

		if cnt /= "111" then 
		assert false 
		report "cnt is wrong value";
		errors := true;
		end if;

--18# @@@@@@@@@@@@@@@@@@@@@@@@
		clk <= '1';
		rst <= '0';
		wait for 20 ns;

		if cnt /= "000" then 
		assert false 
		report "cnt is wrong value";
		errors := true;
		end if;

--19# @@@@@@@@@@@@@@@@@@@@@@@@
		clk <= '0';
		rst <= '0';
		wait for 20 ns;

		if cnt /= "000" then 
		assert false 
		report "cnt is wrong value";
		errors := true;
		end if;

--20# @@@@@@@@@@@@@@@@@@@@@@@@
		clk <= '1';
		rst <= '0';
		wait for 20 ns;

		if cnt /= "001" then 
		assert false 
		report "cnt is wrong value";
		errors := true;
		end if;



		--assert reports on false
		assert not errors

			report "Test vectors failed."
			severity note;
			assert errors
			report "test vectors passed."
			severity note;
			wait;
			end process;
			end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -