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

📄 utopia_master_rx.vhd

📁 utopia主模式发送和接收 主要针对5384
💻 VHD
📖 第 1 页 / 共 2 页
字号:
          				sm_rx		<= sm_rx_j1;	
          			else
            			select_stop	<= '0';
            			phy_status(conv_integer(sig_addr_keep))	<=	PM5384_RCA;
            			if sig_pm5384_raddr < (PollAddr_E + 1) then
              				PM5384_RADR      <= sig_pm5384_raddr;
              				sig_addr_keep    <= sig_pm5384_raddr - PollAddr_S;
              				sig_pm5384_raddr <= sig_pm5384_raddr + '1';
            			else
              				PM5384_RADR      <= PollAddr_S;
              				sig_addr_keep    <= (others => '0');
              				sig_pm5384_raddr <= PollAddr_S + '1';
           				end if;
            			sm_rx  <= sm_rx_s1;
            			TST_SM <= "000";
          			end if;         			

        		when sm_rx_s1 =>
          			if select_suc = '1' then
          				select_stop <= '1';
          			else
          				select_stop <='0';
          			end if;           			
          			if Module_En = '1' then
            			PM5384_RADR <= (others => '1');
            			sm_rx       <= sm_rx_s0;
            			TST_SM      <= "010";
          			else
            			PM5384_RENB <= '1';
            			PM5384_RADR <= (others => '1');
            			sm_rx       <= sm_rx_en;
            			TST_SM      <= "111";
          			end if;
          
        		when sm_rx_j1 =>
        			phy_status(sig_index) <= '0';
          			PM5384_RADR <= (others => '1');
          			PM5384_RENB <= '1';
          			sm_rx       <= sm_rx_j2;
          			select_stop <= '0';
          			TST_SM      <= "010"; 
          		when sm_rx_j2 =>
          			PM5384_RENB <= '1';
          			if PM5384_RCA = '1' then
          				PM5384_RADR <= sel_addr;
          				sm_rx       <=sm_rx_s2;	
          			else
          				PM5384_RADR <= (others => '1');
          				sm_rx       <=sm_rx_s0;
          			end if;     
        		when sm_rx_s2 =>
        			phy_status(sig_index) <= '0';
          			PM5384_RADR <= (others => '1');
          			PM5384_RENB <= '0';
          			sm_rx       <= sm_rx_s3;
          			select_stop <= '0';
          			TST_SM      <= "010";
          
        		when sm_rx_s3 =>
          			if select_suc = '1' then
          				select_stop <= '1';
          			else
          				select_stop <='0';
          			end if;
          			if poll_flag = '0' then
          				PM5384_RADR   <= (others => '1');
          				poll_flag	<= not poll_flag;	
          			else  
						phy_status(conv_integer(sig_addr_keep))	<=	PM5384_RCA;
            			if sig_pm5384_raddr < (PollAddr_E + 1) then
              				PM5384_RADR      <= sig_pm5384_raddr;
              				sig_addr_keep    <= sig_pm5384_raddr - PollAddr_S;
              				sig_pm5384_raddr <= sig_pm5384_raddr + '1';
            			else
              				PM5384_RADR      <= PollAddr_S;
              				sig_addr_keep    <= (others => '0');
              				sig_pm5384_raddr <= PollAddr_S + '1';
            			end if;
            			poll_flag	<= not poll_flag;	
          			end if;
          			PM5384_RENB   <= '0';
          			sig_rxcounter <= (others => '0');
 --         			if PM5384_RCA = '1' then
            			sm_rx  <= sm_rx_s4;
            			TST_SM <= "100";
 --         			else
 --           			PM5384_RENB   <= '1';
 --           			sm_rx  <= sm_rx_soc;
 --           			TST_SM <= "000";
 --         			end if;

        		when sm_rx_s4 =>
          			if select_suc = '1' then
          				select_stop <= '1';
          			else
          				select_stop <='0';
          			end if;        		
          			if poll_flag = '0' then
          				PM5384_RADR   <= (others => '1');
          				poll_flag	<= not poll_flag;	
          			else  
            			phy_status(conv_integer(sig_addr_keep))	<=	PM5384_RCA;
            			if sig_pm5384_raddr < (PollAddr_E + 1) then
              				PM5384_RADR      <= sig_pm5384_raddr;
              				sig_addr_keep    <= sig_pm5384_raddr - PollAddr_S;
              				sig_pm5384_raddr <= sig_pm5384_raddr + '1';
            			else
              				PM5384_RADR      <= PollAddr_S;
              				sig_addr_keep    <= (others => '0');
              				sig_pm5384_raddr <= PollAddr_S + '1';
            			end if;
            			poll_flag	<= not poll_flag;	
         			end if;
          
          			if PM5384_RSOC = '1' then    						
            			PM5384_RENB           <= '0';
            			FIFO_WRREQ(sig_index) <= '1';
            			FIFO_DATA             <= PM5384_RDATA;
            			sig_rxcounter         <= sig_rxcounter + '1';
            			sm_rx                 <= sm_rx_s5;
            			TST_SM                <= "000";
          			else
            			PM5384_RENB           <= '1';
            			sm_rx  <= sm_rx_s0;
            			TST_SM <= "000";
          			end if;
