线性反馈移位寄存器(Linear Feedback Shift Register,简称LFSR)是一种数字电路设计和密码学中常用的寄存器类型。它是一种简单而高效的方式,用于生成伪随机的二进制序列,并在数据混淆、错误检测和加密等领域中有应用。LFSR通常用于流密码的生成。
以下是LFSR的关键特性和组成部分:
-
移位寄存器:LFSR通常由一组触发器或存储元件连接在一条链上组成,每个触发器存储一个二进制位。
-
反馈机制:名称中的“线性反馈”指的是将移位寄存器的特定位以线性方式连接起来的反馈回路。反馈机制涉及对寄存器的某些位进行异或(XOR)运算,并将结果反馈到移位寄存器的输入上。参与反馈回路的位的位置称为“反馈点”。
-
时钟信号:LFSR受时钟信号控制,这意味着它们在每个时钟周期中将其内容向右(或向左)移动一位。移位寄存器的输入位通常来自其中一个触发器,该位随后被移动到下一个触发器。反馈机制然后确定输入位的值。
-
序列生成:LFSR生成一个二进制位序列,看起来是随机的,但完全由初始状态(种子值)和反馈机制确定。该序列在一定数量的时钟周期后重复,这个数量称为LFSR的周期。周期取决于LFSR的具体配置和大小。
-
多项式表示:LFSR的配置通常使用多项式表示。多项式表示了反馈点和它们对应的系数。多项式用于确定反馈机制的反馈点。
-
应用领域:
- 伪随机数生成:LFSR用于生成各种需要伪随机序列的应用,包括计算机科学和工程领域。
- 错误检测和纠正:LFSR可用于检测数据传输和存储中的错误。它们通常用于循环冗余校验(CRC)算法。
- 密码学:LFSR在某些加密和解密算法中使用,特别是在流密码中。
LFSR在硬件中实现相对简单,因此适用于需要伪随机序列的各种应用。然而,它们的简单性也意味着它们的输出序列可能具有一定的统计特性,不适合用于密码学目的,除非进行额外的处理。在密码学中使用时,通常与其他密码学技术结合使用以增强安全性。
Write the Verilog code for this sequential circuit (Submodules are ok, but the top-level must be named top_module). Assume that you are going to implement the circuit on the DE1-SoC board. Connect the R inputs to the SW switches, connect Clock to KEY[0], and L to KEY[1]. Connect the Q outputs to the red lights LEDR.
module top_module (
input [2:0] SW, // R
input [1:0] KEY, // L and clk
output [2:0] LEDR); // Q
wire b;
assign b = LEDR[1] ^ LEDR[2];
submodule module1(KEY[0], KEY[1], {SW[0], LEDR[2]}, LEDR[0]);
submodule module2(KEY[0], KEY[1], {SW[1], LEDR[0]}, LEDR[1]);
submodule module3(KEY[0], KEY[1], {SW[2], b}, LEDR[2]);
endmodule
module submodule(
input clk,
input L,
input[1:0] in,
output Q);
always@(posedge clk)begin
case(L)
1'b0: Q <= in[0];
1'b1: Q <= in[1];
endcase
end
endmodule