Поиск

Полнотекстовый поиск:
Где искать:
везде
только в названии
только в тексте
Выводить:
описание
слова в тексте
только заголовок

Рекомендуем ознакомиться

'Расписание'
(кр.) 15.15 ФМФ, ФХ 5 к. (син.) 17.00 ФМФ, ФХ 5 к. 8.00 ФТПО, ТН к. 11.30 ИЭУФ, БС к. 11.30 ИФФ, РФ 5 к. 15.15 БХФ, Х 4 к. 08.00 ФТПО, ТН 3 к....полностью>>
'Учебник'
2. Гражданин Р. заключил с фирмой «Надежный замок» договор об установке межкомнатных дверей. Бригада монтажников произвела соответствующие работы, кач...полностью>>
'Документ'
Экстракторы для удаления поврежденного крепежа JONNESWAY® предназначены для проведения работ по демонтажу шпилек, болтов, винтов и другого, подобного ...полностью>>
'Документ'
Основной кирпичный корпус, 4 этажа, 3 подъезда (около 120 мест): 1,2,3,4 комнатные номера квартирного типа с размещением от 1 до 4 чел. в каждой комна...полностью>>

Главная > Документ

Сохрани ссылку в одной из сетей:
Информация о документе
Дата добавления:
Размер:
Доступные форматы для скачивания:

Операторы :

Синтаксис операторов в языке Verilog подобен синтаксису языка программирования С. Отсутствуют (к сожалению) операторы ++, -- и все операторы модификации вида (операция)=, например, *=, ^= и т.п. Но в то же время существуют логические операторы полезные для моделирования цифровых схем: при одинаковом синтаксисе (\, ~|, ^, ~^, & ~&) данные операторы могут быть битовыми (bitwize) и работать с двумя операндами или операторами свертки (reduction) и работать с одним операндом. Тип выполняемой операции определяется по положению оператора в выражении. Кроме логических операций языком поддерживаются и арифметические операции, но по поводу синтезируемости выражений с арифметическими операторами следует ознакомиться с документацией на средства синтеза. Для эффективной реализации (синтеза) арифметических выражений в «железе», возможно, потребуется приобретать специальные средства или библиотеки для datapath элементов.

Рассмотрим применение операторов на примере.

module op_test;

reg [3:0] D0,D1,D2,D3;

reg [3:0] A,B,C,D; //Verilog case-sensitive

reg a,b,c,d; // А и а – различные переменные

initial

begin

D0=4'b0;

D1=4'b1111;

D2=4'b1010;

D3=4'b01xz;

A=D1~^D2; // bitwise операция – два операнда

a=~^D2; // reduction операция – один операнд

B=D0^D3;

b=^D3;

C=D2&D3;

c=&D3;

D=D2|D3;

d=|D3;

$display("A=%b a=%b B=%b b=%b C=%b c=%b D=%b d=%d",A,a,B,b,C,c,D,d);

end

endmodule

Полученный результат будет выглядеть так:

Highest level modules:

op_test

A=1010 a=1 B=01xx b=x C=00x0 c=0 D=111x d=1

При выполнении логических и битовых операций состояние с высоким импедансом (z) воспринимается как неопределенное (х). При моделировании комбинаторная логика обычно способствует распространению х, но если, например, один из входов элемента И (AND) подан 0, то независимо от значения на других входах на выходе будет 0. Это иллюстрируют полученные в примере значения С и с.

В языке присутствует условный оператор ?: , который работает также как и в языке С. Таким образом, простейшей записью мультиплексора из 2 в 1 является:

assign Y=(SEL)?A:B;

Список операторов языка Verilog.

{} concatenation

+-*/ arithmetic

% modulus

> >= < <= relational

! logical negation

&& logical and

|| logical or

== logical equality

!= logical inequality

=== case equality *

!== case inequality *

~ bit-wise negation

& bit-wise and

| bit-wise inclusive or

^ bit-wise exclusive or

^~ or ~^ bit-wise equivalence

& reduction and

~& reduction nand

| reduction or

~| reduction nor

^ reduction xor

~^ or ^~ reduction xnor

<< shift left

>> shift right

<<< arithmetic shift left

>>> arithmetic shift right

? : conditional

Операторы помеченные * будут рассмотрены при рассмотрении поведенческих конструкциях.

