verilog变长移位寄存器「建议收藏」

2022-09-13 11:03:05 浏览数 (1)

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

verilog变长移位寄存器

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

代码语言:javascript复制
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

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

代码语言:javascript复制
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

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

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

0 人点赞