0
16ビットのランダムシーケンスを生成しようとしています。 問題は、出力が未定義状態になっていることです。私はこれがxorステートメントでの並列処理によるものだと感じています。だから私は遅れを入れましたが、それはまだ動作しません。あなたのLFSRにいくつかの小さな構造的な変更を加える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
ザイリンクスアプリケーションノート[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)は、3〜168の設定可能なPRNGですビットは、XAPP052によって提供されるPRNG多項式を実装する値を出力します。 – Paebbels