测试用VHDL编写的8位LFSR时出错

测试用VHDL编写的8位LFSR时出错,vhdl,Vhdl,我是第一次使用,所以请容忍我 在一个简单的游戏中,我们必须为赋值编写一个8位LFSR形式的伪随机数生成器。我正在使用Xilinx ISE、我的笔记和此处提供的示例代码编写代码: 现在代码确实合成了,但是给了我关于灵敏度列表的警告。然而,当我运行测试台时,我得到了伪随机数的所有U值。我意识到这个随机数生成器是内部的,所以不应该有输出,但当我用伪随机数作为信号(该变量当前已注释掉)编写代码时,它不会在模拟中显示 以下是LFSR的代码,后面是相应试验台的代码: library IEEE; use I

我是第一次使用,所以请容忍我

在一个简单的游戏中,我们必须为赋值编写一个8位LFSR形式的伪随机数生成器。我正在使用Xilinx ISE、我的笔记和此处提供的示例代码编写代码:

现在代码确实合成了,但是给了我关于灵敏度列表的警告。然而,当我运行测试台时,我得到了伪随机数的所有U值。我意识到这个随机数生成器是内部的,所以不应该有输出,但当我用伪随机数作为信号(该变量当前已注释掉)编写代码时,它不会在模拟中显示

以下是LFSR的代码,后面是相应试验台的代码:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity LFSR_3_16_2013 is
port(       clk:            in  std_logic;
            rst:            in  std_logic;
            pseu_rand:  out std_logic_vector(7 downto 0));
end LFSR_3_16_2013;

architecture Behavioral of LFSR_3_16_2013 is
--signal        clk:            std_logic;
--signal        rst:            std_logic;
signal          seed:           std_logic_vector(7 downto 0):= "10000000";
signal          biffer:         std_logic_vector(7 downto 0); 
--signal        pseu_rand:      std_logic_vector(7 downto 0);

begin

lfsr : PROCESS(clk,rst)
begin
    if(rst='0') then
    --pseu_rand <= seed;

    biffer      <= seed;
    pseu_rand   <= biffer; 

    elsif (clk'event and  clk='1') then 
    --pseu_rand(0)              <= pseu_rand(7) xor pseu_rand(6);                      
    --pseu_rand(7 downto 1)     <= pseu_rand(6 downto 0); 

    biffer(0)                   <= biffer(7) xor biffer(6);                      
    biffer(7 downto 1)          <= biffer(6 downto 0); 
    pseu_rand                   <= biffer;

    end if;

    end process lfsr;
end Behavioral;
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;

ENTITY LFSR_tb_3_16_2013 IS
END LFSR_tb_3_16_2013;

ARCHITECTURE behavior OF LFSR_tb_3_16_2013 IS 

    -- Component Declaration for the Unit Under Test (UUT)

    COMPONENT LFSR_3_16_2013
    PORT(
         clk       : IN  std_logic;
         rst       : IN  std_logic;
         pseu_rand : OUT  std_logic_vector(7 downto 0)
        );
    END COMPONENT;


   --Inputs
   signal clk : std_logic := '0';
   signal rst : std_logic := '0';

    --Outputs
   signal pseu_rand : std_logic_vector(7 downto 0);

   -- Clock period definitions
   constant clk_period : time := 10 ns;

BEGIN

    -- Instantiate the Unit Under Test (UUT)
    uut: LFSR_3_16_2013 PORT MAP (
          clk => clk,
          rst => rst,
          pseu_rand => pseu_rand
        );

   -- Clock process definitions
   clk_process :process
   begin
        clk <= '0';
    wait for clk_period/2;
    clk <= '1';
    wait for clk_period/2;
   end process;


   -- Stimulus process
   stim_proc: process
   begin        
      -- hold reset state for 100 ns.
      wait for 100 ns;  

      wait for clk_period*10;

      -- insert stimulus here 
      rst <= '1';

      wait;
   end process;

END; 
IEEE库;
使用IEEE.STD_LOGIC_1164.ALL;
实体LFSR_3_16_2013为
端口(时钟:在标准逻辑中;
rst:标准逻辑中;
pseu_rand:out标准逻辑向量(7到0);
2013年3月至16月底;
LFSR_3_16_2013的架构是
--信号时钟:标准逻辑;
--信号rst:std_逻辑;
信号种子:标准逻辑向量(7到0):=“10000000”;
信号分频器:标准逻辑向量(7到0);
--信号pseu_rand:std_逻辑_向量(7到0);
开始
lfsr:过程(时钟、rst)
开始
如果(rst='0'),则

--pseu_rand敏感度列表告诉流程必须“唤醒”哪些操作。这意味着,您的进程只对clk或rst信号的活动作出反应。因此,在第一个时钟边缘出现之前,pseu_rand都是“U”。 对于可合成代码来说,这实际上不是问题。然而,如果你想改变这一点,在你的敏感度列表中添加种子和双歧

lfsr : PROCESS(clk,rst,seed,biffer)

顺便说一句,如果你使用(注释掉的)信号解决方案,你可以用seed直接定义pseu_rand,而不是过多地定义pseu_rand。。。因此,它从一开始就在模拟中定义

我认为发生的事情是当您取消对pseu_rand相关代码的注释时, 重置期间,您已两次指定该值

pseu_rand <= seed;

pseu_rand您当前的敏感度列表问题是由于种子异步加载到biffer和biffer到pseu_rand造成的。你可能不想要这两个

您正在使用Seed作为常量,所以将其设为常量。这修复了第一个异步加载:
常数种子:标准逻辑向量(7到0):=“10000000”

要解决第二个问题,请在此过程中删除两个分配:
我粘贴了你的代码,编译并运行了它。这似乎是工作(没有我们为我)…谢谢你的建议!很抱歉,我的回复太晚了,最后我去了办公时间,忙着做作业,以至于我在论坛上查看时都抽了个空。学校快结束了,很快就会有更多的人参加!谢谢你的建议!很抱歉,我的回复太晚了,最后我去了办公时间,忙着做作业,以至于我在论坛上查看时都抽了个空。学校快结束了,很快就会有更多的人参加!谢谢你的建议!很抱歉,我的回复太晚了,最后我去了办公时间,忙着做作业,以至于我在论坛上查看时都抽了个空。学校快结束了,很快就会有更多的人参加!
pseu_rand <= biffer;