Jump to content

    

Strob

Участник
  • Content Count

    180
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Strob

  • Rank
    Частый гость

Recent Profile Visitors

1617 profile views
  1. Надо глянуть, выглядит как аналог сигаси. Это хорошо.
  2. Про динамическое отключение-подключение не смогу ответить. Возможно нельзя, возможно не знаю как. Инкапсуляции в vhdl действительно нет. И наверное не будет никогда. Наследования в vhdl возможны, через ключевое слово new. Поддержку никогда не проверял. Возможно не поддержано инструментами. Полиморфизм в vhdl существует как в виде передачи через генерики(в т.ч. типов, пэкэджей и функций - vhdl 2008) так и через анонимные типы(vhdl 2019) или неопределенные типы(сейчас не помню появилось ли это в 2008, или раньше было).
  3. Данный источник мягко говоря не точен. Да по VHDL вообще русскоязычные источники как специально сделаны так, чтобы все на SV переходили. Тихий ужас. пункт 1.3.5 стандарта раскрывает смысл этой цитаты из вступления. Вот пример настоящего VHDL 2008. library ieee; context ieee.ieee_std_context; entity slave is port ( clk, reset : in std_ulogic; req : in std_ulogic; ack : out std_ulogic; ... ); end entity slave; architecture pipelined of slave is signal req_cnt, ack_cnt : unsigned(3 downto 0); default clock is rising_edge(clk); property all_requests_acked is forall C in {0 to 15}: always {req and req_cnt = C} |=> {[*0 to 99]; ack and ack_cnt = C}; begin req_ack_counter : process (clk) is begin if rising_edge(clk) then if reset = '1' then req_cnt <= "0000"; ack_cnt <= "0000"; else if req = '1' then req_cnt <= req_cnt + 1; end if; if ack = '1' then ack_cnt <= ack_cnt + 1; end if; end if; end if; end process req_ack_counter; ... assert all_requests_acked; end architecture pipelined; Догонять - как будто это плохо. Насчет костылей, вопрос крайне сложный. В VHDL по сути все представлено в виде библиотек. Это его путь. =) Консервативные языки vs. Быстроразвивающиеся языки - это еще более древний, лютый и бессмысленный спор. И для этого есть библиотека )) UVVM. Как бы там ни было, спорить бессмысленно, SV лучше поддержан в части верификации, чем VHDL, и это существенно более важная особенность, нежели выяснение чего там нет или есть в языке. VHDL 2019 вообще почти все нововведения сконцентрировал вокруг верификации. А толку то, если его поддержку мы может и увидим году в 2040.
  4. И в мыслях не было кого-то в чем то обвинять. Как раз protected types и были введены для того, чтобы максимально приблизиться к классам по функционалу. При очень большом желании найти строгие совпадения/несовпадения можно очень быстро улететь в бессмысленный холивар. Т.к. и в V/SV отсутствует ряд возможностей VHDL. Сonstraint based random verification и functional coverage присутствуют в виде библиотек. PSL именно "интегрировали" в VHDL 2008.
  5. Реализуются через record'ы. Есть нюансы. В vhdl 2019 даже более продвинуто(атрибут converse позволяет автоматически объявить порты инверсного направления, плюс появился прямой аналог modport - view), чем в SV, однако поддержку 2019-го ждать наверное еще долго.
  6. Классы и констрейны(если не считать констрэйном конструкцию вида range a to b) вполне реализуются через package и protected type. Не один в один. Но функционал повторяем. PSL есть
  7. Проблема с vhdl не в языке, на данный момент в нем есть все, что и в sv. А вот с поддержкой в сапрах "бяда-бяда"
  8. Странно что Вы наткнулись на sla, которая если ещё не удалена из языка, то как минимум не используется(на память, она кажется только с bit_vector работает). Но при этом не наткнулись на shift_left, shift_right, sll, srl.
  9. Сигаси это эклипс. Эклипсовский плагин для тикля ставится. Ну, как то оно работает.
  10. Какой-то сборник вредных советов, как по мне... Задержки используются в симуляции. В ISE ищите в верхнем левом углу. Там где иерархия проекта. Одна из вкладок - симуляция. Точнее уже и не вспомню.
  11. Вектора разные бывают. Для библиотеки numeric_std, вектора signed и unsigned могут использоваться в арифметических операциях. Поэтому в integer ничего преобразовывать не надо.
  12. Интересно, синтезатор поймет, что это сумматор и задействует соответствующие аппаратные ресурсы или все на лутах и обычных интерсоннектах разведет?
  13. process(clock) begin if rising_edge(clock) then c <= a - b when z else a + b; end if; end process; Как то так не пробовали? Писал по памяти, может надо c <= a - b when ??z else a + b; Зависит от контекста
  14. А что за косяк? С 2018 я сразу на 2020.1 прыгал. Вроде проблем не было.