waljj

两种移位寄存器的写法

0
阅读(1987)

工程中常用到移位寄存器,这里介绍两种写法:

方式一:

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 };

这样的话就更加简洁了。