## 7位右移移位寄存器
### 1. 实验目的
* (1)熟悉和掌握FPGA开发流程和Lattice Diamond软件使用方法;
* (2)通过实验理解和掌握移位寄存器原理;
* (3)学习用Verilog HDL行为级描述时序逻辑电路。
### 2. 实验任务
本实验的任务是设计一个7位右移并行输入、串行输出的移位寄存器。
### 3. 实验原理
如果将多个触发器级联就构成一个多位的移位寄存器,如下图所示,是以4位移位寄存器为例的逻辑电路图,其中的LD/SHIFT是一个置数/移位控制信号。当LD/SHIFT为1时,在CP作用下,从输入端A、B、C、D并行接收数据;当LD/SHIFT为0时,在CP作用下,将寄存器中的数据顺序移出,空位由输入端SIN补充。这种寄存器常用来进行并行数据到串行数据的转换。\\
{{::并入串出4位右移移位寄存器.png?nolink&1000|}}\\
### 4. 用CircuitJS仿真
### 5. Verilog HDL建模描述
7位移位寄存器程序清单 shift7.v\\
module shift7
(
input wire clk, //输入时钟
input wire rst, //复位信号
input wire [6:0] datain, //并行输入数据
output wire dataout //串行输出数据
);
reg [6:0] data;
always @(posedge clk)
if(!rst)
data <= datain; //同步复位,复位时并行数据存入变量data
else
begin
data[6] <= 1'b0; //最高为补0
data[5] <= data[6];
data[4] <= data[5];
data[3] <= data[4];
data[2] <= data[3];
data[1] <= data[2];
data[0] <= data[1]; //右移一位
end
assign dataout = data[0]; //串行输出
endmodule
仿真文件shift_tb.v\\
`timescale 1ns/100ps //仿真时间单位/时间精度
module shift7_tb;
reg clk, rst; //需要产生的激励信号定义
reg [6:0]datain;
wire dataout; //需要观察的输出信号定义
initial
begin
clk =0;
rst =1;
datain =7'b1110101; //所需移位数据
#50
rst =0;
#100
rst =1;
end
always #20 clk =~clk; //产生时钟信号 频率25MHz
//module调用例化格式
shift7 u1 (
.clk (clk),
.rst (rst),
.datain (datain),
.dataout(dataout)
);
endmodule
### 6. 仿真结果和实验现象
- 仿真结果如下图所示:{{::并串4位移位仿真.png?nolink&800|}}
- 实验现象:从仿真波形可以看出,当rst低有效时,输出data_out在每一个clk上升沿将data_in的数据从低位到高位(右移)依次输出。