HDLBits 系列(21)LFSR(线性反馈移位寄存器)

举报
李锐博恩 发表于 2021/07/15 03:36:30 2021/07/15
【摘要】 目录 5 bit LFSR 3 bit LFSR 32 bit LFSR 5 bit LFSR A linear feedback shift register is a shift register usually with a few XOR gates to produce the next state of the shift register. A Ga...

目录

5 bit LFSR

3 bit LFSR

32 bit LFSR


5 bit LFSR

A linear feedback shift register is a shift register usually with a few XOR gates to produce the next state of the shift register. A Galois LFSR is one particular arrangement where bit positions with a "tap" are XORed with the output bit to produce its next value, while bit positions without a tap shift. If the taps positions are carefully chosen, the LFSR can be made to be "maximum-length". A maximum-length LFSR of n bits cycles through 2n-1 states before repeating (the all-zero state is never reached).

The following diagram shows a 5-bit maximal-length Galois LFSR with taps at bit positions 5 and 3. (Tap positions are usually numbered starting from 1). Note that I drew the XOR gate at position 5 for consistency, but one of the XOR gate inputs is 0.

Module Declaration

module top_module( input clk, input reset, // Active-high synchronous reset to 5'h1 output [4:0] q
); 

线性反馈移位寄存器是通常带有几个XOR门的移位寄存器,用于产生移位寄存器的下一个状态。 Galois LFSR是一种特殊的移位寄存器,其中将带有“抽头”的位位置与输出位进行异或运算以产生其下一个值。 如果仔细选择抽头位置,则可以将LFSR设为“最大长度”。 n位的最大长度LFSR在重复之前循环经过2n-1个状态(永远不会达到全零状态)。

下图显示了一个5位最大长度的Galois LFSR,在位置5和3处有抽头(抽头位置通常从1开始编号)。 请注意,为保持一致性,我在位置5处绘制了XOR门,但XOR门输入之一为0。

说到底,就是一个移位寄存器,只不过某些输入不是上一级触发器的输出,而是有可能和其他级的输出进行了异或作为当前的输入;

给出设计(与0异或等于本身):


  
  1. module top_module(
  2. input clk,
  3. input reset, // Active-high synchronous reset to 5'h1
  4. output reg [4:0] q
  5. );
  6. always@(posedge clk) begin
  7. if(reset) q <= 5'h1;
  8. else begin
  9. // q[4] <= q[0];
  10. // q[3] <= q[4];
  11. // q[2] <= q[3]^q[0];
  12. //q[1] <= q[2];
  13. //q[0] <= q[1];
  14. q <= {q[0],q[4],q[3]^q[0],q[2:1]};
  15. end
  16. end
  17. endmodule

3 bit 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 Declaration

module top_module (
	input [2:0] SW, // R
	input [1:0] KEY, // L and clk
	output [2:0] LEDR);  // Q

下面对上面的电路进行设计:

首先,可以看出有三个类似的模块可以调用,那就描述出来这个子模块如下:


  
  1. module sequential_com(
  2. input clk,
  3. input in1,
  4. input in0,
  5. input sel,
  6. output q
  7. );
  8. wire in_sel;
  9. assign in_sel = sel ? in1 : in0;
  10. reg q_mid = 0;
  11. always@(posedge clk) begin
  12. q_mid <= in_sel;
  13. end
  14. assign q = q_mid;
  15. endmodule

例化该子模块得到顶层设计:


  
  1. module top_module (
  2. input [2:0] SW, // R
  3. input [1:0] KEY, // L and clk
  4. output [2:0] LEDR); // Q
  5. sequential_com isnt0(
  6. .clk(KEY[0]),
  7. .in1(SW[0]),
  8. .in0(LEDR[2]),
  9. .sel(KEY[1]),
  10. .q(LEDR[0])
  11. );
  12. sequential_com isnt1(
  13. .clk(KEY[0]),
  14. .in1(SW[1]),
  15. .in0(LEDR[0]),
  16. .sel(KEY[1]),
  17. .q(LEDR[1])
  18. );
  19. sequential_com isnt2(
  20. .clk(KEY[0]),
  21. .in1(SW[2]),
  22. .in0(LEDR[1]^LEDR[2]),
  23. .sel(KEY[1]),
  24. .q(LEDR[2])
  25. );
  26. endmodule

32 bit LFSR

Build a 32-bit Galois LFSR with taps at bit positions 32, 22, 2, and 1.

第一题就写了5 bit的LFSR,这一题只不过多了几位,且告诉你抽头在32, 22, 2, and 1,这几个位置,请设计电路?

如何做这个题目呢?

其实很简单,先写一个位数少的,找下规律,就可以了:


  
  1. module top_module(
  2. input clk,
  3. input reset, // Active-high synchronous reset to 32'h1
  4. output [31:0] q
  5. );
  6. reg [31:0] q1;
  7. always@(posedge clk) begin
  8. if(reset) q1 <= 32'h1;
  9. else begin
  10. q1 <= {q1[0],q1[31:23],q1[0]^q1[22],q1[21:3],q1[0]^q1[2],q1[0]^q1[1]};
  11. end
  12. end
  13. assign q = q1;
  14. endmodule

 

 

 

 

 

文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。

原文链接:reborn.blog.csdn.net/article/details/103274946

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。