4位 位移位寄存器
其中ena为移位方向使能信号,当ena值为1时,实现右移寄存器;当ena值为2时,实现左移寄存器。d为输入端数据信号,q为输出端数据信号。
always @ (posedge clk or posedge rst) begin
if (rst)
q <= 4'd0;
else if (ena == 2'b01)//右移
q <= {d[0],d[3:1]};
else if (ena == 2'b10)//左移
q <= {d[2:0],d[3]};
end
32位可控制方向移位寄存器
其中ena为移位方向使能信号,当ena值为1时,实现右移寄存器;当ena值为2时,实现左移寄存器。d为输入端数据信号,q为输出端数据信号。
变量:
input clk
input rst
input [1:0] ena
input [31:0] d
output [31:0] q
module top_module(
input clk ,
input rst ,
input [1:0] ena ,
input [31:0] d ,
output reg [31:0] q
);
// 模块代码
endmodule
实现1.(移位符
always @ (posedge clk ) begin
if (rst)
q <= 32'd0;
else if (ena == 2'b01)
q <= d>>1 | d<<31;
else if (ena == 2'b10)
q <= d<<1 | d>>31;
end
实现2.(位拼接:{ , }
always@(posedge clk)begin
if(rst)
q <=0;
else if (ena == 2'b01)//右移
q <= {d[0],d[31:1]};
else if (ena == 2'b10)//左移
q <= {d[30:0],d[31]};
end