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

📄 mc8051_siu_rtl.vhd

📁 mc8051源码
💻 VHD
📖 第 1 页 / 共 4 页
字号:
                  s_tran_sh(9 downto 0) <= s_tran_sh(10 downto 1);                  v_txstep              := "01";                  s_txdm0               <= s_tran_sh(1);                end if;              when ("0101") =>  	-- D5                if s_m2_shift_en = '1' then                  s_tran_sh(10)         <= '1';                  s_tran_sh(9 downto 0) <= s_tran_sh(10 downto 1);                  v_txstep              := "01";                  s_txdm0               <= s_tran_sh(1);                end if;              when ("0110") =>  	-- D6                if s_m2_shift_en = '1' then                  s_tran_sh(10)         <= '1';                  s_tran_sh(9 downto 0) <= s_tran_sh(10 downto 1);                  v_txstep              := "01";                  s_txdm0               <= s_tran_sh(1);                end if;              when ("0111") =>  	-- D7                if s_m2_shift_en = '1' then                  s_tran_sh(10)         <= '1';                  s_tran_sh(9 downto 0) <= s_tran_sh(10 downto 1);                  v_txstep              := "01";                  s_txdm0               <= s_tran_sh(1);                end if;              when ("1000") =>  	-- D8                if s_m2_shift_en = '1' then                  s_tran_sh(10)         <= '1';                  s_tran_sh(9 downto 0) <= s_tran_sh(10 downto 1);                  v_txstep              := "01";                  s_txdm0               <= s_tran_sh(1);                end if;              when ("1001") =>  	-- D9                if s_m2_shift_en = '1' then                  s_tran_sh(10)         <= '1';                  s_tran_sh(9 downto 0) <= s_tran_sh(10 downto 1);                  v_txstep              := "01";                  s_txdm0               <= s_tran_sh(1);                end if;              when ("1010") =>  	-- D10, set done bit                if s_m2_shift_en = '1' then                  s_tran_sh(10)         <= '1';                  s_tran_sh(9 downto 0) <= s_tran_sh(10 downto 1);                  s_tran_done           <= '1';                  v_txstep              := "10";                  s_txdm0               <= s_tran_sh(1);                end if;              when others =>  		-- D0                -- commence transmission if conditions are met                s_txdm0 <= '1';                if s_m2_shift_en = '1' then                  if s_trans = '1' then                    s_tran_sh(10)         <= '1';                    s_tran_sh(9)          <= s_tb8;                    s_tran_sh(8 downto 1) <= unsigned(sbuf_i);                    s_tran_sh(0)          <= '0';                    v_txstep              := "01";                    s_tran_done           <= '0';                    s_txdm0               <= '0';                  end if;                end if;            end case;--------------------------------------------------------------------------------- MODE 3-------------------------------------------------------------------------------          when ("11") =>            rxd_o <= '0';            rxdwr_o <= '0';            case s_tran_state is              when ("0001") =>  	-- D1                if s_m13_shift_en = '1' then                  s_tran_sh(10)         <= '1';                  s_tran_sh(9 downto 0) <= s_tran_sh(10 downto 1);                  v_txstep              := "01";                  s_txdm0               <= s_tran_sh(1);                end if;              when ("0010") =>  	-- D2                if s_m13_shift_en = '1' then                  s_tran_sh(10)         <= '1';                  s_tran_sh(9 downto 0) <= s_tran_sh(10 downto 1);                  v_txstep              := "01";                  s_txdm0               <= s_tran_sh(1);                end if;              when ("0011") =>  	-- D3                if s_m13_shift_en = '1' then                  s_tran_sh(10)         <= '1';                  s_tran_sh(9 downto 0) <= s_tran_sh(10 downto 1);                  v_txstep              := "01";                  s_txdm0               <= s_tran_sh(1);                end if;              when ("0100") =>  	-- D4                if s_m13_shift_en = '1' then                  s_tran_sh(10)         <= '1';                  s_tran_sh(9 downto 0) <= s_tran_sh(10 downto 1);                  v_txstep              := "01";                  s_txdm0               <= s_tran_sh(1);                end if;              when ("0101") =>  	-- D5                if s_m13_shift_en = '1' then                  s_tran_sh(10)         <= '1';                  s_tran_sh(9 downto 0) <= s_tran_sh(10 downto 1);                  v_txstep              := "01";                  s_txdm0               <= s_tran_sh(1);                end if;              when ("0110") =>  	-- D6                if s_m13_shift_en = '1' then                  s_tran_sh(10)         <= '1';                  s_tran_sh(9 downto 0) <= s_tran_sh(10 downto 1);                  v_txstep              := "01";                  s_txdm0               <= s_tran_sh(1);                end if;              when ("0111") =>  	-- D7                if s_m13_shift_en = '1' then                  s_tran_sh(10)         <= '1';                  s_tran_sh(9 downto 0) <= s_tran_sh(10 downto 1);                  v_txstep              := "01";                  s_txdm0               <= s_tran_sh(1);                end if;              when ("1000") =>  	-- D8                if s_m13_shift_en = '1' then                  s_tran_sh(10)         <= '1';                  s_tran_sh(9 downto 0) <= s_tran_sh(10 downto 1);                  v_txstep              := "01";                  s_txdm0               <= s_tran_sh(1);                end if;              when ("1001") =>  	-- D9                if s_m13_shift_en = '1' then                  s_tran_sh(10)         <= '1';                  s_tran_sh(9 downto 0) <= s_tran_sh(10 downto 1);                  v_txstep              := "01";                  s_txdm0               <= s_tran_sh(1);                end if;              when ("1010") =>  	-- D10, set done bit                if s_m13_shift_en = '1' then                  s_tran_sh(10)         <= '1';                  s_tran_sh(9 downto 0) <= s_tran_sh(10 downto 1);                  s_tran_done           <= '1';                  v_txstep              := "10";                  s_txdm0               <= s_tran_sh(1);                end if;              when others =>  		-- D0                -- commence transmission if conditions are met                s_txdm0 <= '1';                if s_m13_shift_en = '1' then                  if s_trans = '1' then                    s_tran_sh(10)         <= '1';                    s_tran_sh(9)          <= s_tb8;                    s_tran_sh(8 downto 1) <= unsigned(sbuf_i);                    s_tran_sh(0)          <= '0';                    s_tran_done           <= '0';                    v_txstep              := "01";                    s_txdm0               <= '0';                  end if;                end if;            end case;-------------------------------------------------------------------------------          when others =>            null;        end case;        case v_txstep is          when "01" =>            s_tran_state <= s_tran_state + conv_unsigned(1, 1);          when "10" =>            s_tran_state <= conv_unsigned(0, 4);          when others =>            null;        end case;              end if;    end if;  end process p_transmit;---------------------------------------------------------------------------------**************************** RECEIVE ****************************************-- This is the finit state machine for the receive shift register-------------------------------------------------------------------------------        p_receive: process (clk,                      reset)        variable v_rxstep : std_logic_vector(1 downto 0);        begin      if reset = '1' then        s_recv_state <= conv_unsigned(0,4);        s_recv_sh <= conv_unsigned(0,8);        s_recv_buf <= conv_unsigned(0,8);        s_recv_done <= '0';        s_rb8 <= '0';      else        if clk'event and clk = '1' then--------------------------------------------------------------------------------- MODE 0-------------------------------------------------------------------------------	  v_rxstep := "00";          case s_mode is          when ("00") =>            case s_recv_state is            when ("0000") =>            -- D0              -- commence reception if conditions are met              if s_ren = '1' and s_ri = '0' then                if s_m0_shift_en = '1' then                  v_rxstep := "01";                  s_recv_done <= '0';                end if;              end if;            when ("0001") =>            -- D1              if s_m0_shift_en = '1' then                s_recv_sh(7) <= rxd_i;		s_recv_sh(6 downto 0) <= s_recv_sh(7 downto 1);                v_rxstep := "01";              end if;            when ("0010") =>            -- D2              if s_m0_shift_en = '1' then                s_recv_sh(7) <= rxd_i;		s_recv_sh(6 downto 0) <= s_recv_sh(7 downto 1);                v_rxstep := "01";              end if;            when ("0011") =>            -- D3              if s_m0_shift_en = '1' then                s_recv_sh(7) <= rxd_i;		s_recv_sh(6 downto 0) <= s_recv_sh(7 downto 1);                v_rxstep := "01";              end if;            when ("0100") =>            -- D4              if s_m0_shift_en = '1' then                s_recv_sh(7) <= rxd_i;		s_recv_sh(6 downto 0) <= s_recv_sh(7 downto 1);                v_rxstep := "01";              end if;            when ("0101") =>            -- D5              if s_m0_shift_en = '1' then                s_recv_sh(7) <= rxd_i;		s_recv_sh(6 downto 0) <= s_recv_sh(7 downto 1);                v_rxstep := "01";              end if;            when ("0110") =>            -- D6              if s_m0_shift_en = '1' then                s_recv_sh(7) <= rxd_i;		s_recv_sh(6 downto 0) <= s_recv_sh(7 downto 1);                v_rxstep := "01";              end if;            when ("0111") =>            -- D6              if s_m0_shift_en = '1' then                s_recv_sh(7) <= rxd_i;		s_recv_sh(6 downto 0) <= s_recv_sh(7 downto 1);                v_rxstep := "01";              end if;            when ("1000") =>            -- D7, set bits and store data              if s_m0_shift_en = '1' then                s_recv_sh(7) <= rxd_i;		s_recv_sh(6 downto 0) <= s_recv_sh(7 downto 1);                s_recv_done <= '1';                s_recv_buf(7) <= rxd_i;		s_recv_buf(6 downto 0) <= s_recv_sh(7 downto 1);                v_rxstep := "10";              end if;            when others =>                            v_rxstep := "10";            end case;--------------------------------------------------------------------------------- MODE 1-------------------------------------------------------------------------------          when ("01") =>            case s_recv_state is            when ("0000") =>            -- synchronise reception              if s_ren = '1' and s_detect = '1' then                v_rxstep := "01";                s_recv_sh <= conv_unsigned(0,8);                s_recv_done <= '0';              end if;            when ("0001") =>            -- D0 = START BIT              if s_detect = '0' then                if s_rxd_val = '0' then                  if s_m13_shift_en = '1' then                    s_recv_sh(7) <= s_rxd_val;		    s_recv_sh(6 downto 0) <= s_recv_sh(7 downto 1);                v_rxstep := "01";                  end if;                else                    -- reject false start bits                  if s_m13_shift_en = '1' then                v_rxstep := "10";                                      end if;

⌨️ 快捷键说明

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