~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 0A74BBBA44242F0C2E4935E00E4DE142__1716430500 ✰
Заголовок документа оригинал.:
✰ Verilog - Wikipedia ✰
Заголовок документа перевод.:
✰ Верилог — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Verilog ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/0a/42/0a74bbba44242f0c2e4935e00e4de142.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/0a/42/0a74bbba44242f0c2e4935e00e4de142__translat.html ✰
Дата и время сохранения документа:
✰ 16.06.2024 19:11:55 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 23 May 2024, at 05:15 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Верилог — Википедия Jump to content

Верилог

Из Википедии, бесплатной энциклопедии

Верилог
Парадигма Структурированный
Разработано Прабху Гоэл , Фил Мурби и Чи-Лай Хуан
Разработчик IEEE
Впервые появился 1984  ( 1984 )
Стабильная версия
ИИЭР 1800-2023 / 6 декабря 2023 г .; 6 месяцев назад ( 06.12.2023 )
Дисциплина набора текста Статический , слабый
Расширения имен файлов .v, .vh
Веб-сайт https://ieeexplore.ieee.org/document/10458102
Диалекты
Верилог-АМС
Под влиянием
Паскаль , Ада , Си , Фортран
Под влиянием
СистемаVerilog

Verilog , стандартизированный как IEEE 1364 , представляет собой язык описания аппаратного обеспечения (HDL), используемый для моделирования электронных систем . Чаще всего он используется при проектировании и проверке цифровых схем на передачи уровне абстракции регистров . [ нужна цитата ] Он также используется при проверке аналоговых схем и схем смешанных сигналов , а также при проектировании генетических схем . [1] В 2009 году стандарт Verilog (IEEE 1364-2005) был объединен со стандартом SystemVerilog , в результате чего был создан стандарт IEEE 1800-2009. С тех пор Verilog официально стал частью языка SystemVerilog. Текущая версия соответствует стандарту IEEE 1800-2023. [2]

Обзор [ править ]

Языки описания оборудования, такие как Verilog, похожи на программного обеспечения языки программирования , поскольку они включают способы описания времени распространения и мощности сигнала (чувствительности). Существует два типа операторов присваивания ; блокирующее присвоение (=) и неблокирующее (<=) присвоение. Неблокирующее присвоение позволяет разработчикам описывать обновление конечного автомата без необходимости объявлять и использовать переменные временного хранения . Поскольку эти концепции являются частью семантики языка Verilog, проектировщики могут быстро писать описания больших схем в относительно компактной и лаконичной форме. На момент появления Verilog (1984 г.) Verilog представлял собой огромное повышение производительности для разработчиков схем, которые уже использовали программное обеспечение для графического захвата схем и специально написанные программы для документирования и моделирования электронных схем .

Разработчики Verilog хотели создать язык с синтаксисом, похожим на язык программирования C , который уже широко использовался при разработке инженерного программного обеспечения . Как и C, Verilog чувствителен к регистру и имеет базовый препроцессор (хотя и менее сложный, чем у ANSI C/C++). ( потока управления Ключевые слова if/else, for, while, case и т. д.) эквивалентны, а приоритет операторов совместим с C. Синтаксические различия включают в себя: требуемую разрядность для объявлений переменных, разграничение процедурных блоков (Verilog использует начало /end вместо фигурных скобок {}) и множество других незначительных отличий. Verilog требует, чтобы переменным был задан определенный размер. В C эти размеры выводятся из «типа» переменной (например, целочисленный тип может быть 32 бита).

Проект Verilog состоит из иерархии модулей . Модули инкапсулируют иерархию дизайна и взаимодействуют с другими модулями через набор объявленных входных, выходных и двунаправленных портов . Внутри модуль может содержать любую комбинацию следующих элементов: объявления сетей/переменных (wire, reg, целое число и т. д.), параллельных и последовательных блоки операторов и экземпляры других модулей (подиерархии). Последовательные операторы помещаются внутри блока начала/конца и выполняются в последовательном порядке внутри блока. Однако сами блоки выполняются одновременно, что делает Verilog языком потоков данных .

