module shift(nreset,clk,en,in,out)
input nreset,clk,en,in
output [3:0] out
reg [1:0] count//移位计数,控制并行数据更新,这里是4bit并行数据
reg [3:0] data
reg [3:0] out
/* 移位计数,用于并行数据输出,也可以外加一个脉冲控制数据边界,这里移位4bit就并行输出一次*/
always@(posedge clk or negedge nreset)
begin
if(~nreset)
count <= 2'b00
else if(en)
count <= count + 2'b01
end
//移位
always@(posedge clk or negedge nreset)
begin
if(~nreset)
data <= 4'b0000
eale if(en)
data <= {data[2:0],in}
end
//并行输出
always@(posedge clk or negedge nreset)
begin
if(~nreset)
out <= 4'b0000
else if(en &&(count==2'b11))
out <= data
end
endmodule
我编译、仿真过了,没有问题,你原有的out<={out,in}应该写成像这样data <= {data[2:0],in}这就是一个移位寄存器!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)