Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







Б.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

Примитивы Выполняемые функции Количество и порядок следования портов
and nand or nor xor xnor И И-НЕ ИЛИ ИЛИ-НЕ исключ. ИЛИ искл. ИЛИ -НЕ (1 - output, 1-или более - input)
buf not повторитель инвертор (1-или более - output, 1 - input)
bufif1 noif1 bufif0 noif0   повторители и инверторы с Z-состоянием на выходе (1 в имени: если control=1, то out=inилиout=!in(для инверторов), иначе out=Z; 0 в имени - инверсия сигнала control) (1 - output, 1 - input, 1 - control)
pullup pulldown подтягивание к 1 или к 0 (1 - output)

 

Кроме подключения портов при установке экземпляра примитива могут быть указаны величины задержек, формируемые этим экземпляром. (Без явного указания значений задержки по умолчанию принимаются равными нулю). Задержки могут быть указаны тремя способами:

- одним значением для положительного, отрицательного фронтов и перехода в Z-состояние;

- двумя значениями, разделяемыми запятыми, для положительного и отрицательного фронтов соответственно;

- тремя значениями, для положительного, отрицательного фронтов и перехода в Z-состояние.

 

Таблица Б.14. Примеры объявления (установки) экземпляров примитивов

Примеры Примечание
and g1(out1, ina, inb); 2-входовое И с нулевыми задержками
and #5 g2(o,in1,in2,in3,in4); 4-входовое И с задержкой 5 для всех переходов
not #(2,3) g3(outa, ina); инвертор с положительным фронтом 2 единицы времени и отрицательным фронтом 3
wire [31:0] y, a; buf #2.7 gg [31:0] (y,a); массив из 32 буферов с задержкой 2,7

 

Каждая задержка, в свою очередь, может быть представлена тремя значениями, разделяемыми двоеточием, и представляющими минимальное, типичное и максимальное значения.

В табл. Б.14. приведены примеры объявлений (установки) экземпляров примитивов.

 

Б.7. Оператор непрерывного присваивания (assign)

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

Тип переменной, стоящей слева от знака = может быть любым из типов цепей, за исключением типа trireg. Выражение в правой части может включать любые типы переменных, любые операции и вызовы функций. Оператор непрерывного присваивания может выполняться с задержкой. Синтаксис описания задержки такой же, как при объявлении экземпляров примитивов (см. раздел Б.6.).

Оператор непрерывного присваивания располагается в описании устройства вне процедурных операторов (см. раздел Б.8.). Он автоматически активизируется в нулевой момент времени и выполняется одновременно с процедурными операторами, экземплярами модулей нижнего уровня и экземплярами примитивов.

Оператор непрерывного присваивания начинается ключевым словом assign. При комбинировании непрерывного присваивания с объявлением переменной ключевое слово assign опускается. В табл. Б.15. представлены примеры применения оператора непрерывного присваивания assign.

 

Таблица Б.15. Примеры применения оператора непрерывного присваивания

Операторы непрерывного присваивания Примечание
wire [31:0] sum; assign sum = a + b; явное объявление переменной и оператор непрерывного присваивания
tri [15:0] #2 buf_out = a + d; комбинирование объявления переменной типа tri и оператора непрерывного присваивания с задержкой 2 ед. времени
wire[63:0] alu=alu_fun(code,a,b); вызов функции в правом выражении

 

 

Б.8. Операции

Для большинства операций операндами могут быть переменные любых типов, константы или вызовы функций. Часть операций не может применяться к данным типа real. Операции, возвращающие значения " истина/ложь", представляют его одноразрядной величиной: 1 – "истина", 0 – "ложь", x – "не определено".

Операции языка Verilog представлены в табл. Б.16.

Побитовые операции выполняются отдельно над одноименными разрядами операндов. Поэтому разрядность результата равна разрядности операндов.

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