Концепция «провода» Verilog состоит как из значений сигналов (4 состояния: «1, 0, плавающий, неопределенный»), так и из уровней сигнала (сильный, слабый и т. д.). Эта система позволяет абстрактно моделировать общие сигнальные линии, когда несколько источников управляют общей сетью. Если провод имеет несколько драйверов, (читаемое) значение провода определяется функцией исходных драйверов и их мощности.

Подмножество операторов языка Verilog является синтезируемым . Модули Verilog, соответствующие синтезируемому стилю кодирования, известному как RTL ( уровень передачи регистров ), могут быть физически реализованы с помощью программного обеспечения синтеза. Программное обеспечение Synthesis алгоритмически преобразует (абстрактный) источник Verilog в список соединений , логически эквивалентное описание, состоящее только из элементарных логических примитивов (И, ИЛИ, НЕ, триггеры и т. д.), которые доступны в конкретной технологии FPGA или СБИС . Дальнейшие манипуляции со списком соединений в конечном итоге приводят к созданию схемы изготовления схемы (например, набора фотомаски для ASIC или файла битового потока для FPGA ).

История [ править ]

Начало [ править ]

Verilog был создан Прабху Гоэлом , Филом Мурби и Чи-Лай Хуангом в период с конца 1983 по начало 1984 года. [3] Чи-Лай Хуан ранее работал над описанием аппаратного обеспечения LALSD, языком, разработанным профессором С.Ю. Су для своей докторской работы. [4] Правообладателем этого процесса, который в то время был собственностью компании, была компания «Automated Integrated Design Systems» (позже переименованная в 1985 году в Gateway Design Automation ). Gateway Design Automation была приобретена Cadence Design Systems в 1990 году. Теперь Cadence обладает полными правами собственности на Verilog компании Gateway и Verilog-XL, HDL-симулятор, который станет фактическим стандартом ( логических симуляторов Verilog ) на следующее десятилетие. Первоначально Verilog предназначался только для описания и моделирования; автоматический синтез подмножеств языка в физически реализуемые структуры (вентили и т. д.) был разработан после того, как язык получил широкое распространение.

Verilog — это сочетание слов «проверка» и «логика». [5]

Верилог-95 [ править ]

В связи с растущим успехом VHDL в то время компания Cadence решила сделать этот язык доступным для открытой стандартизации . Cadence передала Verilog в общественное достояние в рамках организации Open Verilog International (OVI) (теперь известной как Accellera ). Позже Verilog был представлен IEEE и стал стандартом IEEE 1364-1995, обычно называемым Verilog-95.

В то же время Cadence инициировала создание Verilog-A, чтобы обеспечить поддержку стандартов в своем аналоговом симуляторе Spectre . Verilog-A никогда не задумывался как отдельный язык и является подмножеством Verilog-AMS, включающим Verilog-95.

Верилог 2001 [ править ]

Расширения Verilog-95 были отправлены обратно в IEEE, чтобы устранить недостатки, обнаруженные пользователями в исходном стандарте Verilog. Эти расширения стали стандартом IEEE 1364-2001, известным как Verilog-2001.

Verilog-2001 представляет собой значительное обновление Verilog-95. Во-первых, он добавляет явную поддержку цепей и переменных со знаком (дополнения до двух). Раньше авторам кода приходилось выполнять знаковые операции, используя неуклюжие манипуляции на уровне битов (например, бит выполнения простого 8-битного сложения требовал явного описания булевой алгебры для определения его правильного значения). Эту же функцию в Verilog-2001 можно более кратко описать одним из встроенных операторов: +, -, /, *, >>>. Конструкция генерирования-конца генерации (аналогичная конструкции генерации-конца генерации VHDL) позволяет Verilog-2001 управлять созданием экземпляров и операторов с помощью обычных операторов принятия решения (case-if-else). Используя функцию генерации-конца генерации, Verilog-2001 может создавать экземпляры массива экземпляров, контролируя соединение отдельных экземпляров. Файловый ввод-вывод был улучшен за счет нескольких новых системных задач. И, наконец, было внесено несколько синтаксических дополнений для улучшения читаемости кода (например, всегда, @*, переопределение именованного параметра, объявление заголовка функции/задачи/модуля в стиле C).

