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

📄 txdchart.vhd

📁 这份是实验课上的教师和学生用的实例。关于用matlab simulink仿真状态机并生成vhdl代码的详细内容
💻 VHD
字号:
--------------------------------------------------------------------- Stateflow HDL code generation for chart:--    MyUART1/TxDSubsys/TxdChart-- -- Target language                      : vhdl-- Date of code generation              : 05-Dec-2008 10:47:49---- Entity name                          : TxdChart-- Register output                      : ON-- Clock name                           : clk-- Clock_enable name                    : clk_enable-- Reset name                           : reset-- Reset type                           : Asynchronous-------------------------------------------------------------------LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.numeric_std.all;ENTITY TxdChart IS    PORT (        clk : IN std_logic;         clk_enable : IN std_logic;         reset : IN std_logic;        TxDData : IN std_logic_vector(7 DOWNTO 0);        Ready : IN std_logic;        TxD : OUT std_logic;        Wr : OUT std_logic);END TxdChart;ARCHITECTURE fsm_SFHDL OF TxdChart IS    TYPE T_state_type_is_CntPro is (IN_NO_ACTIVE_CHILD, IN_DEC, IN_Last, IN_WAIT);    TYPE T_state_type_is_TxdPro is (IN_NO_ACTIVE_CHILD, IN_DATA, IN_DELAY2, IN_Delay, IN_IDLE, IN_START, IN_STOP);    SIGNAL is_CntPro : T_state_type_is_CntPro;    SIGNAL is_TxdPro : T_state_type_is_TxdPro;    SIGNAL Tmp : unsigned(7 DOWNTO 0);    SIGNAL BitCnt : unsigned(3 DOWNTO 0);    SIGNAL RateCnt : unsigned(4 DOWNTO 0);    SIGNAL TxD_reg : std_logic;    SIGNAL Wr_reg : std_logic;    SIGNAL is_CntPro_next : T_state_type_is_CntPro;    SIGNAL is_TxdPro_next : T_state_type_is_TxdPro;    SIGNAL Tmp_next : unsigned(7 DOWNTO 0);    SIGNAL BitCnt_next : unsigned(3 DOWNTO 0);    SIGNAL RateCnt_next : unsigned(4 DOWNTO 0);    SIGNAL TxD_reg_next : std_logic;    SIGNAL Wr_reg_next : std_logic;BEGIN    initialize_TxdChart : PROCESS (reset, clk)        -- local variables    BEGIN        IF reset = '1' THEN            Tmp <= to_unsigned(0, 8);            is_TxdPro <= IN_IDLE;            BitCnt <= to_unsigned(0, 4);            TxD_reg <= '1';            Wr_reg <= '0';            is_CntPro <= IN_WAIT;            RateCnt <= to_unsigned(15, 5);        ELSIF clk'EVENT AND clk= '1' THEN            IF clk_enable= '1' THEN                is_CntPro <= is_CntPro_next;                is_TxdPro <= is_TxdPro_next;                Tmp <= Tmp_next;                BitCnt <= BitCnt_next;                RateCnt <= RateCnt_next;                TxD_reg <= TxD_reg_next;                Wr_reg <= Wr_reg_next;            END IF;        END IF;    END PROCESS initialize_TxdChart;    TxdChart : PROCESS (TxDData, Ready, is_CntPro, is_TxdPro, Tmp, BitCnt, RateCnt, TxD_reg, Wr_reg)        -- local variables        VARIABLE BitCnt_temp : unsigned(3 DOWNTO 0);    BEGIN        is_CntPro_next <= is_CntPro;        is_TxdPro_next <= is_TxdPro;        Tmp_next <= Tmp;        RateCnt_next <= RateCnt;        TxD_reg_next <= TxD_reg;        Wr_reg_next <= Wr_reg;        BitCnt_temp := BitCnt;        CASE is_TxdPro IS            WHEN IN_DATA =>                IF RateCnt = 0 THEN                     is_TxdPro_next <= IN_Delay;                    BitCnt_temp := BitCnt + 1;                END IF;            WHEN IN_DELAY2 =>                IF RateCnt = 0 THEN                     is_TxdPro_next <= IN_DATA;                    -- 2;                    TxD_reg_next <= Tmp(0);                    Tmp_next <= SHIFT_RIGHT(Tmp , 1);                END IF;            WHEN IN_Delay =>                IF BitCnt = 8 THEN                     is_TxdPro_next <= IN_STOP;                    TxD_reg_next <= '1';                    BitCnt_temp := to_unsigned(9, 4);                ELSE                     is_TxdPro_next <= IN_DATA;                    -- 2;                    TxD_reg_next <= Tmp(0);                    Tmp_next <= SHIFT_RIGHT(Tmp , 1);                END IF;            WHEN IN_IDLE =>                IF Ready = '1' THEN                     Tmp_next <= unsigned(TxDData);                    Wr_reg_next <= '1';                    is_TxdPro_next <= IN_START;                    TxD_reg_next <= '0';                ELSE                     is_TxdPro_next <= IN_IDLE;                    BitCnt_temp := to_unsigned(0, 4);                    TxD_reg_next <= '1';                    Wr_reg_next <= '0';                END IF;            WHEN IN_START =>                is_TxdPro_next <= IN_DELAY2;                Wr_reg_next <= '0';            WHEN IN_STOP =>                IF RateCnt = 0 THEN                     is_TxdPro_next <= IN_IDLE;                    BitCnt_temp := to_unsigned(0, 4);                    TxD_reg_next <= '1';                    Wr_reg_next <= '0';                END IF;            WHEN OTHERS =>                 is_TxdPro_next <= IN_IDLE;                BitCnt_temp := to_unsigned(0, 4);                TxD_reg_next <= '1';                Wr_reg_next <= '0';        END CASE;        CASE is_CntPro IS            WHEN IN_DEC =>                IF RateCnt = 0 THEN                     RateCnt_next <= to_unsigned(15, 5);                    IF BitCnt_temp = 9 THEN                         is_CntPro_next <= IN_Last;                    ELSE                         is_CntPro_next <= IN_DEC;                    END IF;                ELSE                     RateCnt_next <= RateCnt - 1;                END IF;            WHEN IN_Last =>                IF RateCnt = 0 THEN                     is_CntPro_next <= IN_WAIT;                    RateCnt_next <= to_unsigned(15, 5);                ELSE                     RateCnt_next <= RateCnt - 1;                END IF;            WHEN IN_WAIT =>                IF TxD_reg = '0' THEN                     RateCnt_next <= to_unsigned(15, 5);                    is_CntPro_next <= IN_DEC;                ELSE                     is_CntPro_next <= IN_WAIT;                    RateCnt_next <= to_unsigned(15, 5);                END IF;            WHEN OTHERS =>                 is_CntPro_next <= IN_WAIT;                RateCnt_next <= to_unsigned(15, 5);        END CASE;        BitCnt_next <= BitCnt_temp;    END PROCESS TxdChart;    TxD <= TxD_reg_next;    Wr <= Wr_reg_next;END fsm_SFHDL;

⌨️ 快捷键说明

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