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

📄 uart.vhd

📁 以cyclone系列的EP2C5Q208为核心的实验板程序.包括流水灯,I2C存储器.SPI存储器,数码管,串口,LCD等
💻 VHD
字号:
---------------------------------------------------------------------------------------------------
--*************************************************************************************************
--  CreateDate  :  2007-07-12 
--  ModifData   :  2007-08-18 
--  Description :  RS232 ( Asynchronous, Data bits: 8 ) 
--  Author      :  Explorer01 
--  Version     :  V1.1  
--*************************************************************************************************
---------------------------------------------------------------------------------------------------

-- VHDL library Declarations 
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.std_logic_unsigned.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;

---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
-- The Entity Declarations 
ENTITY UART IS
	PORT 
	(
		RESET: IN STD_LOGIC;
		CLK:   IN STD_LOGIC; 
		RXD:   IN STD_LOGIC; 
		
		EOC:   OUT STD_LOGIC;
		PDATA: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
		TXD:   OUT STD_LOGIC
	);
END UART;

---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
-- The Architecture of Entity Declarations 
ARCHITECTURE Behavioral OF UART IS
	SIGNAL spdata:  STD_LOGIC_VECTOR(10 DOWNTO 0);
	
	SIGNAL TT:      STD_LOGIC;
	SIGNAL cnt8:    integer range 0 to 10;
	
	SIGNAL Start : STD_LOGIC;
	SIGNAL Count : STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
	
	-------------------------------------------------
	-- BITS 
	PROCESS( RESET, CLK, RXD, Start, Count, cnt8, TT )
	BEGIN
		-----------------------------------------------
		-- 
		IF( RESET = '0' )THEN 
			Count <= "0000"; 
		ELSIF( Start='1' ) THEN 
			IF( CLK'EVENT AND CLK='1' ) THEN Count <= Count + 1; 
			END IF; 
		ELSE	Count <= "0000"; 
		END IF; 
		
		-----------------------------------------------
		TT <= Count(2);			-- Count(3) : 4800 
								-- Count(2) : 9600 
								-- Count(1) : 19200 
								-- Count(0) : 38400 
		
		-----------------------------------------------
		-- End of recevie 
		IF( cnt8>8 ) THEN 	EOC <= '1';
		ELSE				EOC <= '0';
		END IF; 
		
	END PROCESS; 
	
	-------------------------------------------------
	-- Start 
	StartRun: PROCESS( RESET, RXD, TT, cnt8, Start )
	BEGIN
		-----------------------------------------------
		-- 
		IF( RESET = '0' ) THEN Start <= '0';
		ELSIF( cnt8=0 )   THEN 
			IF( RXD'EVENT AND RXD='0' ) THEN Start <= '1'; 
			END IF; 
		ELSIF( cnt8>9 AND TT='0' ) THEN Start <= '0';
		END IF;  
		
	END PROCESS; 
	
	-------------------------------------------------
	-- Recevie 
	Recevie: PROCESS( RESET, Start, TT, RXD, cnt8 )
	BEGIN
		-----------------------------------------------
		-- Receive data 
		IF( RESET = '0' )THEN 
			spdata <= "00000000000"; 
		ELSIF( TT'EVENT AND TT='1' ) THEN 
			spdata(cnt8) <= RXD;
		END IF;  
		
		IF( RESET = '0' OR Start='0' ) THEN cnt8 <= 0; 
		ELSIF( Start='1' ) THEN 
			IF( TT'EVENT AND TT='1' ) THEN cnt8 <= cnt8 + 1; 			
			END IF; 
		END IF; 
		
	END PROCESS; 
	
	-------------------------------------------------
	-------------------------------------------------
	PDATA <= spdata( 8 downto 1 );
	TXD   <= RXD;
	
END Behavioral;

⌨️ 快捷键说明

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