module lfsr_3bits #(parameter N = 3)( input sys_clk, input sys_rst_n, input L, input [N-1 : 0] R, output reg [N-1 : 0] prNUM );module seldff( input sys_clk, input sys_rst_n, input L, input r_in, input q_in, output Q );设计一个3位线性反馈移位寄存器(LFSR)电路,如下图所示。电路采用低电平同步复位信号。本设计需要通过实例化图中红色框中的子模块(D触发器 + 多路选择器)实现。
时间: 2024-02-14 16:13:52 浏览: 148
线性反馈移位寄存器
以下是基于Verilog的3位LFSR电路设计:
```verilog
module lfsr_3bits #(parameter N = 3)(
input sys_clk,
input sys_rst_n,
input L,
input [N-1 : 0] R,
output reg [N-1 : 0] prNUM
);
wire [2:0] feedback; // 用于生成LFSR反馈信号的3位线性组合
// D触发器 + 多路选择器子模块
module seldff(
input sys_clk,
input sys_rst_n,
input L,
input r_in,
input q_in,
output Q
);
reg [1:0] sel;
always @ (L, r_in) begin
case (L)
2'b00: sel = 2'b00;
2'b01: sel = r_in == 2'b00 ? 2'b00 : 2'b01;
2'b10: sel = r_in == 2'b00 ? 2'b00 : 2'b10;
2'b11: sel = 2'b11;
endcase
end
always @ (posedge sys_clk, negedge sys_rst_n) begin
if (!sys_rst_n) begin
Q <= 1'b0;
end else begin
case (sel)
2'b00: Q <= 1'b0;
2'b01: Q <= q_in[1];
2'b10: Q <= q_in[0];
2'b11: Q <= q_in[1] ^ q_in[0];
endcase
end
end
endmodule
// 生成LFSR反馈信号的线性组合
assign feedback = {prNUM[2], prNUM[1], prNUM[0]} ^ {R[2], R[1], R[0]};
// 实例化3个D触发器 + 多路选择器子模块,构成3位LFSR电路
seldff #(.N(N)) dff0 (.sys_clk(sys_clk), .sys_rst_n(sys_rst_n), .L(L), .r_in(R[0]), .q_in(prNUM[0]), .Q(prNUM[0]));
seldff #(.N(N)) dff1 (.sys_clk(sys_clk), .sys_rst_n(sys_rst_n), .L(L), .r_in(R[1]), .q_in(prNUM[1]), .Q(prNUM[1]));
seldff #(.N(N)) dff2 (.sys_clk(sys_clk), .sys_rst_n(sys_rst_n), .L(L), .r_in(R[2]), .q_in(prNUM[2]), .Q(prNUM[2]));
endmodule
```
这里使用了一个名为 `seldff` 的子模块来实现D触发器 + 多路选择器的功能。在 `seldff` 模块中,我们通过 `L` 和 `r_in` 信号确定当前状态下的选择信号 `sel`,然后根据 `sel` 和 `q_in` 生成下一个状态的输出信号 `Q`。在 `lfsr_3bits` 模块中,我们实例化3个 `seldff` 模块,用于构成3位LFSR电路。通过 `feedback` 信号来生成LFSR反馈信号的线性组合,从而实现LFSR电路的功能。
阅读全文