当前位置: 首页 > article >正文

Lfsr32

首先分析 Lfsr5 

        首先要理解什么是抽头点(tap),注意到图中有两个触发器的输入为前级输出与q[0]的异或,这些位置被称为 tap position.通过观察上图,所谓抽头点指的就是第5个,第3个寄存器的输入经过了异或逻辑。

那么回到本题就是第 32,22,2,1 个寄存器的输入经过异或逻辑,也可以推断出这些寄存器的跳变逻辑。

  • q[21] <= q[22]^q[0]
  • q[1] <= q[2]^q[0]
  • q[0] <= q[1]^q[0]

q[31]则比较特殊,其为输入端,异或门的一端固定为低电平,所以相当于输入q[0]本身

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

普通的循环右移寄存器:q <= {q[0],q[31:1]}; 然后将其中有异或逻辑参与的比特替换即可。

q <= {q[0],q[31-:9],q[22]^q[0],q[21:3],q[2]^q[0],q[1]^q[0]};

q[31-:9] 这个语法表示从 q[31] 开始的 9 个 bit 。

或者写:q[31:31-9+1],[5:3]是[3],[4],[5]三个bit。所以第22个寄存器所在位为 【21】。

位30 至 21 为9.所以 可写为 q[31 :  23 ], q[21] 替换为q[22]^q[0],,q[20]~q[2] 有19个bit,所以

对应为q[21:21-19+1] ,   q[21:3].

module top_module(
    input clk,
    input reset,    // Active-high synchronous reset to 32'h1
    output [31:0] q
); 
    reg [31:0] qq;
    always @(*)begin
        //qq<= q>>1;
        qq <= {q[0],q[31:1]};
        qq[31] <= q[0];
        qq[21] <= q[22]^q[0];
        qq[1] <= q[2]^q[0];
        qq[0] <= q[1]^q[0];
    
    end
    always @(posedge clk)begin
        if(reset)
            q <= 32'h1;
        else
            q <= qq;
    
    
    end
endmodule

  Lfsr5 此题为  q<= {q[0],q[4],q[3]^q[0],q[2],q[1]};


http://www.kler.cn/news/360101.html

相关文章:

  • Spring Boot HikariCP数据库连接池入门
  • 数据驱动时代:五款免费报表工具深度解析
  • 【无人机设计与控制】基于自组织多模态多目标鸽群优化算法MMOPIO求解无人机三维路径规划
  • 驱动精灵 v9.70.0.104 单文件纯净绿色版
  • 邦芒贴士:职场新人需远离的7种坏习惯
  • 【LeetCode】动态规划—2466. 统计构造好字符串的方案数(附完整Python/C++代码)
  • ubuntu linux安装nessus企业版
  • 【SpringCloud】05-配置中心
  • 微信小程序——消息订阅
  • Spring Boot项目中怎么设置内容安全策略Content Security Policy
  • C++题集
  • ICRA@40 周年大会:多指手既可抓取,又可以变成多足机器人
  • [openwrt-21.02]openwrt-21.02 增加固件编译日期时间及git记录到openwrt_release文件
  • 【微信小程序_15_下拉刷新与上拉触底】
  • JavaScript中实现十进制转二进制算法
  • 1020接口测试面试题随记
  • golang的数组、slice和map
  • 【专题】数据库编程
  • 人工智能技术的应用前景及其对生活和工作方式的影响
  • sql server 行转列及列转行