Verilog-2001 — это версия Verilog, поддерживаемая большинством коммерческих пакетов программного обеспечения EDA .

Верилог 2005 [ править ]

Не путать с SystemVerilog : Verilog 2005 ( стандарт IEEE 1364-2005) состоит из незначительных исправлений, уточнений спецификаций и нескольких новых языковых функций (таких как ключевое слово uwire).

Отдельная часть стандарта Verilog, Verilog-AMS , пытается интегрировать моделирование аналоговых и смешанных сигналов с традиционным Verilog.

SystemVerilog [ править ]

Появление языков проверки оборудования , таких как OpenVera Verisity, и e-язык стимулировало разработку Superlog компанией Co-Design Automation Inc (приобретенной Synopsys ). Основы Superlog и Vera были переданы в дар компании Accellera , которая позже стала стандартом IEEE P1800-2005: SystemVerilog.

SystemVerilog — это расширенная версия Verilog-2005 со множеством новых функций и возможностей, облегчающих проверку и моделирование проекта. В 2009 году языковые стандарты SystemVerilog и Verilog были объединены в SystemVerilog 2009 (стандарт IEEE 1800-2009).

Обновления с 2009 года [ править ]

Стандарт SystemVerilog впоследствии был обновлен в 2012 году. [6] 2017, [7] и последний раз в декабре 2023 года. [2]

Пример [ править ]

Ниже приведен простой пример двух шлепанцев :

модуль   верхнего уровня  (  часы  ,  сброс  ); 
    входные   часы  ; 
   входа    сброс  ; 

    рег   флоп1  ; 
    рег   флоп2  ; 

    всегда   @   (  posege   сброс   или   posege   часы  ), 
     если   (  сброс  ) 
       start 
         flop1   <=   0  ; 
          флоп2   <=   1  ; 
        конец 
     еще 
       начало 
         флоп1   <=   флоп2  ; 
          флоп2   <=   флоп1  ; 
        Конечный 
 модуль 

The <=Оператор в Verilog — это еще один аспект того, что он является языком описания оборудования, в отличие от обычного процедурного языка. Это известно как «неблокирующее» назначение. Его действие не регистрируется до тех пор, пока не будет выполнен блок Always. Это означает, что порядок присваиваний не имеет значения и даст один и тот же результат: flop1 и flop2 будут менять местами значения каждый такт.

Другой оператор присваивания =называется назначением блокировки. Когда =используется присвоение, для целей логики целевая переменная обновляется немедленно. Если бы в приведенном выше примере операторы использовали = блокирующий оператор вместо <=, flop1 и flop2 не поменялись бы местами. Вместо этого, как и в традиционном программировании, компилятор понимает, что нужно просто установить flop1 равным flop2 (и впоследствии игнорировать избыточную логику, чтобы установить flop2 равным flop1).

Ниже приведен пример схемы счетчика :

