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

📄 uart_top_tb.vhd

📁 USB_I2C_MAC_FPGA_Code.rar
💻 VHD
字号:
-- 库声明
library ieee;
use work.uart_package.all;
use ieee.std_logic_1164.all;

-- 实体声明
entity uart_top_tb is
	-- 定义类属参数
	generic(
	DATA_BIT : INTEGER := 8;
	TOTAL_BIT : INTEGER := 10;
	PARITY_RULE : PARITY := none;
	FULL_PULSE_COUNT : BD_COUNT := BD9600_FPC;		-- 5208 if testing 9600 baudrate
	RISE_PULSE_COUNT : BD_COUNT := BD9600_HPC 		-- 2604 if testing 9600 baudrate
	);
end uart_top_tb;

-- 结构体
architecture TB_ARCHITECTURE of uart_top_tb is

-- UART顶层模块组件声明
component uart_top
	generic(
	DATA_BIT : INTEGER := 8;
	TOTAL_BIT : INTEGER := 10;
	PARITY_RULE : PARITY := none;
	FULL_PULSE_COUNT : BD_COUNT := BD9600_FPC;
	RISE_PULSE_COUNT : BD_COUNT := BD9600_HPC );
port(
	RxD : in std_logic;
	clk : in std_logic;
	reset_n : in std_logic;
	send : in std_logic;
	send_bus : in std_logic_vector(7 downto 0);
	TxD : out std_logic;
	error : out std_logic;
	recv : out std_logic;
	send_over : out std_logic;
	recv_bus : out std_logic_vector(7 downto 0) );
end component;

-- 内部信号
signal RxD : std_logic := '1';
signal clk : std_logic := '0';
signal reset_n : std_logic := '0';
signal send : std_logic := '0';
signal send_bus : std_logic_vector(7 downto 0) := (others => '0');
signal TxD : std_logic := '1';
signal error : std_logic := '0';
signal recv : std_logic := '0';
signal send_over : std_logic := '0';
signal recv_bus : std_logic_vector(7 downto 0) := (others => '0');

begin

	-- 测试对象实例化
	UUT : uart_top
		generic map (
			DATA_BIT => DATA_BIT,
			TOTAL_BIT => TOTAL_BIT,
			PARITY_RULE => PARITY_RULE,
			FULL_PULSE_COUNT => BD9600_FPC,
			RISE_PULSE_COUNT => BD9600_HPC
		)

		port map (
			RxD => RxD,
			clk => clk,
			reset_n => reset_n,
			send => send,
			send_bus => send_bus,
			TxD => TxD,
			error => error,
			recv => recv,
			send_over => send_over,
			recv_bus => recv_bus
		);

	-- 产生时钟信号
	clk_gen : process
	begin
		clk <= not clk;
		wait for 10 ns;
	end process;

	-- 测试主流程
	main: process
	begin
		-- 复位
		reset_n <= '0';
		wait for 100 ns;
		
		-- 结束复位
		reset_n <= '1';
		wait for 100 ns;
	
		-- 测试数据发送
		wait for 10 ns;
		-- 发送数据为01010101
		send_bus <= "01010101";
		-- send为高激活数据发送
		send <= '1';
		wait for 20 ns;
		send <= '0';
		
		-- 测试数据接收
		-- 使用测试用波特率
		if FULL_PULSE_COUNT = BDTEST_FPC then
			wait for 2500 ns;
			-- 仿真RS-232输入信号RxD
			for i in 0 to 9 loop
				RxD <= test_si_none(i);
				-- 测试波特率为10,所以输入间隔10个时钟,总共200ns
				wait for 200 ns;
			end loop;
		-- 使用实际波特率9600
		elsif FULL_PULSE_COUNT = BD9600_FPC then
			wait for 1.2 ms;
			-- 仿真RS-232输入信号RxD
			for i in 0 to 9 loop
				RxD <= test_si_none(i);
				-- 测试波特率为9600,所以输入间隔9600个时钟,总共104.17μs
				wait for 104.17 us;
			end loop;
		end if;
	
		wait ;
	end process;

end TB_ARCHITECTURE;

-- 配置
configuration TESTBENCH_FOR_uart_top of uart_top_tb is
	for TB_ARCHITECTURE
		for UUT : uart_top
			use entity work.uart_top(uart_top);
		end for;
	end for;
end TESTBENCH_FOR_uart_top;

⌨️ 快捷键说明

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