提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
线性反馈移位寄存器是一种移位寄存器,通常带有几个异或门来产生移位寄存器的下一个状态。Galois LFSR是一种特殊的排列方式,其中带有“点击”的位与输出位异或以产生下一个值,而不带“点击”的位则发生移位。如果抽头位置是精心选择的,LFSR可以使“最大长度”。最大长度为n位的LFSR在重复之前会经过2n-1个状态(永远不会达到全零状态)。
一、Shift Registers
1.4-bit shift register
Practice:Build a 4-bit shift register (right shift), with asynchronous reset, synchronous load, and enable.
翻译:设计一个4-bit的移位寄存器(右移),带异步复位信号,同步载入信号和使能信号。
- areset: 异步复位信号,复位值为0
- load:有效时,寄存器载入data的值,而不是移位;
- load优先级高于ena
- ena: 右移使能信号
- q: 移位寄存器的内容
Solution(不唯一,仅供参考):
module top_module(
input clk,
input areset, // async active-high reset to zero
input load,
input ena,
input [3:0] data,
output reg [3:0] q);
always @(posedge clk or posedge areset)begin
if(areset)begin
q<=0;
end
else if(load)begin
q<=data;
end
else if(ena)begin
q<=(q>>1);
end
else begin
q<=q;
end
end
endmodule
Timing Diagram

2.Left/right rotator
Practice:Build a 100-bit left/right rotator, with synchronous load and left/right enable. A rotator shifts-in the shifted-out bit from the other end of the register, unlike a shifter that discards the shifted-out bit and shifts in a zero. If enabled, a rotator rotates the bits around and does not modify/discard them.
翻译:构建一个100位的左右旋转器,同步load,左右旋转需使能。旋转器从另一端输入移位的位元,不像移位器那样丢弃移位的位元而以零位移位。如果启用,旋转器就会旋转这些位,而不会修改或丢弃它们。
- load:加载100位的移位寄存器数据
- ena[1:0]:2’b01 右转1bit; 2’b10 左转1bit;其他情况不转 q:旋转器内容
提示:本题与上题的区别在于,右移后最低位不舍弃,而是将其放到最高位上;右移后最高位不舍弃,而是将其放到最低位上。比较类似流水灯的效果。此外,设计到左移和右移的选择,所以就可以使用case语句做选择。
Solution(不唯一,仅供参考):
module top_module(
input clk,
input load,
input [1:0] ena,
input [99:0] data,
output reg [99:0] q);
always @(posedge clk)begin
if(load)begin
q<=data;
end
else begin
case(ena)
2'b01:q<={
q[0],q[99:1]};
2'b10:q<={
q[98:0],q[99]};
default: q<=q;
endcase
end
end
endmodule
3.Left/right arithmetic shift by 1 or 8
Practice:Build a 64-bit arithmetic shift register, with synchronous load. The shifter can shift both left and right, and by 1 or 8 bit positions, selected by amount.
翻译:建立一个64位的算术移位寄存器,同步加载。移位器可以左移和右移,并按1位或8位的位置,按数量选择。
算术右移将移位移位寄存器中数字(在本例中为q[63])的符号位,而不是逻辑右移所做的零。另一种考虑算术右移的方法是它假设被移的数是有符号的并保留符号,所以算术右移可以将一个有符号的数除以2的幂。逻辑左移和算术左移之间没有区别。
-
load:加载数据
-
ena:决定是否移位
-
amount:决定移位方向与数量:2’b00:左移1位;2’b01:左移8位;2’b10:右移1位;2’b11:右移8位
-
q:寄存器内容(输出)
提示:
逻辑移位:左移时,低位补0;右移时,高位补0。算数移位:左移时,低位补0;算术右移符号位要一起移动,并且在左边补上符号位,也就是如果符号位是1就补1符号位是0就补0 。
Solution(不唯一,仅供参考):
module top_module(
input clk,
input load,
input ena,
input [1

本文介绍了线性反馈移位寄存器(LFSR)的概念,包括4位、100位左右旋转器、算术移位等,并提供了Verilog代码示例。探讨了不同类型的ShiftRegister,如LFSR的5位和3位实例,以及32位Galois LFSR的设计。重点在于移位操作、异或门的应用和控制信号的逻辑设计。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



