2017-08-03 10 views
0

私はVHDLを初めて使っていますが、何か考えがあります。私はこのLFSRを作ったが、なぜ初期のシード値と他のXOR値との間にこだわるのか分からない。 私はアルテラのQuartus 16 LiteとISimを扱っています。私はランダムタップが、まだ改善でチェックとしてLFSRはシミュレーション中にランダムな値を生成しません。

library ieee; 
use ieee.std_logic_1164.all; 

--creating a galois LFSR 
entity LFSR is 
    port (
    clk  : in std_logic; 
    rst  : in std_logic; 
    en   : in std_logic; 
    rdm_out : out std_logic_vector(15 downto 0); 
    rdm_out_a : out std_logic_vector(7 downto 0); 
    rdm_out_b : out std_logic_vector(7 downto 0); 
    lfsr_Done : out std_logic --lfsr done 
    ); 
end entity LFSR; 

architecture behavioral of LFSR is 
    signal temp_out : std_logic_vector(15 downto 0) := (0 => '1' ,others => '0'); --initial value as seed 
    signal temp_done : std_logic; 

begin 

    process (clk, rst) 
    begin 
    if rising_edge (clk) then --module operates only when enabled 
     if (rst = '1') then 
      temp_out <= (0 => '1' ,others => '0'); 
      temp_done <= '0'; 

     elsif (en = '1') then  
     temp_out <= temp_out(15 downto 11) & (temp_out(10) xor temp_out(0)) & temp_out(9 downto 5) & (temp_out(4) xor temp_out(0)) & temp_out(3 downto 0); 
     --temp_out <= (temp_out(15) xor temp_out(0)) & (temp_out(14) xor temp_out(0)) & temp_out(13) & (temp_out(12) xor temp_out(0)) & temp_out(11 downto 4) & (temp_out(3) xor temp_out(0)) & temp_out(2 downto 0); 
     temp_done <= '1'; 
     end if; 
    end if; 
    end process; 


    rdm_out <= temp_out(15 downto 0); 
    rdm_out_a <= temp_out(15 downto 8); 
    rdm_out_b <= temp_out(7 downto 0); 
    lfsr_Done <= temp_done; 
end architecture behavioral;` 

コメントアウトtemp_outは(タップが16,15,13であり、4)実際のフィードバックです。

そして、私が使用したテストベンチはこれです:

library ieee; 
use ieee.std_logic_1164.all; 

entity lfsr_tb is 
end lfsr_tb; 

architecture test_bench of lfsr_tb is 

component LFSR 
     port ( 
     clk : in std_logic; 
     rst : in std_logic; 
     en : in std_logic; 
     rdm_out : out std_logic_vector(15 downto 0); 
     rdm_out_a : out std_logic_vector(7 downto 0); 
     rdm_out_b : out std_logic_vector(7 downto 0); 
     lfsr_Done : out std_logic); 

end component; 


signal clk1: std_logic; 
signal rst1: std_logic; 
signal en1 : std_logic; 

signal rdm_out1 : std_logic_vector(15 downto 0); 
signal rdm_out_a1 : std_logic_vector(7 downto 0); 
signal rdm_out_b1 : std_logic_vector(7 downto 0); 
signal lfsr_Done1 : std_logic ; 

begin 

mapping: LFSR port map(
clk => clk1, 
rst => rst1, 
en => en1, 
rdm_out => rdm_out1, 
rdm_out_a => rdm_out_a1, 
rdm_out_b => rdm_out_b1, 
lfsr_Done => lfsr_Done1); 

clock: process 
begin 
    clk1 <= '0'; wait for 10 ps; 
    clk1 <= '1'; wait for 10 ps; 
end process; 

reset: process 
begin 
    rst1 <= '1'; wait for 10 ps; 
    rst1 <= '0'; 
    en1 <= '1'; wait for 800 ps; 
end process; 

end test_bench; 

これは私が取得しています結果である:

image

+2

あなたのLFSRはシフトされていません、それはLFR(いいえS)です。もう一度、多分、LFSRのあなたの理解をチェックしてください。 –

答えて

0

はい、それはシフトしていなかったが、これは1つが今取り組んでいるです。

  temp_out(15) <= temp_out(0);-- shifting bit 
      temp_out(14) <= temp_out(15); 
      temp_out(13) <= temp_out(14) xor temp_out(0); 
      temp_out(12) <= temp_out(13) xor temp_out(0); 
      temp_out(11) <= temp_out(12); 
      temp_out(10) <= temp_out(11) xor temp_out(0); 
      temp_out(9 downto 0) <= temp_out(10 downto 1); 

他人に役立つことを願っています。ありがとうございました

関連する問題