vhdl testbench用于纸牌游戏?

时间:2014-02-13 23:27:30

标签: vhdl

我正在尝试为模拟纸牌游戏的VHDL项目实现测试平台。

我需要计算在按下按钮时从一个不断计数的计数器中抽出卡片的游戏中获胜的几率。

为了引入随机性,我需要以随机的时间间隔向卡片绘制模块发送脉冲。我只是想知道如何实现它。

我不知道如何实现一个,所以我尝试了这个。

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 Starter。

1 个答案:

答案 0 :(得分: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)