📄 uart.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 + -