首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在仿真过程中LFSR不产生随机值

在仿真过程中LFSR不产生随机值
EN

Stack Overflow用户
提问于 2017-08-03 14:13:04
回答 1查看 146关注 0票数 1

我对VHDL很陌生,但有一些想法。我创建了这个LFSR,但不知道为什么它被困在初始种子值和其他XOR值之间。我和16 Lite和ISim一起工作。

代码语言:javascript
复制
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是实际的反馈(taps为16,15,13和4),正如我用随机抽头检查的那样,但仍然没有改进。

我使用的测试平台是:

代码语言:javascript
复制
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;

这就是我得到的结果:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-04 08:16:44

是的,它没有移动,但这是一个正在发挥作用。

代码语言:javascript
复制
            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);

希望它能帮助别人。谢谢各位

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45486770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档