- Арифметика
В 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: ноль;
конец
конечный модуль