Vhdl 伪随机图案生成器,输出不变

Vhdl 伪随机图案生成器,输出不变,vhdl,Vhdl,我使用modelsim模拟一个伪随机模式生成器,代码如下。问题是,当我强制将data_reg信号设置为种子值ex:000101010101111时,data_out显示的是相同的值,而不是随机值。我真的很感激在这件事上能得到的任何帮助 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity dff is Port

我使用modelsim模拟一个伪随机模式生成器,代码如下。问题是,当我强制将data_reg信号设置为种子值ex:000101010101111时,data_out显示的是相同的值,而不是随机值。我真的很感激在这件事上能得到的任何帮助

 library IEEE;
 use IEEE.STD_LOGIC_1164.ALL;
 use IEEE.STD_LOGIC_ARITH.ALL;
 use IEEE.STD_LOGIC_UNSIGNED.ALL;

 entity dff is
 Port ( CLK : in std_logic;
       RSTn : in std_logic;
       D : in std_logic;
       Q : out std_logic);
   end dff;

   architecture Behavioral of dff is
      begin
       process(CLK)
       begin
    if CLK'event and CLK='1' then
    if RSTn='1' then
    Q <= '1';

 else
    Q <= D;
    end if;
    end if;
    end process;
    end Behavioral;
使用LFSR的PRBS生成器的VHDL代码:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity lfsr is
    Port ( CLK : in  STD_LOGIC;
           RSTn : in  STD_LOGIC;
           data_out : out  STD_LOGIC_VECTOR (15 downto 0));
end lfsr;

architecture Behavioral of lfsr is

component dff
Port ( CLK : in std_logic;
           RSTn : in std_logic;
           D : in std_logic;
           Q : out std_logic);
end component;

signal data_reg : std_logic_vector(15 downto 0);
signal tap_data : std_logic;

begin
  process(CLK)
  begin
  tap_data <= (data_reg(1) xor data_reg(2)) xor (data_reg(4) xor
  data_reg(15));
  end process;

  stage0: dff
    port map(CLK, RSTn, tap_data, data_reg(0));

g0:for i in 0 to 14 generate
    stageN: dff
      port map(CLK, RSTn, data_reg(i), data_reg(i+1));
  end generate;
  data_out <= data_reg after 3 ns;
end Behavioral;

首先。在您的LFSR中,您有一个对CLK敏感的流程,该流程只应是组合的:

processCLK-不正确 -更改为VHDL-2008中的以下内容或全部内容 processdata_注册 您也可以将其作为正式流程之外的连续分配来实现,在本例中,正式流程的功能相同

当您强制data_reg为某个值时,您将覆盖设计中实例化的正常信号驱动程序。在GUI中,强制命令默认为冻结。一旦设置到位,驱动程序将无法更新数据,因为在取消之前,冻结力占主导地位。在“强制”对话框中,选择存款种类以更改状态,而不在后续时钟上覆盖驱动程序

Modelsim文档对不同的力类型有如下说明:

冻结-按指定值冻结项目,直到再次强制或使用noforce命令取消强制

驱动-将驱动程序附加到项目并驱动指定值,直到再次强制该项目或使用noforce命令取消强制该项目。此选项对于未解析的信号是非法的

存款-将项目设置为指定值。该值将一直保留,直到出现后续驱动程序事务,或者直到再次强制该项,或者直到使用noforce命令取消强制该项


注:不幸的是,许多教学材料都演示了std_logic_arith和std_logic_unsigned库的使用,但这些不是实际的IEEE标准,不应在符合标准的VHDL中使用。用数字来代替,或者,在你的情况下,只需删除它们,因为你没有使用这些库中的任何算术。

上帝保佑你,他最美好的祝福凯文:你是英雄;我没有话要感谢你…它工作得很完美:上帝保佑你:我必须在一小时内提交它…你来救我:我忘记给你贴标签了…我是新来的:再次感谢你…如果你能在另一个问题上帮我,这里是该页面的链接