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