LFSR代表线性反馈移位寄存器,它是一种在 FPGA内部有用的设计。LFSR易于合成,这意味着它们占用相对较少的资源,并且可以在FPGA内以非常高的时钟速率运行。有许多应用程序可以从使用LFSR中受益,包括:
计数器 测试模式生成器 数据加扰 测试模式生成器 加密
线性反馈移位寄存器实现为FPGA内部的一系列触发器,它们作为移位寄存器连接在一起。移位寄存器链的几次抽头用作XOR或XNOR门的输入。然后,该门的输出用作反馈到移位寄存器链的开头,因此用作LFSR中的反馈。
当LFSR运行时,各个触发器生成的模式是伪随机的,这意味着它接近随机。它不是完全随机的,因为从LFSR模式的任何状态,您都可以预测下一个状态。移位寄存器的一些属性值得注意:
1.LFSR模式是伪随机的。
2.输出模式是确定性的。您可以通过了解XOR门的位置以及当前模式来确定下一个状态。
3.当抽头使用XOR门时,不会出现全0的模式。由于0与0的异或将始终产生0,因此LFSR将停止运行。
4.当抽头使用XNOR门时,不会出现全1的模式。由于1 XNORed为1将始终产生1,因此LFSR将停止运行。
5.任何LFSR的最大迭代次数= 2^位 -1
更长的LFSR将花费更长的时间来完成所有迭代。对于N比特的LFSR,最长可能的迭代次数是2^N -1。如果你想想看,东西所有可能的模式,是N位长为2^N。因此,只有一种模式无法使用LFSR表达。当使用XOR门时,该模式全为0,或者当使用XNOR门作为反馈门时,所有1都是1。
VHDL和Verilog代码可以创建您想要的任何N位宽LFSR。它使用多项式为每个位宽创建最大可能的LFSR长度。因此,对于3位,需要2^3 -1 = 7个时钟来运行所有可能的组合,对于4位:2^4 -1 = 15,5位:2^5 -1 = 31等。我基于此一个XNOR实现,允许FPGA在LFSR上以全零状态启动。
VHDL实现代码
Testbench
- library ieee;
- use ieee.std_logic_1164.all;
-
- entity LFSR_TB is
- end entity LFSR_TB;
-
- architecture behave of LFSR_TB is
-
- constant c_NUM_BITS : integer := 5;
- constant c_CLK_PERIOD : time := 40 ns; -- 25 MHz
-
- signal r_Clk : std_logic := '0';
- signal w_LFSR_Data : std_logic_vector(c_NUM_BITS-1 downto 0);
- signal w_LFSR_Done : std_logic;
-
- begin
-
- r_Clk <= not r_Clk after c_CLK_PERIOD/2;
-
- LFSR_1 : entity work.LFSR
- generic map (
- g_Num_Bits => c_NUM_BITS)
- port map (
- i_Clk => r_Clk,
- i_Enable => '1',
- i_Seed_DV => '0',
- i_Seed_Data => (others => '0'),
- o_LFSR_Data => w_LFSR_Data,
- o_LFSR_Done => w_LFSR_Done
- );
-
-
- end architecture behave;
复制代码
|