Страница 1 из 1

Ответы на вопросы (13.11.2010)

СообщениеДобавлено: 19 ноя 2010, 23:01
sash
Здравствуйте!

На лекции возникли вопросы, на которые я обещал найти ответ:
1. Что означают спецификаторы %u и %z при выводе с помощью системных задач $write(), $display() и т.д.?
Спецификатор %u выводит данные в двоичном виде как при вызове функции стандартной библиотеки Си fwrite(data, 4, (N + 1) / 4, fptr), где data - данные, N - число байт, занимаемых данными, а fptr - дескриптор потока (в случае $write() и $display() это stdout). То есть, выводится число байт, округленное в большую сторону до кратного 4. Если в некотором разряде данные содержат x или z, то разряд считается равным 0. Порядок байт, в котором выводятся данные
Спецификатор %z выводит данные в двоичном виде также, как и %u, но по 2 бита на каждый разряд исходных данных. Таким образом, число байт, которое выводит спецификатор, округляется до кратного 8.

2. Утверждалось, что блоки specify предназначены только для формального документирования задержек и игнорируются симулятором. В то же время, в стандарте есть раздел, согласно которому, если при описании модуля указаны задержки на отдельных компонентах модуля и одновременно блоки specify, то задержка между портами считается равной максимальному из двух значений (первое есть сумма задержек на отдельных компонентах, а второе задержка, указанная в блоке specify). Может ли игнорировать симулятор блоки specify?
Как показала практика, может. Возможно, данный раздел стандарта касается не симулятора, а инструментов временного анализа, для которых также важна задержка в модуле, и для которых в первую очередь и создавались блоки specify.

--
С уважением,
Александр Лукичев