1. Арифметика

В Verilog есть пять арифметических операторов.

модуль Арифметика (A, B, Y1, Y2, Y3, Y4, Y5);

ввод [2:0] A, B;

выход [3:0] Y1;

выход[4:0] Y3;

вывод[2:0] Y2, Y4, Y5;

reg[3:0] Y1;

reg [4:0] Y3;

reg [2:0] Y2, Y4, Y5;

всегда @(A или B)

начать

Y1=A+B;//сложение

Y2=A-B;//вычитание

Y3=A*B;//умножение

Y4=A/B;//деление

Y5=A%B;//модуль A, деленный на B

конец

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

2. Подписать

Эти операторы просто присваивают единичному операнду положительный знак «+» или отрицательный «-». Обычно знаковые операторы не определены, и в этом случае предполагается значение по умолчанию «+».

модуль Знак (A, B, Y1, Y2, Y3);

ввод [2:0] A, B;

выход [3:0] Y1, Y2, Y3;

reg [3:0] Y1, Y2, Y3;

всегда@(A или B)

начать

Y1=+A/-B;

Y2=-A+-B;

Y3=A*-B;

конец

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

3. Относительный

Реляционные операторы сравнивают два операнда и возвращают указание на то, является ли сравниваемое отношение истинным или ложным. Результат сравнения: 0 или 1. Это 0, если сравнение неверно, и 1, если сравнение истинно.

модуль Реляционный (A, B, Y1, Y2, Y3, Y4);

ввод [2:0] A, B;

вывод Y1, Y2, Y3, Y4;

regY1, Y2, Y3, Y4;

всегда @(A или B)

начать

Y1=A‹B;//меньше чем

Y2=A‹=B;//меньше или равно

Y3=A›B;//больше чем

if (A>B)

Y4=1;

еще

Y4=0;

конец

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

4. Равенство и неравенство

Операторы равенства и неравенства используются точно так же, как операторы отношения, и возвращают истинную или ложную индикацию в зависимости от того, эквивалентны любые два операнда или нет.

модуль Равенство (A, B, Y1, Y2, Y3);

ввод [2:0] A, B;

выход Y1, Y2;

выход[2:0] Y3;

regY1, Y2;

reg[2:0] Y3;

всегда@(A илиB)

начать

Y1=A==B;//Y1=1, если A эквивалентно B

Y2=A!=B;//Y2=1, если A не равно B

если(A==B)//необходима скобка

Y3=A;

еще

Y3=B;

конец

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

5. Логично

Логические операторы сравнения используются в сочетании с операторами отношения и равенства, как описано в разделе операторов отношения и в разделе операторов равенства и неравенства. Они предоставляют средства для выполнения нескольких сравнений в одном выражении.

модуль Логический (A, B, C, D, E, F, Y);

ввод[2:0] A, B, C, D, E, F;

выходY;

regY;

всегда@(A илиB илиC илиD илиE илиF)

начать

если((A==B) && ((C›D) || !(E‹F)))

Y=1;

еще

Y=0;

конец

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

6. Побитовое

Логические побитовые операторы принимают два одиночных или нескольких операнда по обе стороны от оператора и возвращают однобитовый результат. Единственным исключением является оператор NOT, который инвертирует один следующий за ним операнд. Verilog не имеет эквивалента оператора NAND или NOR, их функция реализована путем отрицания AND и OR операторы.

модуль побитовый (A, B, Y);

ввод[6:0] A;

ввод[5:0] B;

выход[6:0] Y;

reg[6:0] Y;

всегда@(A илиB)

начать

Y(0)=А(0)&В(0); //бинарное И

Y(1)=А(1)|В(1); //бинарное ИЛИ

Y(2)=!(А(2)&В(2)); //отрицательное И

Y(3)=!(А(3)|В(3)); //отрицательное ИЛИ

Y(4)=А(4)^В(4); //бинарное исключающее ИЛИ

Y(5)=А(5)~^В(5); //бинарное исключающее ИЛИ

Y(6)=!А(6); // унарное отрицание

конец

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

7. Сдвиг

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

модульShift (A, Y1, Y2);

ввод[7:0] A;

вывод[7:0] Y1, Y2;

параметрB=3; рег [7:0] Y1, Y2;

всегда@(A)

начать

Y1=А‹‹В; //логический сдвиг влево

Y2=А››В; //логический сдвиг вправо

конец

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

8. Объединение и репликация

Оператор конкатенации «{ , }» объединяет (конкатенирует) биты двух или более объектов данных. Объекты могут быть скалярными (одноразрядными) или векторными (многоразрядными). Множественные конкатенации могут выполняться с постоянным префиксом и известны как репликация.

модульКонкатенация (A, B, Y);

ввод[2:0] A, B;

выход[14:0] Y;

параметрC=3'b011;

reg[14:0] Y;

всегда@(A или B)

начать

Y={A, B, (2{C}}, 3'b110};

конец

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

9. Сокращение

Verilog имеет шесть операторов сокращения, эти операторы принимают один векторный (многобитный) операнд, выполняют соответствующее побитовое сокращение для всех битов операнда и возвращают однобитовый результат. Например, четыре бита A объединяются по схеме И, чтобы получить Y1.

модуль Сокращение (A, Y1, Y2, Y3, Y4, Y5, Y6);

ввод[3:0] A;

выводY1, Y2, Y3, Y4, Y5, Y6;

reg Y1, Y2, Y3, Y4, Y5, Y6;

всегда@(A)

начать

Y1=//сокращение И

Y2=|А; // сокращение ИЛИ

Y3=~ // сокращение NAND

Y4=~|А; //сокращение ИЛИ

Y5=^А; // сокращение XOR

Y6=~^А; // сокращение XNOR

конец

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

10. Условно

Выражение, использующее условный оператор, оценивает логическое выражение перед знаком «?». Если выражение истинно, то выражение перед двоеточием (:) вычисляется и присваивается выходным данным. Если логическое выражение ложно, то выражение после двоеточия оценивается и присваивается выходным данным.

модульусловный (время, Y);

ввод[2:0] Время;

выход[2:0] Y;

reg[2:0] Y;

параметрноль = 3b’000;

параметрTimeOut = 3b’110;

всегда@(время)

начать

Y=(Время!=Время ожидания) ? Время +1: ноль;

конец

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