想写一个环形移位寄存器,时钟上升沿到来时就移位一次
代码
module shift(input clk,
input [31:0]d,
input res,
output reg [31:0]out);
parameter m=5'd32;
reg [4:0]i;
reg med;
always@(posedge clk or negedge res)
begin
med<=d[31];
if(!res)
out<=32'b0;
else
for(i=5'd31;i>=0;i=i-1)
begin
if(i==0)
out[0]<=med;
else
out[i]<=d[i-1];
end
end
endmodule
testbench
`timescale 1ns/1ns
module shift_tb();
reg clk;
reg res;
reg [31:0]d;
wire [31:0]out;
shift test6(.clk(clk),
.d(d),
.res(res),
.out(out));
always#5000 clk=~clk;
initial
begin
clk<=0;
d<=32'b0;
res<=0;
#1000 res<=1'b1;
#1000 d<=32'b10011111_11011101_00001111_11110011;
end
endmodule