Поразрядные Операторы (Bitwise Operators )
Ключевые символы:~, &, |, ^, (~^, ^~).
К поразрядным операторам относятся поразрядное отрицание, поразрядные логические И, ИЛИ, исключающее или, исключающее ИЛИ-НЕ. Поразрядные операторы выполняются только над операндами, имеющими одинаковую разрядность. В том случае, если разрядность одного операнда меньше другого, недостающие разряды дополняются нулямиы . Ниже приведен пример использования поразрядных операторов.
module bitTest; reg [3:0] a, b ,c;
initial begin a = 4'b1100; b = 4'b0011; c = 4'b0101; $displayb(~a); // bitwise negation, evaluates to 4'b0011 $displayb(a & c); // bitwise and, evaluates to 4'b0100 $displayb(a | b); // bitwise or, evaluates to 4'b1111 $displayb(b ^ c); // bitwise xor, evaluates to 4'b0110 $displayb(a ~^ c); // bitwise xnor, evaluates to 4'b0110 end endmodule // bitTest
3.4.15.Операторы приведения (Reduction Operator ) Keysymbols: &, ~&, |, ~|, ^, ~^, ^~. Операторы приведения – И, ИЛИ, И-НЕ, ИЛИ-НЕ, исключающее или, исключающее ИЛИ-НЕ (два варианта). Они выполняются над многоразрядным операндом пошагово, бит за битом, начиная с двух крайних левых разрядов, выдавая на выходе одноразрядный результат. Очевидно, что такой подход позволяет реализовать проверку на четность (нечетность). Ниже приведены примеры использования операторов приведения.
module reductTest; reg [3:0] a, b ,c;
initial begin a = 4'b1111; b = 4'b0101; c = 4'b0011;
$displayb(& a);//, (то же 1&1&1&1), равен 1 1 $displayb(| b); // (same as 0|1|0|1), evaluates to 1 $displayb(^ b); // искл.ИЛИ (same as 0^1^0^1), evaluates to 0 end
endmodule // reductTest
Безусловно, следует улавливать различия между логическими операторами, поразрядными операторами и операторами приведения. Несмотря на схожесть символов этих операторов, число операндов в каждом случае различно. Операторы сдвига (Shift Operator). Ключевые символы: >>, <<. Операторы сдвига позволяют осуществить сдвиг операнда как вправо, так и влево. Пример их использования приведен ниже
module shiftTest; reg [3:0] a;
initial begin a = 4'b1010;
$displayb(a << 1); // shift left by 1, evaluates to 4'b0100 $displayb(a >> 2); // shift right by 2, evaluates to 4'b0010 end
endmodule // shiftTest
Этот оператор часто применяют для реализации регистров сдвига, длинных алгоритмов перемножения и т.п.
Конкатенация (объединение,Concatenation ) Ключевой символ: {, } Объединение позволяет увеличить разрядность (size) цепей (nets), регистров (registers) и т.д.
module concatTest; reg a; reg [1:0] b; reg [5:0] c;
initial begin a = 1'b1; b = 2'b00; c = 6'b101001;
$displayb({a, b}); // produces a 3-bit number 3'b100 $displayb({c[5:3], a}); // produces 4-bit number 4'b1011
end
endmodule // concatTest Повторение (Replication ) Повторение (Replication) может быть использовано для многократного повторения объединения (concatenation), как показано в нижеследующем примере.
module replicTest; reg a; reg [1:0] b; reg [5:0] c;
initial begin a = 1'b1; b = 2'b00;
$displayb({4{a}}); // результат - 1111 c = {4{a}}; $displayb(c); // результат -001111 end
endmodule // replicTest
Системные директивы (System Tasks )
Наверное, этот раздел не будет интересен тем, кто пишет только синтезируемые описания на Verilog. Но поскольку язык является не только средством описания проекта, но и довольно мощным инструментом для поведенческого моделирования систем, то следует сказать несколько слов о встроенных директивах компилятора, позволяющих выполнить моделирование и произвести анализ его результатов.
Директивы вывода результатов моделирования (Writing to Standard Output) Ключевые слова: $display, $displayb, $displayh, $displayo, $write, $writeb, $writeh, $writeo.
Наиболее часто применяется директива $display. Она может быть использована для вывода на экран строк, выражений или переменных. Ниже приведен пример использования директивы $display
$display("Hello Dr Blair"); --- output: Hello Dr Blair
$display($time) // current simulation time. --- output: 460
counter = 4'b10; $display(" The count is %b", counter); --- output: The count is 0010
Синтакс определения формата вывода аналогичен синтаксису printf в языке программирования C. Ниже приведено его описание для директивы $display
Для специальных символов используются следующие эскейп-последовательности (escape sequence)
Директива $write идентична директиве $display, за исключением того, что она не осуществляет автоматический переход на новую строку в конце вывода информации Если спецификация вывода не определена, то по умолчанию исполшьзуются следующие форматы
Так, например, следующий фрагмент кода …
$write(5'b01101); $writeb(" ", 5'b01101); $writeh(" ", 5'b01101); $writeo(" ", 5'b01101,"\n");
… И результат его работы
13 01101 0d 15
Популярное: Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ... Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной... Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас... ©2015-2020 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (764)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |