Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







Б.9.2. Операторы процедурного присваивания





 

Внутри процедурных операторов присваивание значений переменным может быть реализовано несколькими способами.

1. Оператором блокирующего процедурного присваивания: "=". Этот оператор задерживает выполнение следующего за ним оператора до тех пор пока присваивание не будет завершено. Например, в следующем блоке

begin m=n; n=m; end

первое присваивание изменит значение m до того, как второе присваивание прочитает m.

2. Оператором неблокирующего процедурного присваивания: <=. Этот оператор обеспечивает вычисление правого выражения в нулевой момент времени (после начала процедурного оператора или после выполнения последнего блокирующего присваивания в нем), а присваивание левой части результата, вычисленного в правой части, может осуществляться после задержки, если таковая указана. Не задерживает выполнение следующих за ним операторов блокирующего и неблокирующего присваивания. Например, в следующем блоке

begin m<=n; n<=m; end

обе операции присваивания осуществятся до того, как m и n изменят свои значения.

3. Оператором непрерывного процедурного присваивания:

assign m=n;

Этот оператор отменяет действие всех других, следовавших ранее операторов процедурного присваивания для данной переменной.

4. Оператором отмены присваивания: deassign m. Этот оператор отменяет действие примененного ранее оператора непрерывного процедурного присваивания assign.

При использовании операторов присваивания в процедурных операторах следует придерживаться следующих правил:

- не употреблять блокирующие и неблокирующие операторы в одной процедуре;

- применять неблокирующие операторы присваивания для описания последовательностной логики (устройств, содержащих триггеры);

- применять блокирующие операторы присваивания для описания комбинационной логики (без триггеров).

 

Б.9.3. Управляющие операторы (Programming Statements)

Внутри процедурных операторов initial и always могут применяться управляющие операторы, являющиеся стандартным набором в обычных языках алгоритмического программирования, таких как C. Эти операторы позволяют эффективно формировать описания разнообразных вариантов поведения устройств. В языке Verilog существуют следующие управляющие операторы:

- begin... end - группирует два или более операторов в один блок, операторы в блоке выполняются в порядке следования, каждая временная задержка, если она установлена во внутреннем операторе, реализуется по окончании предыдущей; блоки могут быть именованными, в этом случае внутри блока может быть объявлена локальная переменная, например счетчик цикла, а также использован оператор disable (см. ниже);

- if (выражение)

оператор или блок операторов; - выполняет оператор или блок операторов, если выражение в круглых скобках дает результат ИСТИНА (любое не равное нулю значение), в противном случае – не выполняет;

- if (выражение)

первый оператор или блок операторов;

else

второй оператор или блок операторов; - выполняет только первый оператор или блок операторов, если выражение в круглых скобках ИСТИННО, выполняет только второй оператор или блок операторов, если выражение ЛОЖНО или НЕИЗВЕСТНО;

- case (выражение)

конст. а: оператор или блок операторов;

конст. b, конст. c: оператор или блок операторов;

...

default: оператор или блок операторов;

endcase; - сравнивает результат выражения в круглых скобках с константами а, в, с и т. д. и выполняет оператор или блок операторов, следующий за первой константой, совпадающей с результатом выражения; выполняет оператор или блок операторов, следующий за необязательным вариантом default, если не произошло ни одного совпадения;

- casez - версия оператора case, в которой может быть использовано внутри выражения или константы логическое значение z (значение безразлично) (вместо z может быть также применен символ?);

- casex - версия оператора case, в которой могут быть использованы внутри выражения или константы логические значения z и x (значение z может быть также представлено символом?);

- while (выражение)

оператор или блок операторов; - циклически выполняет оператор или блок операторов пока выражение в круглых скобках - ИСТИННО; выражение вычисляется вначале каждой итерации;

- repeat (число)

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

- forever оператор или блок операторов; - бесконечно повторяет выполнение оператора или блока операторов;

- disable; - прерывает выполнение именованного блока операторов.

Кроме блочного оператора begin.. end для моделирования устройств может быть использован еще один блочный оператор:

- fork.. join; - группирует операторы в блок параллельно, т. е. операторы внутри блока выполняются одновременно, а все установленные задержки отсчитываются от начала выполнения блока; не является синтезируемым оператором, применяется для моделирования.

 

Б.10. Функции

Функции в языке Verilog решают задачи подобные задачам, выполняемым модулями нижнего уровня, т. е. могут представлять блоки простейших цифровых устройств. Основным отличием функций от модулей является то, что они могут быть использованы внутри выражения (в правой части оператора присваивания). В силу этого отличия применение функций оказывается в ряде случаев более удобным и легко читаемым.

При использовании функций необходимо учитывать следующее.

