Jump to content

    
Sign in to follow this  
sawyer0

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

Recommended Posts

добрый день,

 

помогите описать поведение сигнала 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

 

 

спасибо.

Share this post


Link to post
Share on other sites
добрый день,

 

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

 

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

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

 

 

Share this post


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

 

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

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

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

Share this post


Link to post
Share on other sites
Что мешает присвоить сигналу 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;

 

 

Share this post


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

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

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this