Verilog中移位寄存器的描述以及理解

一、移位寄存器

        移位寄存器是一种在若干相同时间脉冲下工作的以触发器为基础的器件,数据以并行或串行的方式输入到该器件中,然后每个时间脉冲依次向左或右移动一个比特,在输出端进行输出。

module top_module(
	input clk,
	input rst_n,
	input in,
	output out 
	);
    reg [3:0] q;
	always @(posedge clk) begin
        if (rst_n  == 1'b0) begin
			q <= 4'd0;	
		end
		else begin
            q <= {in,q[3:1]};//右移、、q <= {q[4:1],in} 左移
		end
	end
    assign 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 ) begin
	if (rst_n == 1'b0) begin
		q <= data;
	end
	else if (en) begin
		case(shift_state)
			SHIFT_LEFT:
				q <= q<<1;  //左移一位
			SHIFT_RIGHT:
				begin       //右移一位
					if(q[4] == 0)begin//为正数
					q <= q>>1;
				end
				else begin
					q <= {1'b1,q[4:1]};//否则为负数
				end
			end
			default : 
				q <= 'd0;
			
		endcase
	end
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) begin
        if(rst_n == 1'b0) 
        	q <= 32'h1;
        else begin
            q <= {q[0],q[31:23],q[22]^q[0],q[21:3],q[2]^q[0],q[1]^q[0]};
        end
        
    end
endmodule

参考:【Verilog】移位寄存器总结:移位寄存器、算数移位寄存器、线性反馈移位寄存器(LFSR)_米多奇米饼的博客-CSDN博客_移位寄存器

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值