Академический Документы
Профессиональный Документы
Культура Документы
Системная спецификация
➢Реализуется технической маркетинговой группой
▪ Системная архитектура – Проектирование сверху вниз
➢Н бе ольшая высококвалифицированная группа инженеров.
▪ Блоковый уровень – Плоский стиль (Flat Design Style)
➢Несколько инженерных команд, работающих параллельно
▪ Интеграция – Проектирование снизу вверх
▪ Системная верификация – Симуляция, эмуляция и прототипирование
▪ Завершение проекта – Физические & временные параметры
▪ Выпуск продукции – Производство & Маркетинг
Тут ссылка на лекцию, там намного конкретнее по каждому пункту. (оставил это на
выбор отвечающего)
а) // D-триггер
б) // С асинхронным сбросом
в) // С синхронной установкой
а) б)
в) г)
Рис. 11.15. Синтез моделей D-триггера с синхронизацией по фронту
Packet p;
initial begin
p = new; // Создание пакета
assert(p.randomize());
transmit(p); // Какая-то пользовательская функция, которая передает значения
дальше
end
Управляющие генерацией константы записываются в конструкцию constraint
и группируется с помощью фигурных скобок { }. Такие скобки используются,
потому что в них заключается декларативный код, а не процедурный, где
необходимо применять begin...end. Если в процессе генерации значения
возникнет ошибка, то функция randomize возвращает 0, что отслеживается с
помощью прямой ассерции.
______________________________
_______________________________________________________________________________
Days days;
initial begin
days = new;
days.choices = ‘{Days::SUN, Days::SAT};
assert (days.randomize());
$display("Random weekend day %s\n", days.choice.name);
days.choices = ‘{Days::MON, Days::TUE, Days::WED, Days::THU, Days::FRI};
assert (days.randomize());
$display("Random week day %s", days.choice.name);
end
Если необходимо добавить или удалить данные из динамического массива,
следует осторожно использовать оператор inside, из-за его особенностей.
Например, существует множество значений, заданное очередью, из которых
должно быть выбрано и удалено только одно. Это потребует создать N
ограничений, где N–количество элементов, остающихся в очереди.
Packet p;
initial begin
p = new;
// Создание длинных данных long, отключаа ограниничение для
коротких short
p.c_short.constraint_mode(0);
assert (p.randomize());
transmit(p);
// Создание коротких данных, через отключение всех ограничени
// а затем разрешается использования ограничений для коротких
данных
p.constraint_mode(0);
p.c_short.constraint_mode(1);
assert (p.randomize());
transmit(p);
end
coverage_spec_or_option ::=
{attribute_instance} coverage_spec | {attribute_instance} coverage_option ;
coverage_option ::=
option.member_identifier = expression | type_option.member_identifier = expression
coverage_spec ::=
cover_point | cover_cross
coverage_event ::=
clocking_event | @@( block_event_expression )
block_event_expression ::=
block_event_expression or block_event_expression | begin hierarchical_btf_identifier
| end hierarchical_btf_identifier
В примере создается группа покрытия g2, которая содержит две точки покрытия и две декларации
пересечения покрытий cross. Явно заданные точки покрытия с метками Offset и Hue определены для
переменных pixel_offset и pixel_hue. Далее для переменных color и pixel_adr задается анализ совместного
покрытия.
В группе покрытия могут присутствовать одна или несколько опций, контролирующих и
регламентирующих структуру и способ сбора информации о покрытии. Опции покрытия могут быть
заданы для группы покрытия в целом или для отдельных ее пунктов.
function new();
cov1 = new;
endfunction
endclass
В примере значения полей m_x and m_y класса xyz собираются при каждом изменении переменной m_z.
Если группа покрытия определяется внутри класса и нет явной декларации переменной данной группы в
пределах класса, то она будет иметь такое же имя, которое группа покрытия получила при описании.
Таким образом, в предыдущем примере переменная cov1 соответствует группе покрытия.
Встроенная в класс группа покрытия может определять модель покрытия для защищенных и локальных
свойств класса без возможности ее переопределения в классе наследнике. Класс может иметь несколько
групп покрытия. Следующий пример представляет класс MC, содержащий две группы покрытия.
class MC;
logic [3:0] m_x;
local logic m_z;
bit m_e;
covergroup cv1
@(posedge clk);
coverpoint m_x;
endgroup
covergroup cv2
@m_e ;
coverpoint m_z;
endgroup
endclass
В covergroup cv1 является членом класса, значение переменной m_x собирается по каждому
положительному фронту сигнала clk. Значения локальной переменной m_z собираются другой группой
covergroup cv2. Каждая группа покрытия собирает значения по различным событиям синхронизации.