Перейти к содержанию
    

помогите подкорректирвоать тестбенч

добрый день,

 

помогите описать поведение сигнала readdatavalid, чтобы было как на картинке (не сплошной, а 'рваный' и случайный).

 

я сделал, так чтобы он был без разрывов, подряд. как теперь исправить, на псевдослучпайное поведение?

initial
begin
    forever begin
        @(posedge clk);
        
        waitrequest = 1;
        readdatavalid = 0;
        
        wait(read);
        
        // Keep 'waitrequest' HIGH for [1..3] cycles
        for (int I=0; I<$urandom_range(3,1); I++) begin 
            @(posedge clk);
        end
        waitrequest = 0;
        
        wait(~read);
        waitrequest = 1;
        
        // Wait some time ([0..5] cycles) after 'read' goes LOW
        for (int I=0; I<$urandom_range(5,0); I++) begin 
            @(posedge clk);
        end
        
        // send data + valid
        for (int I=0; I<burstcount; I++) begin
            readdatavalid = 1;
            readdata = $urandom_range(10,1);
            @(posedge clk);
            readdatavalid = 0;
        end
    
    end
end

 

 

burst_read.jpg

 

 

спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

добрый день,

 

помогите описать поведение сигнала readdatavalid, чтобы было как на картинке (не сплошной, а 'рваный' и случайный).

 

я сделал, так чтобы он был без разрывов, подряд. как теперь исправить, на псевдослучпайное поведение?

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

помогите описать поведение сигнала readdatavalid, чтобы было как на картинке (не сплошной, а 'рваный' и случайный).

 

я сделал, так чтобы он был без разрывов, подряд. как теперь исправить, на псевдослучпайное поведение?

Если используете $urandom_range, значит пишете на SystemVerilog. $urandom_range не лучший вариант генерации псевдослучайных воздействий в SystemVerilog из-за равномерного распределения. Лучше использовать классы со случайными переменными и констрейнтами (см.стандарт или SystemVerilog for Veriifcation).

Но на начальных этапах можете и $urandom_range использовать. Что мешает присвоить сигналу readdatavalid результат $urandom_range(1,0)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что мешает присвоить сигналу readdatavalid результат $urandom_range(1,0)?

спасибо. получил, что хотел.

 

        for (int I=burstcount; I>0;) begin 
            readdatavalid = $urandom_range(1,0);
            readdata = $urandom_range(2**16-1,1);
               
            if (readdatavalid) 
                I--;
            
            @(posedge clk);
        end
        readdatavalid = 0;

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

И добавлю. Я бы все эти рандомные величины читал бы из файла. Потому как при перезапуске теста не надо делать компиляцию проекта. И при одинаковых наборах можно будет сравнивать диаграммы сигналов...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ecли вы тестируете свой компонент с авалон интерфейсом, можете посмотреть avalon verification ip suite, там есть функциональные модели для мастера и слейва.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...