【发布时间】:2017-06-28 17:46:59
【问题描述】:
我正在尝试生成一个 16 位的随机序列。 问题是输出处于未定义状态。我觉得这是由于这些异或语句中的并行处理。所以我已经延迟了,但它仍然不起作用。
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity random_data_generator is
port (
por : in STD_LOGIC;
sys_clk : in STD_LOGIC;
random_flag : in STD_LOGIC;
random_data : out STD_LOGIC_vector (15 downto 0)
);
end random_data_generator;
architecture Behavioral of random_data_generator is
signal q : std_logic_vector(15 downto 0);
signal n1,n2,n3 : std_logic;
begin
process(sys_clk)
begin
if(por='0') then
q<= "1001101001101010";
elsif(falling_edge(sys_clk)) then
if(random_flag='1') then
n1<= q(15) xor q(13);
n2<= n1 xor q(11) after 10 ns;
n3<= n2 xor q(10) after 10 ns;
q<= q(14 downto 0) & n3 after 10 ns;
end if;
end if;
end process;
random_data <= q;
end Behavioral;
【问题讨论】:
-
记住:“任何考虑产生随机数字的算术方法的人,当然都处于犯罪状态。” - 约翰·冯·诺依曼 1951。 PRNG 永远不会生成真正的随机数。
-
Xilinx 应用笔记XAPP052 展示了如何以最少的硬件资源实现 PRNG。 PoC IP 核PoC.arith.prng 是一个可配置的 PRNG,用于 3 到 168 位输出值,实现 XAPP052 提供的 PRNG 多项式。
标签: vhdl xilinx-ise