Логические операции также дают одноразрядный результат. Значение "ИСТИНА" для операнда соответствует любой величине, не равной нулю. Значение "ЛОЖЬ" это нуль для любой, включая многоразрядные, переменной.

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

Арифметические операции требуют выравнивания операндов в выражении (см. подраздел Б.8.1) и выполнения правил согласования типов(см. подраздел Б.8.2).

 

Таблица Б.16. Операции языка Verilog

Побитовые операции
~ ~m инверсия каждого разряда переменной m
& m & n операция И каждого разряда m с соответствующим разрядом n
| m | n операция ИЛИ каждого разряда m с соответствующим разрядом n
^ m ^ n исключающее ИЛИ каждого разряда m с соответствующим разрядом n
~^ или ^~ m ~^ n исключающее ИЛИ-НЕ каждого разряда m с соответствующим разрядом n
<< m << n сдвиг m влево на nразрядов (правые разряды заполняются нулями)
>> m >> n сдвиг m вправо на nразрядов (левые разряды заполняются нулями)

 

Унарные побитовые операции
& &n операция И всех разрядов n (результат - одноразрядный)
~& ~&n операция И-НЕ всех разрядов n (результат - одноразрядный)
| |n операция ИЛИ всех разрядов n (результат - одноразрядный)
~| ~|n операция ИЛИ-НЕ всех разрядов n (результат - одноразрядный)
^ ^n исключающее ИЛИ всех разрядов n (результат - одноразрядный)
~^ или ^~ ~^n исключающее ИЛИ-НЕ всех разрядов n (результат - одноразрядный)

 

Логические операции
! !n 1, если n ложь и наоборот (результат - одноразрядный)
&& m && n 1, если m и n - истина(результат - одноразрядный)
|| ||n 1, если m или n - истина(результат - одноразрядный)

Таблица Б.16. Операции языка Verilog (продолжение)

Операции сравнения (возвращаютX, если в операндах есть X или Z)
== m == n 1, если m равно n (результат - одноразрядный)
!= m!= n 1, если m не равно n (результат - одноразрядный)
< m < n 1, если m меньше n (результат - одноразрядный)
> m > n 1, если m больше n (результат - одноразрядный)
<= m <= n 1, если m меньше или равно n (результат - одноразрядный)
>= m >= n 1, если m больше или равно n (результат - одноразрядный)

 

Операции идентичности (сравнивают 0, 1, X и Z)
=== m === n 1, если m равно n (результат - одноразрядный)
!== m!== n 1, если m не равно n (результат - одноразрядный)

 

Арифметические операции
- -m отрицательное m (в дополнительном коде)
+ m + n сложение m и n
- m - n вычитание n из m
* m * n умножение m на n
/ m / n деление m на n (целочисленное)
% m % n целый остаток от деления m на n
** m ** n m в степени n
<<< m<<<n сдвиг m влево на nразрядов (правые разряды заполняются нулями)
>>> m>>>n сдвиг m вправо на nразрядов (левые разряды заполняются значением знакового бита, если выражение со знаком, иначе - нулями)

 

Прочие операции
?: s?m:n если s - истина, то возвращает m, иначе - n
{} {m,n} конкатенация: соединяет m и n в указанном порядке, образуя вектор суммарной разрядности
{{}} {n{}} повторение: повторяет вектор во внутренних скобках nраз

 

 







Что будет с Землей, если ось ее сместится на 6666 км? Что будет с Землей? - задался я вопросом...

Что способствует осуществлению желаний? Стопроцентная, непоколебимая уверенность в своем...

Что делает отдел по эксплуатации и сопровождению ИС? Отвечает за сохранность данных (расписания копирования, копирование и пр.)...

ЧТО ТАКОЕ УВЕРЕННОЕ ПОВЕДЕНИЕ В МЕЖЛИЧНОСТНЫХ ОТНОШЕНИЯХ? Исторически существует три основных модели различий, существующих между...





Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:


©2015- 2024 zdamsam.ru Размещенные материалы защищены законодательством РФ.