waljj

两种移位寄存器的写法

0
阅读(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 };

这样的话就更加简洁了。

Baidu
map