📄 utopia_master_rx.vhd
字号:
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 + -