移位寄存器(左移、右移、双向)的Verilog实现

移位寄存器(左移、右移、双向)的Verilog实现

移位寄存器的功能和电路形式较多,按移位方向分有左移、右移、和双向移位寄存器;按接收数据方式分为串行输入和并行输入;按输出方向分为串行输出和并行输出。

如果将若干个触发器级联成如下图所示电路,则构成基本的移位寄存器。图中是一个4位移位寄存器,串行二进制数据从输入端Dsi输入,左边触发器的输出作为右邻触发器的数据输入。若将串行数码D3D2D1D0从高位(D3)至低位(D0)按时钟脉冲间隔依次送到Dsi端,经过第一个时钟脉冲后,Q0=D3。由于跟随D3后面的是D2,因此经过第二个时钟脉冲后,触发器FF0的状态移入触发器FF1而FF0转变为新的状态,即Q1=D3,Q0=D2。以此类推,输入数码依次由左侧触发器移到右侧触发器。经过4个时钟脉冲后,4个触发器的输出状态Q3Q2Q1Q0与输入数码D3D2D1D0相对应。这样,就将串行输人数据转换为并行输出数据Dpo。

移位寄存器(左移、右移、双向)的Verilog实现

一般来说,N位移位寄存器要由N个触发器构成,需要N·Tcp来完成串行到并行的数据转换,同样也需要N・Tcp来实现并行到串行的数据输出。这里,Tcp为时钟周期。从上述操作可以看出,移位寄存器只能用脉冲边沿敏感的触发器,而不能用电平敏感的锁存器来构成,因为在时钟脉冲高电平期间,锁存器输出跟随输入变化的特性将使移位操作失去控制。显然,移位寄存器属于同步时序电路。

1.基本移位

首先说明“由于国家标准规定,逻辑图中最低有效位(LSB)到最高有效位(MSB)的电路排列顺序应从上到下,从左到右。因此定义移位寄存器中的数据从低位触发器移向高位为右移,反之则为左移。这一点与通常计算机程序中规定相反,后者从自然二进制数的排列考虑,将数据移向高位定义为左移,反之为右移。”此内容摘自《电子技术基础-数字部分》康华光主编教材。

module shifter( din, clk, rst, dout,done);

input din, clk, rst;

output [7:0] dout;

output reg done; //完成移位

reg [7:0] dout;

reg [3:0] cnt;

always @(posedge clk)

begin

if(rst) //清零

dout <= 8’b0;

else if(cnt<=4’d7)

begin

dout<=dout>>1; //左移

dout[7]<=din;

/*dout <= dout<<1;

dout[0] <= din; */ //右移

end

else

dout<=dout;

end

always@(posedge clk)

begin

if(rst)

begin

cnt<=4d0;

done<=1b0;

end

else if(cnt==4d7)

begin

cnt<=4d0;

done<=1b1;

end

else begin

cnt<=cnt+1b1;

done<=1b0;

end

end

endmodule

仿真结果图

移位寄存器(左移、右移、双向)的Verilog实现

2.双向移位

双向移位实现数据保持、右移、左移、并行置数、并行输出。

module two_way(

input clk,

input rst,

input s0,s1, //选择输入端口

input din1,din2, //串行数据输入

input [3:0] d, //并行数据输入

output reg [3:0] q //输出端口

);

always@(posedge clk or negedge rst)

begin

if(!rst)

q<=4d0;

else begin

case({s1,s0})

2b00: q<=q; //输出保持不变

2b01: q<={q[2:0],din1}; //右移

2b10: q<={din2,q[3:1]}; //左移

2b11: q<=d; //并行置数

endcase

end

end

endmodule

移位寄存器(左移、右移、双向)的Verilog实现

仿真结果图

总结一般掌握左移、右移方法即可,并根据实际需求加以应用,串并转换也适用。

免责声明:文章内容来自互联网,本站仅提供信息存储空间服务,真实性请自行鉴别,本站不承担任何责任,如有侵权等情况,请与本站联系删除。
转载请注明出处:移位寄存器(左移、右移、双向)的Verilog实现 https://www.bxbdf.com/a/180285.shtml

上一篇 2025-04-10 13:02:57
下一篇 2025-04-10 13:09:56

猜你喜欢

联系我们

在线咨询: QQ交谈

邮件:362039258#qq.com(把#换成@)

工作时间:周一至周五,10:30-16:30,节假日休息。