модуль   Div20x   (  rst  ,   clk  ,   cet  ,   cep  ,   count  ,   tc  ); 
  // TITLE 'Счетчик деления на 20 с разрешениями' 
 // включить CEP - это только разрешение часов 
 // включить CET - это разрешение часов и 
 // включить выход TC 
 // счетчик с использованием 

 параметра   языка Verilog size   =   5  ; 
 параметра    длина   =   20  ; 

  введите   сначала  ;    // Эти входы/выходы представляют 
 вход   clk  ;    // подключения к модулю. 
  входной   набор  ; 
  введите   cep  ; 

  вывод   [  размер  -  1  :  0  ]   счетчик  ; 
  вывод   ТК  ; 

  reg   [  размер  -  1  :  0  ]   count  ;    // Сигналы, назначенные 
                       // внутри блока Always 
                       // (или начального) 
                       // должны быть типа reg 

 Wire   tc  ;    // Другие сигналы относятся к типу Wire 

 // Оператор Always, представленный ниже, является 
 оператором параллельного // выполнения, который 
 // выполняется каждый раз, когда сигналы 
 // rst или clk переходят от низкого уровня к высокому 

 всегда   @   (  posege   clk   или   posege   rst  ) 
   , если   (  rst  )   cntr 
     // Это вызывает сброс счетчика   <=   {  size  {  1  'b0  }}; 
    else 
   if   (  cet   &&   cep  )   // Включает оба true 
     start 
       if   (  count   ==   length  -  1  ) 
         count   <=   {  size  {  1  'b0  }}; 
        иначе 
         count   <=   count   +   1  'b1  ; 
      end 

 // значение tc постоянно присваивается 
 // значение выражения 
 Assign   tc   =   (  cet   &&   (  count   ==   length  -  1  )); 

  конечный модуль 

Пример задержки:

... 
 reg   a  ,   b  ,   c  ,   d  ; 
  провод   е  ; 
  ... 
 всегда   @(  b   или   e  ) 
   Begin 
     a   =   b   &   e  ; 
      б   =   а   |    б  ; 
      #  5   с   =   б  ; 
      д   знак равно   #  6   с   ^   е  ; 
    конец 

Предложение Always выше иллюстрирует другой тип использования метода, т.е. он выполняется всякий раз, когда изменяется какой-либо из объектов в списке (b или e ) . При одном из этих изменений a немедленно присваивается новое значение, а из-за назначения блокировки впоследствии b присваивается новое значение (с учетом нового значения a ). После задержки в 5 единиц времени c присваивается значение b , а значение c ^ e скрывается в невидимом хранилище. Затем, спустя еще 6 единиц времени, d присваивается спрятанное значение.

Сигналы, которые подаются изнутри процесса (начальный блок или блок Always), должны иметь тип reg . Сигналы, поступающие извне процесса, должны быть типа провод . Ключевое слово reg не обязательно подразумевает аппаратный регистр.

Определение констант [ править ]

Определение констант в Verilog поддерживает добавление параметра ширины. Основной синтаксис:

< Ширина в битах >'< основная буква >< число >

Примеры:

  • 12'h123 – Шестнадцатеричное число 123 (с использованием 12 бит)
  • 20'd44 – Десятичное число 44 (используется 20 бит – расширение 0 выполняется автоматически)
  • 4'b1010 – двоичное число 1010 (с использованием 4 битов)
  • 6'o77 – восьмеричное число 77 (с использованием 6 бит)

Синтезируемые конструкции [ править ]

В Verilog есть несколько операторов, не имеющих аналогов на реальном оборудовании, например команда $display. Однако представленные здесь примеры представляют собой классическое (и ограниченное) подмножество языка, имеющее прямое сопоставление с реальными вентилями.

// Примеры мультиплексирования — три способа сделать одно и то же. 

  // В первом примере используется непрерывное 
 присваивание   out  ; 
  назначить   выход   =   выбрать   ?    а   :   б  ; 

  // во втором примере используется процедура 
 , // выполняющая то же самое. 

  зарегистрируйтесь   ; 
  всегда   @(  a   или   b   или   sel  ) 
   Begin 
     Case  (  sel  ) 
       1  'b0  :   out   =   b  ; 
        1  'b1  :   out   =   a  ; 
      endcase 
   end 

 // Наконец — вы можете использовать if/else в 
 // процедурной структуре. 
  зарегистрируйтесь   ; 
  всегда   @(  a   или   b   или   sel  ), 
   если   (  sel  ) 
     out   =   a  ; 
    еще 
     выход   =   б  ; 

Следующая интересная конструкция — прозрачная защелка ; он передает входной сигнал на выход, когда сигнал стробирования установлен на «сквозной», захватывает входной сигнал и сохраняет его при переходе сигнала стробирования на «удержание». Выходной сигнал останется стабильным независимо от входного сигнала, пока затвор установлен в положение «удержание». В приведенном ниже примере «сквозной» уровень ворот будет тогда, когда значение предложения if истинно, т.е. ворота = 1. Это читается как «если ворота истинны, сигнал подается на latch_out непрерывно». Если предложение if ложно, последнее значение в latch_out останется и не зависит от значения din.

// Пример прозрачной фиксации 

 reg   latch_out  ; 
  всегда   @(  gate   или   din  ), 
   если  (  gate  ) 
     latch_out   =   din  ;    // Прохождение состояния 
     // Обратите внимание, что else здесь не требуется.   Переменная 
     // latch_out будет следовать значению din, пока ворота 
     // находятся на высоком уровне.   Когда ворота становятся низкими, latch_out останется постоянным. 

Триггер следующий важный шаблон; в Verilog D-флоп является самым простым, и его можно смоделировать как:

рег   q  ; 
  всегда   @(  posege   clk  ) 
   q   <=   d  ; 

Важным моментом, на который следует обратить внимание в этом примере, является использование неблокирующего присваивания. Основное практическое правило — использовать <= есть оператор posege или negedge , когда в предложении Always .

Вариант D-флопа — с асинхронным сбросом; существует соглашение, согласно которому состояние сброса будет первым предложением if в операторе.

рег   q  ; 
  всегда   @(  posege   clk   или   posege   reset  ), 
   если  (  reset  ) 
     q   <=   0  ; 
    иначе 
     q   <=   d  ; 

Следующий вариант включает в себя как асинхронный сброс, так и асинхронное условие установки; снова вступает в силу соглашение, т.е. за термином сброса следует установленный термин.

рег   q  ; 
  всегда   @(  posege   clk   или   posege   reset   или   posege   set  ), 
   если  (  reset  ) 
     q   <=   0  ; 
    иначе 
   , если  (  установить  ) 
     q   <=   1  ; 
    иначе 
     q   <=   d  ; 

Примечание. Если эта модель используется для моделирования триггера установки/сброса, могут возникнуть ошибки моделирования. Рассмотрим следующую тестовую последовательность событий. 1) сброс становится высоким 2) clk становится высоким 3) set становится высоким 4) clk снова становится высоким 5) сброс переходит в низкий уровень, а затем 6) устанавливается низкий уровень. Предположим, что установка отсутствует, и удерживайте нарушения.

