
# 移位寄存器

## 1. 模块概述

    这是一个4位右移移位寄存器，具有异步复位、同步加载和移位使能功能。该模块支持并行加载和串行右移操作。

## 2. 接口定义

### 2.1 输入信号

|信号名|	位宽|	方向|	描述|
|---|---|---|---|
|clk|	1|	输入|	系统时钟，上升沿触发|
|areset|	1|	输入|	异步复位信号，高电平有效|
|load|	1|	输入|	同步加载使能，高电平有效
|ena|	1|	输入|	移位使能信号，高电平有效
|data|	4|	输入|	并行加载数据输入

### 2.2 输出信号

|信号名|	位宽|	方向|	描述|
|---|---|---|---|
|q|	4|	输出|	移位寄存器输出

## 3. 功能规格

### 3.1 操作模式

#### 3.1.1 异步复位模式

    条件: areset = 1'b1

    行为: 立即将寄存器清零，不受时钟控制

    输出: q = 4'b0000

    优先级: 最高优先级

#### 3.1.2 同步加载模式


    条件: areset = 1'b0 且 load = 1'b1（时钟上升沿）

    行为: 将输入数据 data[3:0] 加载到寄存器

    输出: q = data

    优先级: 次高优先级

#### 3.1.3 右移模式

    条件: areset = 1'b0 且 load = 1'b0 且 ena = 1'b1（时钟上升沿）

    行为: 执行右移操作

    移位规则:

        q[3] ← 1'b0

        q[2] ← q[3]

        q[1] ← q[2]

        q[0] ← q[1]

        q[0] 移出并丢弃

    数学表达: q <= {1'b0, q[3:1]}

#### 3.1.4 保持模式

    条件: areset = 1'b0 且 load = 1'b0 且 ena = 1'b0（时钟上升沿）

    行为: 保持当前寄存器值不变

    输出: q 保持不变

### 3.2 优先级顺序

    异步复位 (areset) - 最高优先级

    同步加载 (load) - 次高优先级

    移位使能 (ena) - 最低优先级

    保持 - 默认状态

## 4. 时序规格

### 4.1 时钟要求

    时钟边沿: 上升沿触发

    建立时间: 输入信号在时钟上升沿前必须稳定

    保持时间: 输入信号在时钟上升沿后必须保持稳定. 时序规格

### 4.2 异步复位时序

    复位延迟: 复位信号有效后，输出立即清零

    复位恢复: 复位信号撤销后，在下一个时钟上升沿开始正常操作

### 4.3 同步操作时序

所有同步操作（加载和移位）在时钟上升沿采样并执行。

#### 4.3.1. 状态转移表

|当前状态|	areset|	load|	ena|	下一状态|	操作描述|
|---|---|---|---|---|---|
|q[3:0]|	1|	X|	X|	4'b0000|异步复位|
|q[3:0]|	0|	1|	X|	data[3:0]|同步加载|
|q[3:0]|	0|	0|	1|	{1'b0, q[3:1]}|右移操作|
|q[3:0]|	0|	0|	0|	q[3:0]|保持状态|

#### 4.3.2. 真值表

|areset|	load|	ena|	操作|
|---|---|---|---|
|1|	X|	X|异步复位到0|
|0|	1|	X|同步加载data|
|0|	0|	1|右移操作|
|0|	0|	0|保持状态|

#### 4.3.3. 应用场景

串行数据接收

数据串并转换

数字信号处理流水线

序列检测器

延时线实现

### 4.3.4. 验证要点

异步复位功能验证

同步加载功能验证

右移操作功能验证

保持状态功能验证

时序约束验证

边界条件测试

# 其他

所有的文档和注释都用中文编写

# bug分析

在bug分析时，请参考源码：ShiftRegister/ShiftRegister.v
