两种移位寄存器的写法
0赞
发表于 11/2/2012 8:57:19 AM
阅读(2011)
工程中常用到移位寄存器,这里介绍两种写法:
方式一:
module shift (clk,
shift,
sr_in,
sr_out,
);
input clk, shift;
input sr_in;
output sr_out;
reg [63:0] sr;
always@(posedge clk)
begin
if (shift == 1'b1)
begin
sr[63:1] <= sr[62:0];
sr[0] <= sr_in;
end
end
assign sr_out = sr[63];
endmodule
方式二:
module shift1 (clk,
shift,
sr_in,
sr_out,
);
input clk, shift;
input sr_in;
output sr_out;
reg [63:0] sr;
integer i;
always@(posedge clk)
begin
if (shift == 1'b1)
begin
for(i=0;i<63;i=i+1)
sr[i+1] <= sr[i];
sr[0] <= sr_in;
end
end
assign sr_out = sr[63];
endmodule
从语法结构上来讲,方式一比较符合硬件描述言语的思维,而方式二有点让人感觉是从软件上实现,但是两种写法综合出来的RTL图是相同的,如下图:
为了使语句看起来更加简洁明了,介意用方式一来描述移位寄存器,也可以用verilog的{}运算符。如下:
sr[63:1] <= {sr[62:0], sr_in };
这样的话就更加简洁了。