Как я могу получить случайные числа между -1024 и 1024 в VHDL - PullRequest
0 голосов
/ 29 октября 2018

Я действительно новичок в VHDL и пытаюсь сделать горячую игру. Моя первая цель - генерировать числа в диапазоне от -1024 до 1024, чтобы я мог использовать 10 переключателей, чтобы угадать. Тем не менее, существует много источников о положительных целых числах, но я не смог найти ни одного для отрицательных. Вот мой пример кода. Кроме того, кто-то говорит, что LFSR делает эту работу, но я новичок, и я не мог понять поведение LFSR.

library ieee;
use ieee.math_real.all;

entity rand_gen is
end rand_gen;

architecture behavior of rand_gen is 

signal rand_num : integer := 0;

begin

process
    variable seed1, seed2: positive;              
    variable rand: real;   
    variable range_of_rand : real := 1024.0;   
begin
    uniform(seed1, seed2, rand);   
    rand_num <= integer(rand*range_of_rand);  
    wait for 10 ns;
end process;

end behavior;

1 Ответ

0 голосов
/ 30 октября 2018

Пожалуйста, ознакомьтесь с Методология проверки VHDL с открытым исходным кодом . Эта структура предлагает множество пакетов для облегчения написания тестовых стендов. Например, существует пакет RandomPkg VHDL, который предлагает множество процедур рандомизации, функций и защищенного типа для ограниченного случайного числа: RandInt(min, max).

process
  variable RV : RandomPType;
begin
  RV.Init("dkudbcsdkbcfsdbcfdsyc");   -- create a seed value

  for in i 0 to 15 loop
    rand_num <= RV.RandInt(-1024, 1024);
    wait until rising_edge(Clock);
  end loop;
end process;

Защищенный тип позаботится об обработке двух целых чисел, которые вам нужно будет обработать вручную, если вы используете ieee.math_real.uniform(...)

...