📄 uart.vhd
字号:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity uart is
port(sysclk,reset,rxdin:in std_logic;
data:out std_logic_vector(7 downto 0);
tbre,tsre,ready:out std_logic;
txdo:out std_logic);
end uart;
architecture top of uart is
component txd
port (reset,clk16x,wrn : in std_logic ;
din : in std_logic_vector(7 downto 0) ;--input parallel data
tbre : out std_logic ; --receive buffer flag
tsre : out std_logic ; --send flag
sdo : out std_logic ); --serial data out
end component;
component rxd
port (reset,clk16x,rxd : in std_logic ;
rbr : out std_logic_vector (7 downto 0) ;
data_ready : out std_logic ;
framing_error : out std_logic );
end component;
signal data_tmp: std_logic_vector (7 downto 0) ;
signal rd,rdn:std_logic;
signal clk16x:std_logic;
signal sysclkdiv:std_logic_vector( 3 downto 0);
begin
process (reset,sysclk) --10.84444
begin --band 115200
if reset = '0' then
sysclkdiv <= "0000";
elsif sysclk'event and sysclk = '1' then
sysclkdiv <= sysclkdiv + '1';
if sysclkdiv = "1010" then
sysclkdiv <= "0000";
clk16x <= '0';
elsif sysclkdiv >= "0101" then
clk16x <= '1';
end if;
end if;
end process;
U1:txd port map(reset=>reset,clk16x=>clk16x,wrn=>rd,din=>data_tmp,sdo=>txdo,tbre=>tbre,tsre=>tsre);
U2:rxd port map(reset=>reset,clk16x=>clk16x,data_ready=>rdn,rxd=>rxdin,rbr=>data_tmp);
data<=data_tmp;
rd<= not rdn;
ready<=rd;
end top;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -