Galois 伪随机数生成器和循环冗余校验 (CRC) 实现不起作用

问题描述 投票:0回答:0

晚上好^^

再一次,我遇到了一个VHDL描述的问题,我似乎无法找到或识别问题。

我需要实现一个 Galois 伪随机数生成器。这是一张图片:

最后应该会变成循环冗余校验(CRC),虽然任务没有提供很清楚的描述,而且我们也没有在讲座中涉及这个话题。

问题是在仿真中,我从仿真开始到仿真结束的输出端(x_out)的所有引脚上都是'1',我无法正确解释。这似乎不是预期的行为。描述没有抛出任何警告或错误,精心设计的原理图到目前为止似乎是正确的。

编辑:(如果我将 Q_out 和 D_in 标准值从 :='1' 更改为无,则输出未定义...)

Schematic

假设一:会不会是我这样接内部信号不被允许? 假设 2:D 触发器没有适当的初始值?

对于正在使用的D触发器,我最初写道: Q_out: out std_logic := '1'; -- 这样他们就可以在下一个触发器的输出端输出“1”,因为以某种方式将默认值分配给输入引脚是行不通的。 D_in: 在 std_logic := '1'; -- 由于某些未知原因,这不起作用。

也许你有一个好主意,这是另一个小问题,比如忘记了 rising_edge 检查......提前感谢你的帮助。

这里是一个说明电路应该如何构建的图表:

circuit

我知道最后我会实现它是一个通用循环,但我会首先检查这个设计是如何工作的:)

来自伪随机数生成器的代码:


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;



entity PZG is
    generic(
        nbit : integer :=4
    );
    Port(
        clk_in_m : in std_logic;
        k_in : in std_logic_vector(nbit downto 0);
        x_out : out std_logic_vector(nbit-1 downto 0)
    );
end PZG;

architecture Behavioral of PZG is
    component D_FF
        Port(
                clk_in : in std_logic;
                D_in : in std_logic := '1';
                Q_out : out std_logic := '1'
        );
    end component;
    signal internal_and : std_logic_vector(nbit downto 0);
    signal internal_out : std_logic_vector(nbit-1 downto 0);
    signal internal_xor : std_logic_vector(nbit-2 downto 0);
begin

    X0: D_FF port map(D_in=>internal_and(0),clk_in=>clk_in_m,Q_out=>internal_out(0));
    X1: D_FF port map(D_in=>internal_xor(0),clk_in=>clk_in_m,Q_out=>internal_out(1));
    X2: D_FF port map(D_in=>internal_xor(1),clk_in=>clk_in_m,Q_out=>internal_out(2));
    X3: D_FF port map(D_in=>internal_xor(2),clk_in=>clk_in_m,Q_out=>internal_out(3));
    
    internal_and(0)<= k_in(0) and internal_and(nbit);
    internal_and(1) <= k_in(1) and internal_and(nbit);
    internal_and(2) <= k_in(2) and internal_and(nbit);
    internal_and(3) <= k_in(3) and internal_and(nbit);
    internal_and(4) <= k_in(4) and internal_out(3);

    internal_xor(0) <= internal_out(0) xor internal_and(1);
    internal_xor(1) <= internal_out(1) xor internal_and(2);
    internal_xor(2) <= internal_out(2) xor internal_and(3);

    x_out(0) <= internal_out(0);
    x_out(1) <= internal_out(1);
    x_out(2) <= internal_out(2);
    x_out(3) <= internal_out(3);

end Behavioral;
Code from the D-Flip-Flop:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;


entity D_FF is
    Port(
        clk_in : in std_logic;
        D_in : in std_logic := '1';
        Q_out : out std_logic := '1'
    );
end D_FF;

architecture Behavioral of D_FF is
    signal internal_signal : std_logic := '1';
begin
    process(clk_in)
        begin
            if(rising_edge(clk_in)) then
                Q_out <= D_in;
            end if;
    end process;


end Behavioral;
vhdl fpga vivado
© www.soinside.com 2019 - 2024. All rights reserved.