📄 rcctrl.vhd
字号:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_SIGNED.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY RCCTRL IS
PORT(
RESET,CS,A0,RE,RXC,RXD,S0: IN STD_LOGIC;
LDSR,LDRB,SCLK,FE: OUT STD_LOGIC);
END;
ARCHITECTURE MAIN OF RCCTRL IS
SIGNAL STATUS: STD_LOGIC_VECTOR(3 DOWNTO 0):="0000";
SIGNAL READ:STD_LOGIC;
BEGIN
PROCESS(RXC)
BEGIN
IF RXC'EVENT AND RXC='1' THEN
IF RESET='0' THEN STATUS<="0000";LDSR<='0';LDRB<='0';SCLK<='0';FE<='0';
ELSE
IF CS='0' THEN
CASE STATUS IS
WHEN "0000"=>
LDRB<='0';
IF RXD='0' THEN
STATUS<="0001";
END IF;
WHEN "0001"=>STATUS<="0010";
WHEN "0010"=>STATUS<="0011";
WHEN "0011"=>
IF RXD='0' THEN
LDSR<='1';
SCLK<='1';
STATUS<="0100";
ELSE
STATUS<="0000";
END IF;
WHEN "0100"=>
IF S0='0' THEN
STATUS<="1100";
SCLK<='0';
ELSE
STATUS<="0101";
LDSR<='0';
SCLK<='0';
END IF;
WHEN "0101"=>STATUS<="0110";
WHEN "0110"=>STATUS<="0111";
WHEN "0111"=>STATUS<="1000";
WHEN "1000"=>STATUS<="1001";
WHEN "1001"=>STATUS<="1010";
WHEN "1010"=>STATUS<="1011";
WHEN "1011"=>
IF S0='0' THEN
STATUS<="1100";
ELSE
SCLK<='1';
STATUS<="0100";
END IF;
WHEN "1100"=>STATUS<="1101";
WHEN "1101"=>STATUS<="1110";
WHEN "1110"=>STATUS<="1111";
WHEN "1111"=>
IF RE='0' AND A0='1' THEN READ<='1';
END IF;
IF RXD='0' AND READ='0' THEN
FE<='1';
STATUS<="1110";
ELSIF RXD='0' AND READ='1' AND RE='1' THEN
FE<='0';
ELSIF RXD='1' THEN
FE<='0';
LDRB<='1';
STATUS<="0000";
READ<='0';
END IF;
WHEN OTHERS => STATUS<="0000";
END CASE;
END IF;
END IF;
END IF;
END PROCESS;
END;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -