0
我試圖生成16位隨機序列。 問題是輸出處於未定義狀態。我覺得這是由於這些異或聲明中的並行處理。所以我拖延了,但它仍然不起作用。如何使用16位LFSR創建僞隨機序列
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永遠不會生成真正的隨機數字。 – JHBonarius
Xilinx應用說明[XAPP052](https://www.xilinx.com/support/documentation/application_notes/xapp052.pdf)顯示瞭如何以最少的硬件資源實現PRNG。 PoC IP核心[PoC.arith.prng](https://github.com/VLSI-EDA/PoC/blob/master/src/arith/arith_prng.vhdl?ts=2)是一個可配置的PRNG,適用於3到168位輸出實現由XAPP052提供的PRNG多項式的值。 – Paebbels