Часть операторов повторяется, например, << и <<< выполняют одинаковое действие, а, например, последовательное выполнение ~ и ^ имеет такое же значение как и ^~ или ~^ , но эта табличка стандартна, и я привожу ее без изменений.

Применяться операторы могут как к цепям (wire) , так сигналам (reg) и переменным. Различия состоят в различных типах присваивания (не путать с := и <= в VHDL). Для цепей, которые являются моделью физического соединения (провода), требуется подключение непрерывного воздействия, которое моделируется непрерывным (continuous) присвоением. Значения же регистров и переменных могут изменяться в результате процедурных действий и сохраняться между воздействиями (так же как и переменные процедурного языка программирования), для моделирования этого используется процедурное (procedural) присвоение. Непрерывное присвоение употребляется вне процедурных блоков (initial или begin) и используется либо в описании цепи, либо с ключевым словом assign. (Существуют также процедурные непрерывные присвоения в блоках initial или begin с ключевыми словами assign и deassign). Слева от оператора непрерывного присвоения (=) должен находится объект типа цепь. При изменении значения какого-либо из объектов входящих в выражение справа от =, данное выражение будет вычислено и новое значение будет присвоено.

Пример иллюстрирующий работу непрерывного присвоения.

module assign_test;

reg [3:0] data;

wire parity, forth;

wire gnd=1'b0; //объявление присвоение

wire y=(data[0])?data[1]:gnd; //мультиплексор

assign parity=^data; //непрерывное присвоение

assign forth=~|data[1:0]; //еще одно

initial

$monitor(data,,parity,,forth,,y); //запускаем системную функцию для индикации изменений

initial

