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

📄 rcctrl.vhd

📁 基于VHDL的串行异步通信电路的设计 包括串行发送器
💻 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 + -