-----------------------------------------------------------------------------
--				when sm_rx_soc =>
--					PM5384_RADR <= (others => '1'); 
--					PM5384_RENB           <= '1';
--					if PM5384_RSOC = '1' then						
--           				FIFO_WRREQ(sig_index) <= '1';
--           				FIFO_DATA             <= PM5384_RDATA;
--           				sig_rxcounter         <= sig_rxcounter + '1';
--           				sm_rx				  <= sm_rx_bb1;
--           				    --enter abnormal state
--					else
--						sm_rx				  <= sm_rx_s0;
--					end if; 
---------------------------------------------------------------------------------------------------------
--		  	when sm_rx_bb1 =>
--		  		FIFO_WRREQ(sig_index) <= '0';
--		  		PM5384_RADR  <= conv_std_logic_vector(sig_index,5) + PollAddr_S; 
--				PM5384_RENB           <= '1'; 
--				sm_rx  <= sm_rx_bb2;
--		  	when sm_rx_bb2 =>
--		  		PM5384_RADR <= (others => '1');
--         			FIFO_WRREQ(sig_index) <= '0';
--         			PM5384_RENB           <= '1'; 
--         			sm_rx                 <= sm_rx_bb3;
--
--           	when sm_rx_bb3 =>
--		  		FIFO_WRREQ(sig_index) <= '0';
--		  		PM5384_RADR  <= conv_std_logic_vector(sig_index,5) + PollAddr_S; 
--				PM5384_RENB           <= '1'; 
--				if PM5384_RCA = '1' then
--					sm_rx <= sm_rx_bb4;
--				else
--					sm_rx <= sm_rx_bb1;	
--				end if;
--			when sm_rx_bb4 =>
--				PM5384_RADR  <= (others => '1');
--				PM5384_RENB           <= '0';
--				sm_rx <= sm_rx_bb5;
--			when sm_rx_bb5 =>
--				PM5384_RENB           <= '0';
--        			sm_rx <= sm_rx_s5;		
-------------------------------------------------------------------------------------------------------		          	  		
        		when sm_rx_s5 =>
          			if select_suc = '1' then
          				select_stop <= '1';
          			else
          				select_stop <='0';
          			end if;        		
          			if poll_flag = '0' then
          				PM5384_RADR   <= (others => '1');
          				poll_flag	<= not poll_flag;	
         			else  
						phy_status(conv_integer(sig_addr_keep))	<=	PM5384_RCA;
            			if sig_pm5384_raddr < (PollAddr_E + 1) then
              				PM5384_RADR      <= sig_pm5384_raddr;
              				sig_addr_keep    <= sig_pm5384_raddr - PollAddr_S;
              				sig_pm5384_raddr <= sig_pm5384_raddr + '1';
            			else
              				PM5384_RADR      <= PollAddr_S;
              				sig_addr_keep    <= (others => '0');
              				sig_pm5384_raddr <= PollAddr_S + '1';
            			end if;
            			poll_flag	<= not poll_flag;	
         			end if;
          			if sig_rxcounter < 25 then
            			FIFO_WRREQ(sig_index) <= '1';
            			PM5384_RENB           <= '0';
            			FIFO_DATA             <= PM5384_RDATA;
            			sig_rxcounter         <= sig_rxcounter + '1';
            			sm_rx                 <= sm_rx_s5;
          			else
            			FIFO_WRREQ(sig_index) <= '1';
            			PM5384_RENB           <= '1';
            			FIFO_DATA             <= PM5384_RDATA;
            			sig_rxcounter         <= (others => '0');
            			sm_rx                 <= sm_rx_s6;
            			TST_SM                <= "000";
          			end if;

        		when sm_rx_s6 =>
          			if select_suc = '1' then
          				select_stop <= '1';
          			else
          				select_stop <='0';
          			end if;
          			if poll_flag = '0' then
          				PM5384_RADR   <= (others => '1');
          				poll_flag	<= not poll_flag;	
          			else  
						phy_status(conv_integer(sig_addr_keep))	<=	PM5384_RCA;
            			if sig_pm5384_raddr < (PollAddr_E + 1) then
              				PM5384_RADR      <= sig_pm5384_raddr;
              				sig_addr_keep    <= sig_pm5384_raddr - PollAddr_S;
              				sig_pm5384_raddr <= sig_pm5384_raddr + '1';
            			else
              				PM5384_RADR      <= PollAddr_S;
              				sig_addr_keep    <= (others => '0');
              				sig_pm5384_raddr <= PollAddr_S + '1';
            			end if;
            			poll_flag	<= not poll_flag;	
          			end if;
					FIFO_DATA             <= PM5384_RDATA;
					FIFO_WRREQ(sig_index) <= '1';
					sm_rx                 <= sm_rx_s0;
					TST_SM                <= "110";      

        		when others =>
          			FIFO_WRREQ       <= (others => '0');
          			FIFO_DATA        <= (others => '0');
          			PM5384_RENB      <= '1';
          			PM5384_RADR      <= (others => 'Z');
          			sig_rxcounter    <= (others => '0');
          			sig_pm5384_raddr <= PollAddr_S;
          			sig_addr_keep    <= (others => '0');
          			sig_index        <= 0;
      				poll_flag		   <= '1';
          			phy_status	   <= (others => '0');	
          			sm_rx            <= sm_rx_en;
          			select_stop      <= '0';
      				sm_rx            <= sm_rx_en;
      				TST_SM           <= "111";
				sel_addr  <= (others => '1');
      		                detection		 <= '1'; 
    		end case;
		end if;
	end process polling_and_rx;    	         
end bhv;
    
    

⌨️ 快捷键说明

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