2014-02-13 4 views
1

Я пытаюсь реализовать тестовый стенд для проекта VHDL, который имитирует карточную игру.vhdl testbench для карточной игры?

Мне нужно рассчитать шансы на выигрыш в игре, где карта нарисована нажатием кнопки, из счетчика, который постоянно подсчитывает.

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

Я понятия не имею, как реализовать его, поэтому я попробовал это.

tb: process 
    VARIABLE seed1, seed2: positive; 
    VARIABLE rand: real; 
    VARIABLE int_rand: integer; 
    variable time_var1, time_var2: time ; 
    begin 
     uniform(seed1, seed2,rand); 
     int_rand := INTEGER(trunc(rand*4096.0)); 
     int_rand := to_integer((to_unsigned(int_rand, 14))); 
     time_var2 := (10 ms + (int_rand*1 us)); 
end process; 

Затем я посылаю импульс с помощью

key1 <= '1'; 
wait for time_var2; 
key1 <= '0'; 
wait for 2ns; 
and repeat... 

Я использую ModelSim для начинающих.

ответ

0

math_real.uniform является хорошим местом для начала, а затем вы можете создать процесс скамейки теста с функцией, которая дает случайное время при каждом вызове, для Например:

process is -- Test bench process 

    variable seed1 : natural := 1; -- Random seed1 for rnd_time function 
    variable seed2 : natural := 1; -- Random seed2 --||-- 

    impure function rnd_time return time is -- Random time at each call 
    variable rnd_real : real;  -- In range [0.0 .. 1.0] 
    variable rnd_pos : positive; -- In range [0 .. 20] 
    begin 
    math_real.uniform(seed1, seed2, rnd_real); -- Random real [0.0 .. 1.0[ 
    rnd_pos := positive(rnd_real * 21.0); -- Scaling to [0 .. 20] steps 
    return 50 ns + 10 ns * rnd_pos; -- Minimum and step values 
    end function; 

begin 
    while TRUE loop 
    rnd_sig <= '0'; 
    wait for rnd_time; 
    rnd_sig <= '1'; 
    wait for 10 ns; 
    end loop; 
end process; 

Для более продвинутых случайного вы можете посмотреть на Open Source VHDL Verification Methodology (OS-VVM).

Смежные вопросы