joomla 1.6

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

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

7. Класс Transaction

В классе Transaction, описанном в файле Transaction.sv, объявляются данные, которые посылаются на тестируемые схемы и принимаются от них. Для реализации механизма генерации случайных тестовых воздействий все посылаемые на тестируемые схемы сигналы объявляются типами rand bit или randc bit. Принимаемые сигналы объявляются, как bit. Также в классе описаны методы для вывода данных и сравнения выходов тестируемых схем:

  • display_inputs() - выводит входные сигналы (вызывается драйвером);
  • display_outputs() - выводит выходные сигналы (вызывается блоком сравнения). В этом методе вызывается функция $swrite, которая записывает входные данные в строку. Благодаря этому функцию display_outputs() можно вызывать внутри системного вызова $display(), как это сделано в классе Scoreboard.
  • compare() – сравнивает транзакции, принятые от старой и новой схемы (вызывается блоком сравнения). Содержимое этой функции меняется в зависимости от количества сравниваемых сигналов. Для каждого проверяемого выходного сигнала необходимо вставить в функцию следующий фрагмент:
    if(trans.signal_name !== this.signal_name) begin
        $display(" ** ERROR **: trans : signal_name did not match");
        compare = 0;
    end					
    		
    ,где вместо signal_name указывается имя сигнала для проверки.

Помимо этого в классе Transaction объявлены вспомогательные переменные: вектор ошибок (errors) и сигнал остановки генерации тестовых воздействий (stop). К типам этих переменных добавлен идентификатор static, что делает эти переменные общими для всех экземпляров класса Transaction. Это некий аналог разделяемой памяти, который позволяет избежать использования глобальных переменных. В нашем случае, в каком бы классе не произошла ошибка, всякий раз увеличивается на 1 общий для всех классов вектор ошибок errors. Это облегчает анализ результатов симуляции. Еще одна статическая переменная stop выступает в роли синхронизирующего сигнала. Эта переменная устанавливается драйвером в '1', когда тот сгенерировал и послал все транзакции, а классы приемника и блока сравнения мгновенно фиксируют это изменение и завершают свою работу.

`ifndef _TRANSACTION_
`define _TRANSACTION_

class Transaction;

static int errors = 0;
static bit stop = 0;

rand bit [3:0] a;
rand bit [3:0] b;
rand bit [3:0] c;
rand bit [3:0] d;

bit [3:0] result;

// Display transaction's inputs
virtual function void display_inputs();
    $display(" Transaction inputs: a = %h, b = %h, c = %h, d = %h ", a, b, c, d);
endfunction : display_inputs

// Display transaction's outputs
virtual function string display_outputs();
    $swrite(display_outputs, "result = %h", result);
endfunction : display_outputs

// Compare transactions
virtual function bit compare(Transaction trans);

compare = 1;

if (trans == null) begin
    $display(" ** ERROR ** : trans : received a null object ");
    compare = 0;
end else begin
    if(trans.result !== this.result) begin
        $display(" ** ERROR **: trans : result did not match");
        compare = 0;
    end
end

endfunction : compare

endclass

`endif					
  • 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, все права защищены. | Обратная связь