|
Б.6. Установка экземпляров модулей нижнего уровняИ примитивов в проекте Б.6.1. Установка экземпляров модулей Установка или объявление экземпляра модуля нижнего уровня в модуле верхнего уровня состоит из имени модуля, следующего за ним имени экземпляра модуля (дается разработчиком), сопровождаемого, так называемым, списком подключения в круглых скобках. При этом могут быть использованы два способа подключения портов экземпляра к цепям модуля верхнего уровня. 1. Позиционный способ состоит в том, что в списке подключения присоединяемые к портам цепи следуют в том же порядке, который использовался при описании модуля нижнего уровня. В случае отсутствия подключения цепи к какому-либо порту в списке подключения делается пропуск между запятыми в соответствующем этому порту месте. 2. Поименный способ состоит в том, что список подключения содержит одновременно имена портов, начинающиеся с точки, и имена подключаемых к ним цепей, следующие далее в круглых скобках. При этом порядок следования портов может быть произвольным. Не подключаемые порты просто не упоминаются в списке. При установке экземпляра модуля, в описании которого имеется константа parameter, значение константы может быть переопределено для данного экземпляра. Ниже приведено описание модуля dff (лист. Б.1.) и, затем, примеры установки нескольких его экземпляров в модуль верхнего уровня reg4 (лист. Б.2.).
module dff (output reg dout, // прямой выход output reg nout, // инверсный выход input data, // вход данных input clk); // вход синхронизации parameter delay=1.5; // параметр "задержка" - 1.5 по умолчанию always @(posedge clk) if (data) begin dout<=1; // здесь и ниже применен оператор процедурного nout<=0; // неблокирующего присваивания "<="(см. раздел Б.9) end else if (!data) begin dout<=0; nout<=1; end else begin dout<=X; nout<=X; end endmodule
Листинг Б.1. Описание модуля d-триггера dff
module reg4 (output wire [3: 0] q, input wire [3: 0] d, input wire clk);
dff g0(q[0],,d[0],clk); //позиционный способ подключения портов //(инверсные выходы триггеров – не подключены dff g1(.clock(clk),.dout(q[1]),.data(d[1])); //поименный //способ подключения defparam g1.delay = 3.2; //явное переопределение параметра // delay для экземпляра g1 dff #(2) g2(q[2],,d[2],clk); //неявное встроенное переопределение- // параметра (допустимо когда // он единственный) dff #(.delay(3)) g3(q[3],,d[3],clk); //явное встроенное //переопределение // параметра // в экземпляре g3
Листинг Б.2. Примеры установки экземпляров модуля dff в модуле верхнего уровня reg4
Б.6.2. Установка экземпляров примитивов
Установка экземпляров примитивов (модулей, встроенных в синтаксис языка) осуществляется аналогичным образом. Однако, применение поименного способа подключения цепей к портам в этом случае невозможно, поскольку имена портов примитивов неизвестны разработчику. Ниже (табл. Б.13) приведены примитивы вентильного уровня, встроенные в язык Verilog и порядок следования их входных и выходных портов, необходимый для позиционного способа подключения.
Таблица Б.13. Примитивы вентильного уровня языка Verilog
Кроме подключения портов при установке экземпляра примитива могут быть указаны величины задержек, формируемые этим экземпляром. (Без явного указания значений задержки по умолчанию принимаются равными нулю). Задержки могут быть указаны тремя способами: - одним значением для положительного, отрицательного фронтов и перехода в Z-состояние; - двумя значениями, разделяемыми запятыми, для положительного и отрицательного фронтов соответственно; - тремя значениями, для положительного, отрицательного фронтов и перехода в Z-состояние.
Таблица Б.14. Примеры объявления (установки) экземпляров примитивов
Каждая задержка, в свою очередь, может быть представлена тремя значениями, разделяемыми двоеточием, и представляющими минимальное, типичное и максимальное значения. В табл. Б.14. приведены примеры объявлений (установки) экземпляров примитивов.
Б.7. Оператор непрерывного присваивания (assign) Оператор непрерывного присваивания подает на переменную типа цепь или порт значение, являющееся результатом выражения, стоящего справа. Результат автоматически вычисляется заново каждый раз, когда изменяется любая из величин, входящих в это выражение. Тип переменной, стоящей слева от знака = может быть любым из типов цепей, за исключением типа trireg. Выражение в правой части может включать любые типы переменных, любые операции и вызовы функций. Оператор непрерывного присваивания может выполняться с задержкой. Синтаксис описания задержки такой же, как при объявлении экземпляров примитивов (см. раздел Б.6.). Оператор непрерывного присваивания располагается в описании устройства вне процедурных операторов (см. раздел Б.8.). Он автоматически активизируется в нулевой момент времени и выполняется одновременно с процедурными операторами, экземплярами модулей нижнего уровня и экземплярами примитивов. Оператор непрерывного присваивания начинается ключевым словом assign. При комбинировании непрерывного присваивания с объявлением переменной ключевое слово assign опускается. В табл. Б.15. представлены примеры применения оператора непрерывного присваивания assign.
Таблица Б.15. Примеры применения оператора непрерывного присваивания
Б.8. Операции Для большинства операций операндами могут быть переменные любых типов, константы или вызовы функций. Часть операций не может применяться к данным типа real. Операции, возвращающие значения " истина/ложь", представляют его одноразрядной величиной: 1 – "истина", 0 – "ложь", x – "не определено". Операции языка Verilog представлены в табл. Б.16. Побитовые операции выполняются отдельно над одноименными разрядами операндов. Поэтому разрядность результата равна разрядности операндов. Унарные побитовые операции выполняются над всеми двоичными разрядами одной переменной, т.е. эквивалентны многовходовым логическим элементам. Эти операции дают одноразрядный результат. Логические операции также дают одноразрядный результат. Значение "ИСТИНА" для операнда соответствует любой величине, не равной нулю. Значение "ЛОЖЬ" это нуль для любой, включая многоразрядные, переменной. Операции сравнения и идентичности также дают одноразрядный результат. Арифметические операции требуют выравнивания операндов в выражении (см. подраздел Б.8.1) и выполнения правил согласования типов(см. подраздел Б.8.2).
Таблица Б.16. Операции языка Verilog
Таблица Б.16. Операции языка Verilog (продолжение)
Что будет с Землей, если ось ее сместится на 6666 км? Что будет с Землей? - задался я вопросом... Что способствует осуществлению желаний? Стопроцентная, непоколебимая уверенность в своем... Что делает отдел по эксплуатации и сопровождению ИС? Отвечает за сохранность данных (расписания копирования, копирование и пр.)... ЧТО ТАКОЕ УВЕРЕННОЕ ПОВЕДЕНИЕ В МЕЖЛИЧНОСТНЫХ ОТНОШЕНИЯХ? Исторически существует три основных модели различий, существующих между... Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:
|