2015-01-03 3 views
0

Im пытается запрограммировать что-то довольно простое с помощью «VHDL». Но Im застрял с ним в течение нескольких часов, и я не могу найти способ заставить его работать.VHDL - не соответствует стандарту flipflop

Im пытается найти способ использовать один и тот же сигнал в другом процессе или объединить их в один процесс. Использование сигнала в разных процессах невозможно, и если я объединю их в один процесс, я получаю сообщение об ошибке «Не соответствует стандартным триггерам». Я надеюсь, что кто-нибудь может помочь мне и сказать, как я могу это исправить.

Пример кода;

process(scan_ready,rc5_ready) 
variable welkescan : std_logic_vector(1 downto 0); 
begin 
    if (scan_ready' event and scan_ready = '0') and not((rc5_ready' event and rc5_ready = '0')) then 
     welkescan := "01"; 
     visualisatiegebruikt <= "0001"; 
     visualisatiecode <= scan_code; 
    elsif (rc5_ready' event and rc5_ready = '0') and not((scan_ready' event and scan_ready = '0')) then 
     welkescan := "10"; 
     visualisatiegebruikt <= "0010"; 
     visualisatiecode <= scan_con; 
    else 
     welkescan := "00"; 
    end if; 

    if ((welkescan = "01" and scan_code = "01110010") or (welkescan = "10" and scan_code = "00100001")) and (pwm_on /= "11111100") then 
     pwm_on <= pwm_on + 28; 
     visualisatiepwm <= visualisatiepwm + "0001"; 
    elsif ((welkescan = "01" and scan_code = "01110101") or (welkescan = "10" and scan_code = "00100000")) and (pwm_on /= "00000000") then 
     pwm_on <= pwm_on - 28; 
     visualisatiepwm <= visualisatiepwm - "0001"; 
    end if; 
end process;  

Я также попытался пример кода:

process(scan_ready) 
begin 
    if scan_ready' event and scan_ready = '0' then 
     visualisatie <= "0001"; -- 1 op display => toetsenbord 
     scanwaarde(3 downto 0) <= scan_code(3 downto 0); 
     scanwaarde(7 downto 4) <= scan_code(7 downto 4); 
     if scan_code = "01110010" and pwmaansturen /= "11111100" then 
      pwmaansturen <= pwmaansturen + 28; 
      visualisatiepwm <= visualisatie + "0001"; 
     elsif scan_code = "01110101" and pwmaansturen /= "00000000" then 
      pwmaansturen <= pwmaansturen - 28; 
      visualisatiepwm <= visualisatie - "0001"; 
     elsif scan_code = "01110100" then 
      pwmaansturen <= "11111100"; 
      visualisatiepwm <= "1001"; 
     elsif scan_code = "01101011" then 
      pwmaansturen <= "00000000"; 
      visualisatiepwm <= "0000"; 
     end if; 
    end if; 
end process;  

process(rc5_ready) 
    begin 

    if rc5_ready' event and rc5_ready = '0' then 
     visualisatie <= "0010"; -- 2 op display => afstandsbediening 
     scanwaarde(3 downto 0) <= scan_con(3 downto 0); 
     scanwaarde(7 downto 4) <= scan_con(7 downto 4); 
     if scan_con = "00100001" and pwmaansturen /= "11111100" then 
      pwmaansturen <= pwmaansturen + 28; 
      visualisatiepwm <= visualisatie + "0001"; 
     elsif scan_con = "00100000" and pwmaansturen /= "00000000" then 
      pwmaansturen <= pwmaansturen - 28; 
      visualisatiepwm <= visualisatie - "0001"; 
     elsif scan_con = "00010110" then 
      pwmaansturen <= "11111100"; 
      visualisatiepwm <= "1001"; 
     elsif scan_con = "00010111" then 
      pwmaansturen <= "00000000"; 
      visualisatiepwm <= "0000"; 
     end if; 
    end if; 
end process; 

Я надеюсь, что кто-то может мне помочь. Приветствия.

+0

Вы моделировали свой дизайн? Какую цепочку инструментов вы используете? Что такое платформа назначения (поставщик, семейство устройств fpga, ...)? – Paebbels

+0

Я использую решетчатый алмаз, fpga, can not simulate, потому что у меня все еще есть эта ошибка. – Mech

+0

Какой тип моделирования (поведенческий, постсинтез, почтовая карта, почтовое место и маршрут) вы используете? Поведенческая симуляция не должна знать о реальных типах флип-флопов. – Paebbels

ответ

1

Этот код имеет несколько проблем.

Прежде всего, этот код не синтезируется. Используя «языки описания аппаратных средств», которые были сделаны для моделирования, для реального описания аппаратного обеспечения и синтеза требуется, чтобы разработчик использовал несколько шаблонов кодирования, чтобы инструменты могли преобразовать его в сетевые списки и ворота.

Основные причины unsynthesizable кода:

  1. Вы не можете и два тактовые события. Когда это условие должно быть истинным?
  2. Вы не можете использовать not(clock'event ...).

Другие советы и вопросы:

  • Почему вы используете падающий фронт события?
    В общих конструкциях используются события фронтовых фронтов. Не каждая платформа имеет встроенную поддержку для сбрасываемых фронтов.
  • Есть scan_ready и rc5_ready два тактовых сигнала?
    • Если да: вы создаете проект с несколькими часовыми доменами, для чего требуются правильные схемы синхронизации часов и другие сотрудники, чтобы устранить несколько сбоев в вашем дизайне.
    • Если нет: использование обнаружения восходящего/спадающего фронтов на нечасовых сигналах не рекомендуется. Это будет означать, что ваш дизайн асинхронен с вашими системными часами, что также требует кросс-часовых схем.
+0

Ответил: D – Mech

+0

Решил, спасибо – Mech

Смежные вопросы