【Verilog】移位寄存器总结:移位寄存器、算数移位寄存器、线性反馈移位寄存器(LFSR)

【Verilog】移位寄存器总结:移位寄存器、算数移位寄存器、线性反馈移位寄存器(LFSR)在练习HDLbits的时候,最常见的几种移位寄存器进行了总结,供大家参考,希望可以帮助到大家。

大家好,又见面了,我是你们的朋友全栈君。

一、移位寄存器

在这里插入图片描述

module top_module(
	input clk,
	input resetn,
	input in,
	output out 
	);
    reg [3:0] q;
	always @(posedge clk) begin
        if (resetn  == 1'b0) begin
			q <= 4'd0;	
		end
		else begin
            q <= { 
   in,q[3:1]};//右移
		end
	end
    assign out = q[0];
endmodule

二、算数移位寄存器

  • 算数左移:和逻辑左移一样。空出来的位用0补;
  • 算数右移:算术移位,也就是包含符号位的移位,对于正数来说,最高位为0,对于负数来说,最高位为1,所以进行算术移位时,如果是左移,那不用管符号位的问题,如果是右移,就要将符号位补在高位。比如:5位数字11000算术右移1为11100,而逻辑右移将产生01100;5位数字01000算术右移1等于00100,而逻辑右移将产生相同的结果,因为原始数字是非负的。
module top_module(
	input clk,
	input load,
	input ena,
	input [1:0] amount,
	input [63:0] data,
	output reg [63:0]q
	);
always @(posedge clk ) begin
	if (load) begin
		q <= data;
	end
	else if (ena) begin
		case(amount)
			2'b00:q <= q<<1;  //左移一位
			2'b01:q <= q<<8;  //左移八位
			2'b10:begin       //右移一位
				if(q[63] == 0)begin
					q <= q>>1;
				end
				else begin
					q <= { 
   1'b1,q[63:1]};
				end
			end
			2'b11:begin      //右移八位
				if(q[63] == 0)begin
					q <= q >> 8;
				end
				else begin
					q <= { 
   8'b1111_1111,q[63:8]};
				end
			end
		endcase
	end
end
endmodule

三、 线性反馈移位寄存器LFSR(linear feedback shift register )

相关参考文章

LFSR用于产生可重复的伪随机序列PRBS,。如图所示。其中gn为反馈系数,取值只能为0或1,取为0时表明不存在该反馈之路,取为1时表明存在该反馈之路;这里的反馈系数决定了产生随机数的算法的不同。

在这里插入图片描述

  • 组成:n级触发器和一些异或门组成。
  • LFSR初始值: 伪随机序列的种子。
  • 抽头: 影响下一个状态的比特位。
  • 含有N个触发器的LFSR电路最多可以产生2的n次方减1个序列。

1、伽罗瓦LFSR(Galois LFSR)

伽罗瓦LFSR是一到多型的LFSR,即最后一个触发器的输出抽头序列对应位置触发器前一级触发器的输出异或逻辑来驱动多个抽头序列对应位置触发器的输入,如下图所示。
在这里插入图片描述

Galois LFSR:其中抽头的位置与输出位异或,以产生其下一个值。如果仔细选择抽头位置,则LFSR可以设置为“最大长度”。n位的最大长度LFSR有2n-1个状态(永远不会达到全零状态)。

  • 例子:构建一个32位Galois LFSR,在32、22、2和1位的位置处使用抽头。
module top_module(
	input clk,
	input reset,
	output reg [31:0]q
	);
	reg [31:0] q_next;
	integer i;
always @(*) begin
	for(i = 0;i<32;i++)begin
		if(i == 0 ||i == 1||i == 21)begin
			q_next[i] <= q[i+1] ^ q[0];
		end
		else if (i == 31) begin
            q_next[i] <= 1'b0 ^ q[0];
		end
		else  begin
			q_next[i] <= q[i+1];
		end
	end
end

always @(posedge clk) begin
	if (reset) begin
		q <= 32'h1;
		
	end
	else begin
		q <= q_next;
	end
end

endmodule

2、斐波那契LFSR

斐波那契LFSR也可以称为多到一型LFSR,即抽头序列对应bit位置的多个触发器的输出通过异或逻辑来驱动一个触发器的输入。如下图所示。
    在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160245.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java软件工程师前景_培养java工程师

    java软件工程师前景_培养java工程师从各大招聘网上我们就能看出,同等软件工程师的就业前景是远比网络工程师就业前景要好很多,年薪在10万以上的软件工程师还只是一个起点,随着经验的增加,年薪超20万的也是很常见的,而其它专业的发展前景是远比不上Java软件工程师的就业前景的。Java软件工程师就业前景为什么这么好呢?原因之一:软件工程师可谓是软件项目开发的掌舵者,一名优秀的软件工程师应当具有较强的逻辑思维能力,对于技术的发展有敏锐的嗅觉…

    2022年9月23日
    1
  • mysql15免费注册激活码【最新永久激活】

    (mysql15免费注册激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月22日
    78
  • java illegal character_java.lang.illegalaccesserror

    java illegal character_java.lang.illegalaccesserror本文整理匯總了Java中org.apache.commons.lang3.ArrayUtils.isNotEmpty方法的典型用法代碼示例。如果您正苦於以下問題:JavaArrayUtils.isNotEmpty方法的具體用法?JavaArrayUtils.isNotEmpty怎麽用?JavaArrayUtils.isNotEmpty使用的例子?那麽恭喜您,這裏精選的方法代碼示例或許可以為…

    2022年9月28日
    0
  • 记忆化搜索简介「建议收藏」

    记忆化搜索简介「建议收藏」记忆化搜索:算法上依然是搜索的流程,但是搜索到的一些解用动态规划的那种思想和模式作一些保存。一般说来,动态规划总要遍历所有的状态,而搜索可以排除一些无效状态。更重要的是搜索还可以剪枝,可能剪去大量不必要的状态,因此在空间开销上往往比动态规划要低很多。记忆化算法在求解的时候还是按着自顶向下的顺序,但是每求解一个状态,就将它的解保存下来,以后再次遇到这个状态的时候,就不必重新求解了。

    2022年7月26日
    5
  • 字典树和前缀树_前缀树和后缀树

    字典树和前缀树_前缀树和后缀树从Trie树(字典树)谈到后缀树作者:July、yansha。出处:http://blog.csdn.net/v_JULY_v 。 引言   常关注本blog的读者朋友想必看过此篇文章:从B树、B+树、B*树谈到R树,这次,咱们来讲另外两种树:Tire树与后缀树。不过,在此之前,先来看两个问题。   第一个问题:一个文本文件,大约有一万行,每行一个词,要求统计出其中最频繁出现的前10个词,

    2022年9月6日
    2
  • eBPF指令集_sse3指令集

    eBPF指令集_sse3指令集eBPF指令集是一个通用的RISC指令集,11个64位寄存器,一个程序计数器和512字节的栈空间构成。

    2022年9月21日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号