流水灯与移位寄存器(SystemVerilog描述)


一、算术左移、逻辑左移、算术右移、逻辑右移有什么不同?

1.算数左移&算术右移

算数左移和算数右移均是右边补0

2.逻辑右移

算数右移将二进制数整体右移,左边补0即可

3.算数右移

算数右移要将符号位一起移动,并在移动时左边补上符号位

二、一些右移移位寄存器的实现

module Shifter
( input Dsi,
input CLK,
output reg [0:3] Q);
always@(posedeg clk)

 Q[0:3]<={ Dsi,Q[0:2]};

endmodule //方法一
module Shifter
( input Dsi,
input CLK,
output reg [3:0] Q);
always@(posedeg clk)
begin

 Q[3]<= Dsi;

 Q[2]<=Q[3];

 Q[1]<=Q[2];

 Q[0]<=Q[1];

end 

endmodule //方法二

三、本实验流水灯设计要求

根据设计要求,并行装载是将输入端数据装入到移位寄存器,并行装载的时钟全能信号是iLoad。右移的时钟使能信号是iEnable。
本实验设计的流水灯移位寄存器是将移位寄存器内部保存的数据移位。
在时钟上升沿到来时,如果并行装载和右移的控制信号同时有效,该流水灯的功能是并行载入。

四、实验代码

(                      //信号列表
    input wire  Clk,
	 input wire reset,
	 input wire iLoad,
	 input wire iEnable,
	 input wire idata,
	 input wire [n-1:0] id,
	 output reg [n-1:0] q
);
always @(posedge reset or  posedge clk )
begin
	if (reset)
		q <= 0;
   else if(iLoad)
	q[n-1:0]<=id[n-1:0];
	else if(iEnable) 
	 q[n-1:0]<={idata, id[n-1:1]};
    else
	 q[n-1:0] <=id[n-1:0];

end

实例化代码

RightShifter # (n) RS0(.Clk(xxx1),.reset(xxx2),.iLoad(xxx3),.iEnable(xxx4),.idata(xxx5),.id(xxxx6),.q(xxx7));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Best-Wishes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值