Quick Start
打开Vivado 2025.1(或更高版本),创建新工程,器件选择Xilinx Artix-7 XC7A35T(示例)。编写一个带异步复位同步释放的D触发器模块(代码见下文)。添加时序约束文件(.xdc),对复位信号声明set_false_path和set_max_delay。运行综合(Synthesis),检查综合报告无关键警告。运行实现(Implementation),检查时序报告,确认复位路径无违例。生成比特流并下载到开发板,用示波器或逻辑分析仪观察复位释放后时钟沿对齐的波形。
前置条件与环境
| 项目 | 推荐值 | 说明 | 替代方案 |
|---|---|---|---|
| 器件/板卡 | Xilinx Artix-7 XC7A35T | 主流中低端FPGA,支持异步复位同步释放 | Intel Cyclone V / Lattice ECP5 |
| EDA版本 | Vivado 2025.1 | 2026年最新稳定版,时序引擎改进 | Vivado 2024.x / Quartus Prime Pro 24.x |
| 仿真器 | QuestaSim 2025.1 | 支持SystemVerilog断言 | Vivado Simulator / ModelSim |
| 时钟/复位 | 100 MHz 系统时钟,低电平异步复位 | 典型设计 | 50 MHz / 200 MHz,高电平复位 |
| 接口依赖 | 无外部接口 | 纯内部逻辑验证 | 可扩展至AXI4-Lite |
| 约束文件 | .xdc 格式 | 含复位相关约束 | .sdc 格式(Intel) |
目标与验收标准
- 功能点:复位释放后,输出信号在第一个时钟上升沿同步置为有效值,无亚稳态传播。
- 性能指标:Fmax ≥ 100 MHz(示例配置),复位路径无setup/hold违例。
- 资源:使用2个寄存器实现同步释放逻辑,无额外LUT。
- 验收方式:仿真波形显示复位释放后输出与时钟沿对齐;时序报告显示复位路径满足约束。
实施步骤
1. 工程结构与关键模块
创建顶层模块top.v,包含一个异步复位同步释放模块rst_sync和被测逻辑dff_example。
// top.v
module top (
input wire clk,
input wire rst_n_async,
input wire d,
output reg q
);
wire rst_n_sync;
rst_sync u_rst_sync (
.clk (clk),
.rst_n_async (rst_n_async),
.rst_n_sync (rst_n_sync)
);
always @(posedge clk or negedge rst_n_sync) begin
if (!rst_n_sync)
q <= 1'b0;
else
q <= d;
end
endmodule逐行说明
- 第1行:模块名为
top,定义顶层模块。 - 第2行:声明时钟输入端口
clk。 - 第3行:声明异步复位输入端口
rst_n_async,低电平有效。 - 第4行:声明数据输入端口
d。 - 第5行:声明寄存器输出端口
q。 - 第7行:定义内部连线
rst_n_sync,用于连接同步后的复位信号。 - 第9-13行:实例化
rst_sync模块,将时钟、异步复位和同步复位信号连接。 - 第15行:always块,敏感列表为时钟上升沿或同步复位下降沿。
- 第16行:当同步复位有效(低电平)时,将
q清零。 - 第17行:否则,在时钟上升沿将
d赋值给q。 - 第20行:结束模块。
2. 异步复位同步释放模块
创建rst_sync.v模块,实现两级寄存器同步,消除亚稳态。
// rst_sync.v
module rst_sync (
input wire clk,
input wire rst_n_async,
output reg rst_n_sync
);
reg rst_n_meta;
always @(posedge clk or negedge rst_n_async) begin
if (!rst_n_async) begin
rst_n_meta <= 1'b0;
rst_n_sync <= 1'b0;
end else begin
rst_n_meta <= 1'b1;
rst_n_sync <= rst_n_meta;
end
end
endmodule逐行说明
- 第1行:模块名为
rst_sync,实现异步复位同步释放。 - 第2行:声明时钟输入端口
clk。 - 第3行:声明异步复位输入端口
rst_n_async,低电平有效。 - 第4行:声明同步复位输出端口
rst_n_sync。 - 第6行:定义中间寄存器
rst_n_meta,用于捕获异步复位信号。 - 第8行:always块,敏感列表为时钟上升沿或异步复位下降沿。
- 第9行:当异步复位有效(低电平)时,立即清零两个寄存器。
- 第10行:
rst_n_meta清零,确保第一级寄存器复位。 - 第11行:
rst_n_sync清零,确保输出同步复位。 - 第12行:否则(异步复位释放后),进入同步逻辑。
- 第13行:
rst_n_meta置为高电平,表示复位已释放。 - 第14行:
rst_n_sync在下一个时钟沿跟随rst_n_meta,实现同步释放。 - 第17行:结束模块。
3. 时序约束文件
创建top.xdc文件,添加复位路径约束,避免时序分析误报。
# 对异步复位信号设置false path,避免Vivado分析其到寄存器的异步路径
set_false_path -from [get_ports rst_n_async] -to [all_registers -data_pins]
# 对同步复位输出设置最大延迟,确保复位释放后时钟沿对齐
set_max_delay -from [get_pins u_rst_sync/rst_n_sync_reg/C] -to [get_pins u_rst_sync/rst_n_sync_reg/D] 1.0逐行说明
- 第1行:注释,说明对异步复位信号设置false path的目的。
- 第2行:
set_false_path命令,指定从rst_n_async端口到所有寄存器数据引脚的路径为false path,避免时序引擎分析异步路径。 - 第4行:注释,说明对同步复位输出设置最大延迟的目的。
- 第5行:
set_max_delay命令,指定从同步复位寄存器的时钟引脚到其数据引脚的最大延迟为1.0 ns,确保复位释放后信号在时钟沿对齐。
4. 仿真验证
创建测试激励tb_top.v,验证复位释放后输出与时钟沿对齐。
// tb_top.v
`timescale 1ns/1ps
module tb_top;
reg clk;
reg rst_n_async;
reg d;
wire q;
top u_top (
.clk (clk),
.rst_n_async (rst_n_async),
.d (d),
.q (q)
);
initial begin
clk = 0;
forever #5 clk = ~clk; // 100 MHz
end
initial begin
rst_n_async = 0;
d = 0;
#20;
rst_n_async = 1; // 复位释放
#10;
d = 1;
#10;
d = 0;
#20;
$finish;
end
endmodule逐行说明
- 第1行:时间尺度设置为1ns/1ps。
- 第2行:模块名为
tb_top。 - 第4行:声明时钟寄存器
clk。 - 第5行:声明异步复位寄存器
rst_n_async。 - 第6行:声明数据寄存器
d。 - 第7行:声明输出连线
q。 - 第9-14行:实例化
top模块,连接端口。 - 第16行:initial块,生成时钟。
- 第17行:初始时钟为0。
- 第18行:每5ns翻转时钟,周期10ns,频率100 MHz。
- 第21行:initial块,生成复位和激励。
- 第22行:复位初始为低电平。
- 第23行:数据初始为0。
- 第24行:等待20ns。
- 第25行:复位释放(高电平)。
- 第26行:等待10ns。
- 第27行:数据置为1。
- 第28行:等待10ns。
- 第29行:数据置为0。
- 第30行:等待20ns。
- 第31行:结束仿真。
5. 运行综合与实现
在Vivado中运行综合(Synthesis),检查综合报告无关键警告。运行实现(Implementation),检查时序报告,确认复位路径无违例。
6. 生成比特流并下载
生成比特流文件,下载到开发板。用示波器或逻辑分析仪观察复位释放后时钟沿对齐的波形,验证功能正确。
验证结果
仿真波形显示复位释放后,q在第一个时钟上升沿同步置为有效值,无亚稳态传播。时序报告显示复位路径满足约束,Fmax ≥ 100 MHz。
排障
- 问题1:综合报告出现“异步复位路径未约束”警告。解决:确保
set_false_path约束正确应用于复位端口。 - 问题2:时序报告显示复位路径违例。解决:检查
set_max_delay值是否合理,或增加同步寄存器级数。 - 问题3:仿真波形显示亚稳态。解决:确认同步寄存器级数至少为2级,并检查时钟域是否一致。
扩展
本指南可扩展至多时钟域复位同步,通过增加同步寄存器级数(如3级)提高MTBF。也可集成至AXI4-Lite接口,实现软件控制复位。
参考
- Xilinx UG949: Vivado Design Suite User Guide
- Xilinx UG903: Vivado Design Suite Timing Constraints
- IEEE Std 1364-2005: Verilog HDL
附录
完整工程文件结构:
top.v— 顶层模块rst_sync.v— 异步复位同步释放模块top.xdc— 时序约束文件tb_top.v— 测试激励文件
仿真命令(QuestaSim):
vlog top.v rst_sync.v tb_top.v
vsim -c tb_top
run -all逐行说明
- 第1行:编译所有Verilog源文件。
- 第2行:启动仿真,无图形界面。
- 第3行:运行仿真至结束。


