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

📄 transmit.vhd

📁 自己用VHDL写的一个串口程序
💻 VHD
字号:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY TRANSMIT IS
PORT(XBUF: IN STD_LOGIC_VECTOR(7 DOWNTO 0);
     BCLK: IN STD_LOGIC;
     RESETL:IN STD_LOGIC;
     XMIT_BEGIN: IN STD_LOGIC;
     TXD:    OUT STD_LOGIC;
     XMIT_DONE: OUT STD_LOGIC
     );
END TRANSMIT;


ARCHITECTURE BEHAV OF TRANSMIT IS
TYPE X_STATE IS (X_IDLE,X_START,X_WAIT,X_SHIFT,X_STOP,X,X_0,X_1,X_2,X_3,X_4,X_5,X_6,X_7,X_8,X_9);
SIGNAL  PRESENT_STATE : X_STATE:=X_IDLE;
BEGIN
   PROCESS(BCLK,RESETL)
   VARIABLE TEMP: STD_LOGIC_VECTOR(3 DOWNTO 0) :="0000";
   VARIABLE LEN : INTEGER RANGE 0 TO 8:=0;
    BEGIN
      IF RESETL='1' THEN PRESENT_STATE <=X_IDLE;
      ELSIF BCLK'EVENT AND BCLK='1'  
      THEN 
    CASE PRESENT_STATE IS
      WHEN X_IDLE =>   IF XMIT_BEGIN='1' THEN PRESENT_STATE <=X_START; TEMP:="0000";LEN:=0;XMIT_DONE<='0';  
                       ELSE PRESENT_STATE <= X_IDLE;
                        END IF;
      WHEN X_START => 
                      IF TEMP="1111" THEN PRESENT_STATE <=X_WAIT;TEMP:="0000";              --起始位发送
                      ELSE TEMP:=TEMP+1;TXD<='0';PRESENT_STATE <=X_START;
                      END IF;
      WHEN X_WAIT =>  
                      IF TEMP="1111" AND LEN = 7 THEN PRESENT_STATE <=X_0; TEMP:="0000";TXD<='1';
                      ELSIF TEMP="1111" AND LEN/=7 THEN LEN:=LEN+1; TEMP:="0000";
														PRESENT_STATE <=X_WAIT;
                      ELSE TEMP:=TEMP+1; TXD<=XBUF(LEN);PRESENT_STATE <=X_WAIT;
                      END IF;
                      
      WHEN X_0 =>  
                     IF TEMP="1111" THEN PRESENT_STATE<=X_1;TEMP:="0000";                  --停止位发送
                     ELSE TEMP:=TEMP+1; TXD<='1';PRESENT_STATE <=X_0;
                     END IF; 
      
	  WHEN X_1 =>  
                     IF TEMP="1111" THEN PRESENT_STATE<=X_2;TEMP:="0000";                 --停止位发送
                     ELSE TEMP:=TEMP+1; TXD<='1';PRESENT_STATE <=X_1;
                     END IF;   
    
      WHEN X_2 =>  
                      IF TEMP="1111" THEN PRESENT_STATE<=X_3;TEMP:="0000";                  --停止位发送
                      ELSE TEMP:=TEMP+1; TXD<='1';PRESENT_STATE <=X_2;
                      END IF; 
      
      WHEN X_3 =>  
                      IF TEMP="1111" THEN PRESENT_STATE<=X_4;TEMP:="0000";                   --停止位发送
                      ELSE TEMP:=TEMP+1; TXD<='1';PRESENT_STATE <=X_3;
                      END IF; 
      
      WHEN X_4 =>  
                      IF TEMP="1111" THEN PRESENT_STATE<=X_IDLE;TEMP:="0000";XMIT_DONE<='1';                  --停止位发送
                      ELSE TEMP:=TEMP+1; TXD<='1';PRESENT_STATE <=X_4;
                      END IF; 
      
--      WHEN X_5 =>  
 --                     IF TEMP="1111" THEN PRESENT_STATE<=X_6;TEMP:="0000";                  --停止位发送
  --                    ELSE TEMP:=TEMP+1; TXD<='1';PRESENT_STATE <=X_5;
  --                    END IF; 
  --    WHEN X_6 =>  
   --                   IF TEMP="1111" THEN PRESENT_STATE<=X_7;TEMP:="0000";                  --停止位发送
    --                  ELSE TEMP:=TEMP+1; TXD<='1';PRESENT_STATE <=X_6;
    --                  END IF;       
     -- WHEN X_7 =>  
      --                IF TEMP="1111" THEN PRESENT_STATE<=X_8;TEMP:="0000";                  --停止位发送
       --               ELSE TEMP:=TEMP+1; TXD<='1';PRESENT_STATE <=X_7;
       --               END IF;       
   --   WHEN X_8 =>  
    --                  IF TEMP="1111" THEN PRESENT_STATE<=X_9;TEMP:="0000";                  --停止位发送
    --                  ELSE TEMP:=TEMP+1; TXD<='1';PRESENT_STATE <=X_8;
    --                  END IF; 
    --  WHEN X_9 =>  
    --                  IF TEMP="1111" THEN PRESENT_STATE<=X_IDLE;XMIT_DONE<='1';TEMP:="0000";                  --停止位发送
    --                  ELSE TEMP:=TEMP+1; TXD<='1';PRESENT_STATE <=X_9;
    --                  END IF;       
      
	
      WHEN OTHERS =>NULL;
    END CASE;
  END IF;
  END PROCESS;
END BEHAV; 

⌨️ 快捷键说明

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