Verilog中移位寄存器的描述以及理解
一、移位寄存器
移位寄存器是一种在若干相同时间脉冲下工作的以触发器为基础的器件,数据以并行或串行的方式输入到该器件中,然后每个时间脉冲依次向左或右移动一个比特,在输出端进行输出。
module top_module(input clk,input rst_n,input in,output out );reg [3:0] q;always @(posedge clk) beginif (rst_n == 1'b0) beginq <= 4'd0; endelse beginq <= {in,q[3:1]};//右移、、q <= {q[4:1],in} 左移endendassign out = q[0];//assign out = q[4];
endmodule
二、算数移位寄存器
算数左移:和逻辑左移一样。空出来的位用0补;
算数右移:算术移位,也就是包含符号位的移位,对于正数来说,最高位为0,对于负数来说,最高位为1,所以进行算术移位时,如果是右移,就要将符号位补在高位。
module Arithmetic_shift(input wire clk,input wire rst_n,input wire en,input wire [1:0] shift_state,input wire [4:0] data,output reg [4:0] q);parameter SHIFT_LEFT = 2'b00;
parameter SHIFT_RIGHT = 2'b10;always @(posedge clk ) beginif (rst_n == 1'b0) beginq <= data;endelse if (en) begincase(shift_state)SHIFT_LEFT:q <= q<<1; //左移一位SHIFT_RIGHT:begin //右移一位if(q[4] == 0)begin//为正数q <= q>>1;endelse beginq <= {1'b1,q[4:1]};//否则为负数endenddefault : q <= 'd0;endcaseend
end
endmodule
三、 线性反馈移位寄存器LFSR(linear feedback shift register )
线性反馈移位寄存器的应用包括生成伪随机数,伪随机噪声序列,快速数字计数器,还有扰频器。线性反馈移位寄存器在硬件和软件方面的应用都非常得普遍。循环冗余校验中用于快速校验传输错误的数学原理,就与线性反馈移位寄存器密切相关。
运行LFSR时,由各个触发器生成的模式是伪随机的,这意味着它接近随机。 它不是完全随机的,因为从LFSR模式的任何状态,您都可以预测下一个状态。 有一些重要的移位寄存器属性需要注意:
LFSR模式是伪随机的。
输出模式是确定性的。 您可以通过了解XOR门的位置以及当前模式来确定下一个状态。
当抽头使用XOR门时,全0的模式不会出现。 由于0与0异或将始终产生0,因此LFSR将停止运行。
当抽头使用XNOR门时,全1的模式将不会出现。 由于将1与1进行异或运算将始终产生1,因此LFSR将停止运行。
任何LFSR的最大可能迭代次数= 2^Bits-1
下面给出在HDLbits中你的一个例子并用verilog实现
Build a 32-bit Galois LFSR with taps at bit positions 32, 22, 2, and 1.
module LFSR(input wire clk,input wire rst_n, output reg [31:0] q
); always@(posedge clk or negedge rst_n) beginif(rst_n == 1'b0) q <= 32'h1;else beginq <= {q[0],q[31:23],q[22]^q[0],q[21:3],q[2]^q[0],q[1]^q[0]};endend
endmodule
参考:【Verilog】移位寄存器总结:移位寄存器、算数移位寄存器、线性反馈移位寄存器(LFSR)_米多奇米饼的博客-CSDN博客_移位寄存器
Verilog中移位寄存器的描述以及理解相关推荐
- Verilog中#的使用与理解
我在verilog中test_bench中遇到这样的问题,记录一下. timescale 1ns / 1ps 基本知识:1ns=1000ps 含义为:时延单位为1ns,时延精度为1ps. 简而言之,前 ...
- Verilog初级教程(16)Verilog中的控制块
文章目录 前言 正文 条件语句if 语法 硬件实现 循环语句 forever repeat while for 往期回顾 参考资料及推荐关注 前言 硬件行为的实现离不开条件语句和其他控制逻辑流的方式. ...
- FPGA之道(35)Verilog中的并行与串行语句
文章目录 前言 Verilog的并行语句 Verilog连续赋值语句 普通连续赋值语句 条件连续赋值语句 Verilog程序块语句 沿事件 纯组合always 纯时序always 具有同步复位的alw ...
- Verilog中inout端口的使用方法
Verilog中inout端口的使用方法 (本文中所有Verilog描述仅为展示inout端口的用法,实际描述则需要更丰富的功能描述) Inout端口的使用 在芯片中为了管脚复用,很多管脚都是双向的, ...
- Verilog 中 wire 和 reg 数据类型区别
两者差别很大,完全不能取消. 在Verilog中,wire永远是wire,就是相当于一条连线,用来连接电路,不能存储数据,无驱动能力,是组合逻辑,只能在assign左侧赋值,不能在always @ 中 ...
- verilog中的定点数、浮点数、定点小数、定点整数的表示及运算
1.定点数: 顾名思义定点数就是小数位固定不变的数叫做定点数,也就是小数点是定在某个位置不变的数. 2.定点数的分类: (1)定点整数:定点整数的小数点后面没有其他的数值,即小数点定在了数的最后面 定 ...
- Verilog中 reg和wire 用法 以及always和assign的区别
1.从仿真角度来说,HDL语言面对的是编译器,相当于使用软件思路,此时: wire对应于连续赋值,如assign: reg对应于过程赋值,如always,initial: 2.从综合角度,HDL语言面 ...
- Verilog HDL可综合描述(高质量Verilog书写)
参考视频:中国大学MOOC 芯动力--硬件加速设计方法 (2.1节) 本篇所有内容来源于<芯动力--硬件加速设计方法>此课程的教学视频 .ppt等相关资料. 一.VerilogHDL可综 ...
- Verilog中同步复位和异步复位比较
[Verilog] 同步复位和异步复位比较 同步复位 sync 异步复位 async 特点 复位信号只有在时钟上升沿到来时才能有效. 无论时钟沿是否到来,只要复位信号有效,就进行复位. Verilo ...
最新文章
- 将不确定变为确定~Flag特性的枚举是否可以得到Description信息
- nginx代理设置域名跳转/域名重定向
- 一天快速入门python
- Linkis EngineConnPlugin引擎插件安装文档
- OpenCASCADE:建模算法之隐藏线去除
- NDK Socket编程:面向连接的通信(tcp)
- python输入年份月份输出天数_6.2(输入年份 月份 输出该月天数)
- CF1082G Petya and Graph(最小割,最大权闭合子图)
- oracle数据集成产品,甲骨文推出Oracle数据集成产品
- ajax请求 304解决方案:
- Kubernetes学习总结(16)—— Kubernetes 实战之部署 Redis 集群
- 理解TypeScript的泛型
- How to deploy Odoo 11 on Ubuntu 18.04
- LabVIEW数字抽奖程序
- SQL语句实现增删改查(1)
- devil may cry 4 android apk,Devil May Cry
- 双线 路由表 linux,linux双线ip设置(不需额外增加路由表)
- HDU 3221 Brute-force Algorithm(指数降幂公式)
- Validation and Data leakages
- Tomcat7 性能优化,提高并发-NIO模式