for (data=0; data!=15; data=data+1'd1) //переберем варианты

#1; //задержка нужна чтобы $monitor работал правильно

endmodule

результат работы этого примера

Highest level modules:

assign_test

0 0 1 0

1 1 0 0

2 1 0 0

3 0 0 1

4 1 1 0

5 0 0 0

6 0 0 0

7 1 0 1

8 1 1 0

9 0 0 0

10 0 0 0

11 1 0 1

12 0 1 0

13 1 0 0

14 1 0 0

15 0 0 1

Процедурные присвоения бывают двух типов blocking (=) и nonblocking (<=). Большинство разработчиков переводит на русский язык как «блочные» и «неблочные» присвоения, но по смыслу более подходящим кажутся термины «блокирующие» и «неблокирующие». Для того чтобы понять разницу между данными типами присвоения нужно рассмотреть работу Verilog симулятора. В реальном объекте (цифровой схеме), который моделируется с помощью языка Verilog, события могут происходить одновременно – при изменении входного сигнала во всех элементах начинаются процессы, которые протекают одновременно и приводят к каким-либо изменениям выходных сигналов. Программа симулятора не может выполнять события одновременно и создает списки событий, которые должны выполнятся последовательно. Когда все события из списка выполнены, симулятор переходит к следующему временному шагу – увеличивает время на временной интервал (второй параметр директивы `timescale) и выполняет список событий, которые должны произойти на этом шаге. Об исполнении событий в других временных шагах (механизме задержек) будет рассказано далее, а сейчас рассмотрим события происходящие «одновременно» - в одном временном шаге.

Допустим, имеется следующее описание:

always @ (posedge CLK) a=b;

always @ (posedge CLK) b=a;

Пусть а и b регистры единичной длины и к моменту положительного фронта тактового сигнала CLK а==0 b==1. Какое значение будут иметь эти переменные после прохождения фронта? Это не определенно в языке и зависит от того, в какой последовательности операции присваивания попадут в список. То есть получается конструкция, поведение которой непредсказуемо. Это значит, что либо обе эти переменные будут равны 0, либо обе равны 1. «Блокирующее» или «блочное» присвоение (=) блокирует исполнение других операций в блоке последовательных операций (до тех пор, пока не будет выполнена данная операция). Использование «блокирующего» присвоения в подобной конструкции в конкурентно исполняемых блоках нежелательно и его следует избегать. Но в то же время, если в блоке требуется провести последовательное исполнение операторов, следует применять данный тип присвоения.

Такая конструкция

always @ (posedge CLK)

begin

a=0;

b=a;

end

гарантирует, что после фронта CLK обе переменные a и b будут обнулены.

Если же предыдущие примеры переписать с использованием «неблокирующего» или «неблочнго» присвоения (<=), то поведение модели изменится:

always @ (posedge CLK) a<=b;

always @ (posedge CLK) b<=a;

в этом случае в список событий, исполняемом во временном шаге после изменения CLK, эти операции будут помещены параллельно, то есть переменные обменяются своими значениями. После прохождения фронта CLK будет а==1 b==0. И данная конструкция будет эквивалентна следующей:

always @ (posedge CLK)

begin

a<=b;

b<=a;

end

Таким образом описываются два D-триггера, выход каждого подан на вход другого, а на тактовые входы подан сигнал CLK. При этом последовательность записи a<=b; b<=a; или b<=a;a<=b; не играет роли так как моделируются одновременно происходящие события.

Вторая конструкция в этом случае:

always @ (posedge CLK)

begin

a<=0;

b<=a;

end

также описывает два D-триггера. На вход одного (а) подан 0, а выход подключен к входу другого (b). На тактовые входы подан сигнал CLK.

Для пользователей VHDL, можно провести параллель между variable assignment (:= VHDL) и blocking assignment (= Verilog) и signal assignment (<= VHDL) и nonblocking assignment (<= Verilog) соответственно. Но следует учесть, что в процедурных конструкциях Verilog, различий между регистром и переменной не делается.

Если дополнить первый триггер из последнего примера сигналом асинхронной установки, получится схема, которая реально может быть использована для синхронизации и нормирования коротких импульсов.

Проверим работоспособность данной схемы следующим испытательным стендом (это упрощенный testbench – правильный пример создания испытательных стендов приведен в первой части):

`timescale 1ns/10ps

module test;

reg CLK,SET,a,b;

always

#5 CLK=~CLK; //100 МГц тактовый сигнал

always @ (posedge CLK or posedge SET) //испытываемый блок

begin

if (SET) a<=1'b1;

else

begin

a<=0;

b<=a;

end

end

initial //инициализируем переменные

begin

CLK=0;

SET=0;

a=0;b=0;

$monitor($time,,SET,,a,,b);

end

initial #100 $finish; // через 100 нс завершить моделирование

initial //подача «асинхронного» сигнала SET

begin

#57 SET=1'b1;

#1 SET=1'b0;

end

endmodule

Результат показывает

Highest level modules:

test

0 0 0 0

57 1 1 0

58 0 1 0

65 0 0 1

75 0 0 0

Что асинхронный сигнал SET длительностью 1 нс (фронт на 57 нс после пуска) был синхронизирован по фронту CLK в регистре b – длительность 10 нс (фронт 65 нс, срез 75 нс).



Похожие документы:

  1. Контрольные вопросы 23

    Контрольные вопросы
    ... деятельности, как объект разработки и как технологии разработки информационных систем. Это ... Предполагают, что между первыми инструментами обработки материальных объектов и средствами ... услугой. Переход к технологиям цифровой связи приводит к сближению служб ...
  2. ПЕРЕЧЕНЬ НАУЧНЫХ СТАТЕЙ И ДОКЛАДОВ опубликованных в 2014 году

    Документ
    ... для линейного логического синтеза цифровых структур / Н.Н. ... уравнения базовых схем включения мультидифференциальных ... 21 Разработка оптико-электронного устройства для ... Каращенко, В.В. Учёт финансовых инструментов и инвестиций в соответствии ... .auris-verlag.de/ ...
  3. Оправилах записи программы 9 Очем можно не беспокоиться 9 Описание архитектуры объекта 9

    Реферат
    ... описывать поведение, т.е. алгоритмы функционирования цифровых систем, а также проводить ... определение можно заменить структурной схемой. Можно моделировать: параллелизм, ... следующие стили проектирования и описания схем: структурный, потоковый, поведенческий, ...
  4. Болотова алла Константиновна

    Документ
    ... Л.С.Выготского через разработку общепсихологической теории ... (см. схему) Схема хронотопической детерминации ... деятельности является необходимым инструментом приспособления к меняющимся ... наименьшей ошибкой (показания электронного секундомера, вмонтированного ...
  5. Базы знаний интелектуальных систем гаврилова хорошевский

    Документ
    ... , традиционная схема разработки СПЗ I ... электронные учебники. Размещение в узлах сети не только текстовой и цифровой ... 1994. «Сценарий» — инструмент визуальной разработки компьютерных программ // Компьютерные техноло­ ... and Languages, Springer-Verlag. 287. Fridman ...

Другие похожие документы..