verilog变长移位寄存器

verilog变长移位寄存器

普通的移位寄存器可以按如下设置,下面是一个一次移动一位的移位寄存器。

module shift_stationary(

clk,
dat,
ctrl,
shift_out
    );
   input clk;
   input [15:0]dat;
   input [1:0]ctrl;
   output reg [15:0] shift_out;

always@(posedge clk)
begin
case(ctrl)
2'b00:
    begin
        shift_out={dat[14:0],1'b0};
    end
2'b01:
    begin
        shift_out={dat[14:0],dat[15]};
    end
2'b10:
    begin
        shift_out={dat[0],dat[15:1]};
    end
2'b11:
    begin
        shift_out={1'b0,dat[15:1]};
    end
endcase
end
    
endmodule

如何根据输入来决定移位寄存器要移动几位?采用变长的移位寄存器:

module shift
(
clk,
dat,
shift_n,
lshift_out
    );
   input clk;
   input [15:0]dat;
   input [4:0]shift_n;
   output reg [15:0] lshift_out;

always@(posedge clk)
begin
        lshift_out=dat<<shift_n;
end
    
endmodule

可以根据输入值确定移动几位。以上的代码可以综合成功。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值