joomla 1.6

Последние статьи

Популярные статьи

7. Дополнительные конструкции языка SVA

Динамический контроль

SystemVerilog включает системные вызовы для контроля проверки выполнения утверждений в процессе симуляции. Они позволяют остановить ($assertoff), перезапустить ($asserton), отменить ($assertkill) проверку утверждений. Динамический контроль может использоваться для того, чтобы отключить проверку утверждений во время сброса. Пример:

				
module device2_control();
    initial begin : disable_assertions_during_reset
        @(posedge tb_top.input_intf.reset) //active high reset
        $assertoff(0, tb_top.slave);
        @(negedge tb_top.input_intf.reset)
        $asserton(0, tb_top.slave);
    end
endmodule : device2_control


module tb_top();
...
//Объявление модуля device2
device2 slave (
    .clk(clock),
    .rst(input_intf.reset),
    .CMD(input_intf.command),
    ...
);
//Объявление модуля device2_control
device2_control device2_control_inst();
...
endmodule : tb_top		

В этом примере проверка утверждений отключается на время сброса. Для этого вызывается системный вызов $assertoff. Первым параметром в него передается количество уровней иерархии ниже того модуля, в котором мы хотим отключить проверку утверждений. В нашем случае таких уровней 0. Вторым параметром передается имя экземпляра модуля для отключения проверки утверждений. Т.к. контроль проверки выполнения утверждений находится в отдельном модуле, то приходится писать полный иерархический путь (tb_top.slave). Вместо имени модуля можно передавать имена утверждений. Остальные системные вызовы ($asserton и $assertkill) используют те же параметры.

Статический контроль

Статический контроль утверждений реализуется возможностями препроцессора:

					
`ifdef CMD_ACCEPT
    assert property (@(posedge Clk)
        (CMD != `IDLE) |-> ##[1:3] CMD_ACCEPT);
`endif 			

Проверка выполнения утверждения будет выполняться, только если в данной реализации протокола передачи сигнал CMD_ACCEPT используется. Другой способ статического контроля – это использование конструкции generate. Здесь утверждения компилируются, но не рассматриваются до этапа elaboration (завершения обработки во время трансляции):

					
 generate
    if (cmd_accept_on) begin
        assert property (@(posedge Clk)
            (CMD != `IDLE) |-> ##[1:3] CMD_ACCEPT);
    end
endgenerate

//cmd_accept_on может быть параметром или константой 			

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

Сообщения

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

  • $info (информационное сообщение);
  • $warning (предупреждение);
  • $error (сообщение об ошибке);
  • $fatal (сообщение о сбое или отказе в работе).

Утверждение может содержать сообщения для случаев успешного и неудачного выполнения:

					
assert property (@(posedge Clk)
(CMD != `IDLE) |-> ##[1:3] CMD_ACCEPT)
    $info("CMD_ACCEPT arrived in time");
else
    $error("CMD_ACCEPT did not arrive in time"); 		

Системные функции языка SystemVerilog утверждений

SystemVerilog поддерживает набор системных функций, которые реализуют ряд операций над сигналом или вектором и могут использоваться в утверждениях:

  • $rose – возвращает ‘1’, если сигнал или самый младший бит вектора перешел из ‘0’ в ‘1’ в промежутке времени между текущим и предыдущим тактом;
  • $fell - возвращает ‘1’, если сигнал или самый младший бит вектора перешел из ‘1’ в ‘0’ в промежутке времени между текущим и предыдущим тактом;
  • $stable - возвращает ‘1’, если значение сигнала или вектора не изменилось по сравнению с предыдущим тактом;
  • $past – возвращает значение сигнала или вектора, которое было на предыдущем такте;
  • $onehot - возвращает ‘1’, если только один бит вектора в ‘1’;
  • $onehot0 - возвращает ‘1’, если только один бит вектора в ‘0’;
  • $isunknown - возвращает ‘1’, если значение сигнала или вектора равно ‘X’ или ‘Z’;
  • $countones – возвращает количество ‘1’ в векторе (значения ‘X’ и ‘Z’ не считаются).
  • Wednesday, 01 June 2011
  • Автор: Ветошкин Алексей
  • Опубликовано в: Утверждения
  • 0.0/5 rating (0 votes)

Комментарии (0)

Написать комментарий

You are commenting as guest.

Cancel Submitting comment...

SystemVerilog.ru

SystemVerilog

↑ Ссылка на наши новости

Последние новости Apple
Apple-портал: новости, обзоры, приложения
Все об iPhone 5 и iPad 3
Топовый софт
Последнии версии признанных во всем мире программ
Softenok.com
Компьютерный портал
Лучшее из мира компьютеров на Super4computeR.com
Super4computeR.com
Лучшее из мира WEB
Лучшее из мира web-дизайна на Super4desigN.com
Super4desigN.com
Аренда коттеджа в Подмосковье
Отличные места для проведения любого мероприятия. Близко к Москве и недорого!
CottageArenda.ru
мини-логотип сайта systemverilog.ru

2010-2011 SystemVerilog.ru, все права защищены. | Обратная связь