Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于纸牌游戏的vhdl测试台?_Vhdl - Fatal编程技术网

用于纸牌游戏的vhdl测试台?

用于纸牌游戏的vhdl测试台?,vhdl,Vhdl,我正在尝试为一个模拟纸牌游戏的VHDL项目实现一个测试台 我需要从一个不断计数的计数器中计算出在按下一个按钮时抽牌的游戏中获胜的几率 为了引入随机性,我需要以随机的时间间隔向抽卡模块发送一个脉冲。我只是想知道如何实现它 我不知道如何实现一个,所以我尝试了这个 tb: process VARIABLE seed1, seed2: positive; VARIABLE rand: real; VARIABLE int_rand: integer; variable time_

我正在尝试为一个模拟纸牌游戏的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。

math\u 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;