В этом примере оператор Always @ сначала будет выполняться при возникновении нарастающего фронта сброса, что приведет к тому, что q станет равным 0. В следующий раз, когда блок Always будет выполняться, будет нарастающий фронт clk, который снова будет удерживать q на значении 0. Затем блок Always выполняется, когда set становится высоким, что, поскольку сброс высокий, заставляет q оставаться на уровне 0. Это условие может быть правильным, а может и не быть, в зависимости от фактического триггера. Однако это не главная проблема данной модели. Обратите внимание, что когда значение сброса становится низким, этот набор все еще остается высоким. В реальном триггере это приведет к тому, что выходной сигнал перейдет в 1. Однако в этой модели этого не произойдет, поскольку блок Always запускается нарастающими фронтами установки и сброса, а не уровнями. Для триггеров установки/сброса может потребоваться другой подход.

Последний базовый вариант — это тот, который реализует D-флоп с мультиплексором, подающим на его вход. Мультиплексор имеет d-вход и обратную связь от самого флопа. Это обеспечивает функцию стробируемой нагрузки.

// Базовая структура с ЯВНЫМ путем обратной связи 
 всегда   @(  posege   clk  ) 
   if  (  gate  ) 
     q   <=   d  ; 
    иначе 
     q   <=   q  ;    // явный путь обратной связи 

 // Более распространенная структура ПРЕДПОЛАГАЕТ, что обратная связь присутствует 
 // Это безопасное предположение, поскольку именно так 
 ее // интерпретирует аппаратный компилятор.   Эта структура 
 // очень похожа на защелку.   Различия заключаются в 
 // '''@(posege clk)''' и неблокирующем '''<=''' 
 // 
 всегда   @(  posege   clk  ) 
   if  (  gate  ) 
     q   <=   d  ;    // мультиплексор «else» «подразумевается» 

Обратите внимание, что в этом описании не упоминаются «начальные» блоки. В этой структуре существует разделение между инструментами синтеза FPGA и ASIC. Инструменты FPGA допускают начальные блоки, в которых устанавливаются значения регистров вместо использования сигнала «сброса». Инструменты синтеза ASIC не поддерживают такое утверждение. Причина в том, что исходное состояние FPGA загружается в таблицы памяти FPGA. ASIC — это реальная аппаратная реализация.

