Jump to content

    

Сигнал типа STD_LOGIC, VHDL - прием и передача одновременно не работают

Есть гуру, помогите, плиз.
Сигнал типа STD_LOGIC. Не могу настроить на прием и передачу, если любое присваивание приходящему сигналу есть, тупо нет приема..
Вот прога -
  usb_dn <= usb_2_dn;-- usb_2_dn входящий, usb_dn - читает
  usb_dp <= usb_2_dp;-- usb_2_dp входящий, usb_dp - читает

  kl :   process(clk_120MHz) is

  begin

   if rising_edge(clk_120MHz) THEN
    if (switchIn(2)= '1') then
--      usb_2_dp  <= 'H';
 --     usb_2_dn <= 'L';
    elsif(switchIn(3)= '1') then
--      usb_2_dp  <= 'Z';
 --     usb_2_dn <= 'Z';    
    elsif(switchIn(4)= '1') then
--      usb_2_dp  <= 'W';
 --     usb_2_dn <= 'W';      
    elsif(switchIn(5)= '1') then
--      usb_2_dp  <= '-';
 --     usb_2_dn <= '-';    
    elsif(switchIn(6)= '1') then
--      usb_2_dp  <= 'X';
--      usb_2_dn <= 'X';    
    elsif(switchIn(7)= '1') then    
--     usb_2_dp  <= 'U';
 --    usb_2_dn <= 'U';        
      else
      
    end if;
     end if;  
  end process kl; 
Если убираю прочерки(--), при любом значении switchIn(переключатель/перемычка для отладки) шина перестает читаться.
В чем подвох?

Share this post


Link to post
Share on other sites
9 часов назад, andrei_moiseev сказал:

 


Советую внимательно ознакомиться с описанием типа STD_LOGIC. Объекты типа STD_LOGIC могут принимать 9 значений: '0', '1', 'Z', '–', 'L', 'H', 'U', 'X', 'W'.
Из них для синтеза можно применять только '0', '1', 'Z', '–'. Остальные нужны только для моделирования.
В Вашем случае принимать данные возможно только тогда, когда Ваша двунаправленная шина в Z состоянии т.е:

            elsif(switchIn(3)= '1') then
                usb_2_dp  <= 'Z';
                usb_2_dn  <= 'Z';    

Соответственно одновременно с переводом данных можете начинать читать шину:

process(clk)
begin
    if (rising_edge(clk_120MHz)) then
        if (switchIn(3)= '1') then   -- Можно читать когда шина в Z состоянии. 
            usb_dn <= usb_2_dn;      -- usb_2_dn входящий, usb_dn - читает
            usb_dp <= usb_2_dp;
        end if;
    end if;
end process;

Ествественно с учетом всех времянок и таймингов. Т.к переводить шину в Z состояние и одновременно её читать - нельзя, поскольку нужно некоторое время чтобы разрядилась паразтная емкость.
В остальных значениях switchIn - вы пишите в шину что-то, а не читаете её.

Share this post


Link to post
Share on other sites
10 часов назад, andrei_moiseev сказал:

тупо

 

10 часов назад, andrei_moiseev сказал:

прога

 

10 часов назад, andrei_moiseev сказал:

прочерки

Мда.

 

Вопрос, как писать двунаправленный порт, на форуме задавался миллион раз. И миллион раз давался ответ. Пользуйтесь поиском.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now