我是第一次使用所以请多多包涵。
我们必须为分配进行的简单游戏的一部分涉及以 8 位 LFSR 的形式编写伪随机数生成器。我正在使用 Xilinx ISE、我的笔记和此处提供的示例代码编写代码:
http://www.oocities.org/siliconvalley/screen/2257/vhdl/lfsr/lfsr.html
现在代码确实合成了,但给了我关于敏感度列表的警告。然而,当我运行测试台时,我得到了 pseudo_rand 的所有 U 值。我意识到这个随机数生成器将是内部的,因此不应该有输出,但是当我使用 pseudo_rand 作为信号编写代码时(该变体当前已被注释掉),它不会出现在模拟中。
下面是 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;
任何帮助将不胜感激,我很难过。
谢谢,尤西夫·努里扎德