Первоначально и всегда [ править ]

Существует два отдельных способа объявления процесса Verilog. Это ключевые слова всегда и начальные . Ключевое слово всегда указывает на автономный процесс. Начальное ключевое слово указывает , что процесс выполняется ровно один раз. Обе конструкции начинают выполнение во время симулятора 0 и обе выполняются до конца блока. Как только блок Always достиг своего конца, он перепланируется (снова). Распространенным заблуждением является мнение, что начальный блок будет выполняться раньше блока Always. Фактически, лучше думать о начальном блоке как о частном случае блока Always , который завершается после первого завершения.

//Примеры: 
 начальное 
   начало 
     a   =   1  ;    // Присвоение значения регистру a в момент времени 0 
     #  1  ;    // Ожидание 1 единица времени 
     b   =   a  ;    // Присваиваем значение reg a reg b 
   end 

 всегда   @(  a   или   b  )   // Каждый раз при ИЗМЕНЕНИИ a или b запускаем процесс 
 start 
   if   (  a  ) 
     c   =   b  ; 
    иначе 
     d   =   ~  b  ; 
  end   // С этим блоком покончено, теперь возвращаемся к началу (т.е. @ event-control) 

 всегда   @(  posege   a  )  // Запускаем всякий раз, когда регистр a имеет изменение от низкого к высокому 
   a   <=   b  ; 

Это классическое использование этих двух ключевых слов, но есть и два важных дополнительных применения. Наиболее распространенным из них является ключевое слово всегда без списка чувствительности @(...) . Всегда можно использовать, как показано ниже:

всегда 
   начинать   // Всегда начинать выполнение в момент 0 и НИКОГДА не останавливать 
     clk   =   0  ;    // Установите clk в 0 
     #  1  ;    // Ждем 1 единицу времени 
     clk   =   1  ;    // Установите clk на 1 
     #  1  ;   1 единицу времени 
    // Ждем конца   // Продолжаем выполнение, поэтому продолжаем с начала 

Ключевое слово Always действует аналогично конструкции языка C while(1) {..} в том смысле, что оно будет выполняться вечно.

Другое интересное исключение — использование ключевого слова «initial» с добавлением ключевого слова «forever» .

Пример ниже функционально идентичен приведенному выше примеру Always .

начальный   навсегда   // Начинаем в момент времени 0 и повторяем начало/конец вечно. 
   Begin 
     clk   =   0  ;    // Установите clk в 0 
     #  1  ;    // Ждем 1 единицу времени 
     clk   =   1  ;    // Установите clk на 1 
     #  1  ;   1 единицы времени 
    // Ожидание окончания 

Разветвление/присоединение [ править ]

Пара fork /join используется Verilog для создания параллельных процессов. Все операторы (или блоки) между парой разветвления/объединения начинают выполнение одновременно после того, как поток выполнения достигает разветвления . Выполнение продолжается после соединения после завершения самого продолжительного оператора или блока между разветвлением и соединением .

начальная 
   вилка 
     $write  (  "A"  );    // Печать символа A 
     $write  (  "B"  );    // Печать символа B 
     начало 
       #  1  ;    // Подождем 1 единицу времени 
       $write  (  "C"  );    // Печать символа C 
     end 
   join 

Как написано выше, можно распечатать последовательности «ABC» или «BAC». Порядок симуляции между первой $write и второй $write зависит от реализации симулятора и может быть целенаправленно рандомизирован симулятором. Это позволяет моделировать как случайные условия гонки, так и намеренное недетерминированное поведение.

Обратите внимание, что VHDL не может динамически создавать несколько процессов, таких как Verilog. [8]

Условия гонки [ править ]

Порядок выполнения в Verilog не всегда гарантируется. [9] Лучше всего это можно проиллюстрировать классическим примером. Рассмотрим фрагмент кода ниже:

начальный 
   а   =   0  ; 

  начальный 
   б   =   а  ; 

  начальное 
   начало 
     1  ; 
      $display  (  "Значение a=%d Значение b=%d"  ,  a  ,  b  ); 
    конец 

