Vhdl 伪随机图案生成器,输出不变
我使用modelsim模拟一个伪随机模式生成器,代码如下。问题是,当我强制将data_reg信号设置为种子值ex:000101010101111时,data_out显示的是相同的值,而不是随机值。我真的很感激在这件事上能得到的任何帮助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
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中使用。用数字来代替,或者,在你的情况下,只需删除它们,因为你没有使用这些库中的任何算术。上帝保佑你,他最美好的祝福凯文:你是英雄;我没有话要感谢你…它工作得很完美:上帝保佑你:我必须在一小时内提交它…你来救我:我忘记给你贴标签了…我是新来的:再次感谢你…如果你能在另一个问题上帮我,这里是该页面的链接