1. Функция возвращает значение вместо своего имени в месте его употребления (вызова функции).

2. Функция должна быть описана внутри модуля и будет локальна в этом модуле (недоступна в других модулях).

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

4. Функция должна иметь хотя бы один вход и не может иметь выходов, аналогичных выходам модуля (роль единственного выхода функции играет возвращаемое значение).

5. В функции не могут быть установлены элементы управления временем и не могут употребляться операторы неблокирующего присваивания.

6. Функция не может быть описана внутри процедурных операторов.

7. Явно указанный тип возвращаемого функцией значения может быть:

- signed;

- reg signed;

- integer, time, real, realtime.

Разрядность возвращаемого значения указывается в описании перед именем функции; по умолчанию (если явно не указано иное) возвращаемое значение представляет одноразрядную величину типа reg.

Ниже (лист. Б.4) приведен пример применения функции pb, вычисляющей для 8-разрядной переменной db бит четности (равен 0, если число единиц в байте четно и равен 1 - если нечетно). Функция описана внутри модуля fun2. Далее в модуле функция используется для занесения вычисленного бита четности в дополнительный старший разряд 9-разрядной выходной переменной p_db при наличии единицы на входе разрешения en. В противном случае этот разряд устанавливается в Z-состояние.

 

module fun2(db,p_db,en);

input [7:0] db; // входной байт

input en; // команда на формирование бита четности

output reg [8:0] p_db; //9-разрядный выход

 

function pb (input [7:0] ina);

pb=^ina;

endfunction

 

always @ (db,en)

begin

if (en)

p_db[8]=pb(db);

else

p_db[8]=1'bz;

p_db[7:0]=db;

end

endmodule

 

Листинг Б.4. Пример описания и вызова функции

в модуле формирования бита четности 8-разрядного слова

 

 

Библиографический список

 

1. Ашихмин А.С. Цифровая схемотехника. Современный подход. – М.: Техбук, 2007. – 288 с.

2. Основы проектирования электронной компонентной базы: метод. указ. к лаб. раб. Ч.1/ Рязан. гос. радиотехн. ун-т; сост. А.С.Ашихмин. – Рязань: РГРТУ, 2012. – 36 с.

3. Амосов В.В. Схемотехника и средства проектирования цифровых устройств. – СПб.: БХВ-Петербург, 2007. – 560 с.

4. Поляков А.К. Языки VHDL и Verilog в проектировании цифровой аппаратуры. – М.: СОЛОН-Пресс, 2003. – 320 с.

5. Угрюмов Е. Цифровая схемотехника: учебн. пособие для вузов. – СПб.: БХВ-Петербург, 2004. – 800 с.

6. Организация ЭВМ, 5-е изд. / К. Хамахер, З. Вранешич, С. Заки. – СПб.: Питер; Киев: Издательская группа BHV, 2003. – 848 с.

7. ModelSim® Reference Manual. Software Version 6.5e. © 1991-2010 Mentor Graphics Corporation. – 388 p. (www.altera.com).

8. ModelSim® Tutorial. Software Version 6.5e. © 1991-2010 Mentor Graphics Corporation. – 82 p. (www.altera.com).

9. ModelSim® User’s Manual. Software Version 6.5e. © 1991-2010 Mentor Graphics Corporation. – 632 p. (www.altera.com).

10. Quartus® II Introduction for Verilog Users. 2010 Altera Corporation. – 33 p.

11. DE2-115 User Manual. © 2012 Terasic Technologies. – 118 p.

 

Содержание

Лабораторная работа № 5. Проектирование последовательностных устройств........................................   Лабораторная работа № 6. Применение процедурных операторов...................................................   Лабораторная работа № 7. Аппаратная реализация учебного проекта...............................................   Лабораторная работа № 8. Применение библиотечных модулей пакета Quartus II........................................   Приложение A. Последовательность операций при подготовке проекта в САПР Quartus II на языке Verilog.................   Приложение Б. Краткий справочник по языку Verilog........   Библиографический список..............................     .....1     .....9     ....13     ....19     ....24   ....34   ....35    

 







Что делать, если нет взаимности? А теперь спустимся с небес на землю. Приземлились? Продолжаем разговор...

ЧТО ПРОИСХОДИТ ВО ВЗРОСЛОЙ ЖИЗНИ? Если вы все еще «неправильно» связаны с матерью, вы избегаете отделения и независимого взрослого существования...

Система охраняемых территорий в США Изучение особо охраняемых природных территорий(ООПТ) США представляет особый интерес по многим причинам...

ЧТО ПРОИСХОДИТ, КОГДА МЫ ССОРИМСЯ Не понимая различий, существующих между мужчинами и женщинами, очень легко довести дело до ссоры...





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


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