Что будет распечатано для значений a и b? В зависимости от порядка выполнения начальных блоков это может быть ноль и ноль или попеременно ноль и какое-то другое произвольное неинициализированное значение. Оператор $display всегда будет выполняться после завершения обоих блоков присваивания из-за задержки №1.

Операторы [ править ]

Примечание. Эти операторы показаны не в порядке приоритета.

Тип оператора Символы оператора Операция выполнена
Побитовый ~ Побитовое НЕ (дополнение до 1)
& Побитовое И
| Побитовое ИЛИ
^ Побитовое исключающее ИЛИ
~^ или ^~ Побитовое исключающее ИЛИ
Логический ! НЕТ
&& И
|| ИЛИ
Снижение & Сокращение И
~& Сокращение NAND
| Сокращение ИЛИ
~| Сокращение НОР
^ Сокращение XOR
~^ или ^~ Сокращение XNOR
Арифметика + Добавление
- Вычитание
- дополнение до 2
* Умножение
/ Разделение
** Возведение в степень (*Verilog-2001)
Реляционный > Больше чем
< Меньше, чем
>= Больше или равно
<= Меньше или равно
== Логическое равенство (битовое значение 1'bX удаляется из сравнения)
!= Логическое неравенство (битовое значение 1'bX удаляется из сравнения)
=== Логическое равенство с 4 состояниями (битовое значение 1'bX воспринимается как буквальное)
!== Логическое неравенство с 4 состояниями (битовое значение 1'bX воспринимается как буквальное)
Сдвиг >> Логический сдвиг вправо
<< Логический сдвиг влево
>>> Арифметический сдвиг вправо (*Verilog-2001)
<<< Арифметический сдвиг влево (*Verilog-2001)
Конкатенация {, } Конкатенация
Репликация {н{м}} Повторить значение m n раз
Условный ? : Условный

Четырёхзначная логика [ править ]

Стандарт IEEE 1364 определяет четырехзначную логику с четырьмя состояниями: 0, 1, Z ( высокое сопротивление ) и X (неизвестное логическое значение). Для конкурирующего VHDL существует специальный стандарт многозначной логики под названием IEEE 1164 с девятью уровнями. [10]

Системные задачи [ править ]

Доступны системные задачи для выполнения простых операций ввода-вывода и различных функций измерения конструкции во время моделирования. Все системные задачи имеют префикс $ , чтобы отличить их от пользовательских задач и функций. В этом разделе представлен краткий список наиболее часто используемых задач. Это ни в коем случае не полный список.

  • $display – Выводит на экран строку, за которой автоматически следует новая строка.
  • $write – Распечатайте, чтобы отобразить строку без символа новой строки.
  • $swrite – вывести в переменную строку без символа новой строки.
  • $sscanf – Считать из переменной строку указанного формата. (*Верилог-2001)
  • $fopen – Открыть дескриптор файла (чтение или запись)
  • $fdisplay – Распечатать строку из файла, за которой следует автоматический перевод строки.
  • $fwrite – Распечатать строку без символа новой строки.
  • $fscanf – Считать из файла строку указанного формата. (*Верилог-2001)
  • $fclose – Закрыть и освободить дескриптор открытого файла.
  • $readmemh – Считать содержимое шестнадцатеричного файла в массив памяти.
  • $readmemb – Считывает содержимое двоичного файла в массив памяти.
  • $monitor – Распечатать все перечисленные переменные при любом изменении значения.
  • $time – Значение текущего времени моделирования.
  • VCD ( дамп изменения значения ). $dumpfile – объявить имя выходного файла формата
  • $dumpvars – Включить и выгрузить переменные.
  • $dumpports – включить и выгрузить переменные в формате Extended-VCD.
  • $random – Возвращает случайное значение.

Программный языковой интерфейс (PLI) [ править ]

PLI предоставляет программисту механизм передачи управления от Verilog к программной функции, написанной на языке C. Он официально признан устаревшим стандартом IEEE Std 1364-2005 в пользу нового процедурного интерфейса Verilog , который полностью заменяет PLI.

PLI (теперь VPI) позволяет Verilog взаимодействовать с другими программами, написанными на языке C, такими как программы , симуляторы набора команд микроконтроллера тестовые , отладчики и так далее. Например, он предоставляет функции C tf_putlongp() [11] и tf_getlongp()[12] которые используются для записи и чтения 64-битного целочисленного аргумента текущей задачи или функции Verilog соответственно. Для 32-битных целых чисел tf_putp()[13] и tf_getp()[14] используются.

Программное обеспечение для моделирования [ править ]

Информацию о симуляторах Verilog см. в списке симуляторов Verilog .

См. также [ править ]

Дополнительный материал [ править ]

Похожие языки [ править ]

Ссылки [ править ]

  1. ^ Нильсен А.А., Дер Б.С., Шин Дж., Вайдьянатан П., Параланов В., Стрыхальский Е.А., Росс Д., Денсмор Д., Фойгт К.А. (2016). «Автоматизация проектирования генетических схем» . Наука . 352 (6281): аас7341. дои : 10.1126/science.aac7341 . ПМИД   27034378 .
  2. ^ Перейти обратно: а б IEEE 1800-2023, Утвержденный IEEE проект стандарта для SystemVerilog — унифицированный язык проектирования, спецификации и проверки аппаратного обеспечения , IEEE , 2023 г.
  3. ^ «Изобретатель Verilog получил награду Кауфмана от EDA» . ЭЭ Таймс . 7 ноября 2005 г.
  4. ^ Хуан, Чи-Лай; Су, С.И.Х. «Подходы к проектированию систем автоматизированной логики с использованием языка описания аппаратного обеспечения». Материалы Международного компьютерного симпозиума 1980 г., Тайбэй, Тайвань, декабрь 1980 г. стр. 772–79О. OCLC   696254754 .
  5. ^ «Устная история Филипа Рэймонда «Фила» Мурби» (PDF) . Музей истории компьютеров. 22 апреля 2013 г. стр. 23–25.
  6. ^ IEEE 1800-2012 , IEEE , 2012 г.
  7. ^ IEEE 1800-2017 , IEEE , 2017 г.
  8. ^ Каммингс, Клиффорд Э. (2003). «SystemVerilog – это слияние Verilog и VHDL?» (PDF) . SNUG Бостон 2003.
  9. ^ Сазерленд, Стюарт (2002). Верилог — 2001 . Бостон, Массачусетс: Springer US. п. 16. дои : 10.1007/978-1-4615-1713-9 . ISBN  978-1-4613-5691-2 . Начальная процедура в Verilog не выполняется перед симуляцией. Он начинает выполнение в нулевой момент времени, когда начинается моделирование, и выполняется параллельно с другими начальными или постоянными процедурами. При наличии нескольких начальных процедур не существует определенного порядка активации процедур.
  10. ^ Миллер, Д. Майкл; Торнтон, Митчелл А. (2008). Многозначная логика: понятия и представления . Обобщающие лекции по цифровым схемам и системам. Том. 12. Морган и Клейпул. ISBN  978-1-59829-190-2 .
  11. ^ «Стандартный язык описания оборудования IEEE Verilog®» (PDF) . п. 652(25,38) . Проверено 12 ноября 2023 г.
  12. ^ «Стандартный язык описания оборудования IEEE Verilog®» (PDF) . п. 628(25,28) . Проверено 12 ноября 2023 г.
  13. ^ «Стандартный язык описания оборудования IEEE Verilog®» (PDF) . п. 653(25,39) . Проверено 25 ноября 2023 г.
  14. ^ «Стандартный язык описания оборудования IEEE Verilog®» (PDF) . п. 631(25,21) . Проверено 25 ноября 2023 г.
Примечания

Внешние ссылки [ править ]

Разработка стандартов [ править ]

Языковые расширения [ править ]

  • Verilog AUTOs — метакомментарий с открытым исходным кодом, используемый отраслевыми IP для упрощения поддержки кода Verilog.
Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 0A74BBBA44242F0C2E4935E00E4DE142__1716430500
URL1:https://en.wikipedia.org/wiki/Verilog
Заголовок, (Title) документа по адресу, URL1:
Verilog - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)