【连载】 FPGA Verilog HDL 系列实例--------双向移位寄存器

【连载】 FPGA Verilog HDL 系列实例  

Verilog HDL 之 双向移位寄存器

一、原理

  前一个实验设计的寄存器只有寄存数据和代码的功能。有时为了处理数据,需要将寄存器中的各位数据在移位控制信号的作用下,依次向高位或是低位移动移位。具有移位功能的寄存器称为移位寄存器。
  本实验就是设计一个双向的移位寄存器,该寄存器可以对4位信号串行输入的数据进行移动输出。另外,该寄存器还有一个异步清零端,低电平有效。还有一个load装载数据的信号输入,用于预置数据,还有一个控制左移或是右移的信号输入,其功能表如表1.1所示。

              表1.1    双向移位寄存器功能表

二、实现

在设计文件中输入Verilog代码

 1 `timescale 1 ns / 1 ps
2
3 module shiftdata ( left_right ,load ,clr ,clk ,DIN ,DOUT );
4
5 input left_right ;
6 wire left_right ;
7 input load ;
8 wire load ;
9 input clr ;
10 wire clr ;
11 input clk ;
12 wire clk ;
13 input [3:0] DIN ;
14 wire [3:0] DIN ;
15
16 output [3:0] DOUT ;
17 wire [3:0] DOUT ;
18 reg [3:0] data_r;
19
20 assign DOUT = data_r ;
21
22 always @ ( posedge clk or posedge clr or posedge load )
23 begin
24 if ( clr == 1)
25 data_r <= 0;
26 else if (load )
27 data_r <= DIN;
28 else begin
29 if ( left_right)
30 begin
31 data_r <= (data_r<<1);
32 data_r[0] <= 0;
33 end
34 else begin
35 data_r <= (data_r>>1);
36 data_r[3] <= 0;
37 end
38 end
39 end
40
41 endmodule

 

 

 

 

 

 

 

 

posted @ 2011-08-31 08:53  让linux飞一会儿  阅读(6562)  评论(2编辑  收藏  举报