在Verilog中,OUT_TERM 是一个与输出驱动强度和终端匹配相关的约束,用于定义输出信号的驱动特性。
一、OUT_TERM 的作用
OUT_TERM 主要用于控制输出信号的:
-
驱动强度
-
压摆率
-
输出阻抗匹配
-
信号完整性
二、主要应用场景
1. FPGA输出引脚配置
// 在约束文件中的典型用法 NET "data_out" LOC = "B15"; NET "data_out" IOSTANDARD = "LVCMOS33"; NET "data_out" OUT_TERM = "NONE"; // 无终端 NET "data_out" SLEW = "SLOW"; // 慢压摆率
2. 不同的输出终端类型
// 常见的OUT_TERM值 NET "output1" OUT_TERM = "NONE"; // 无终端 NET "output2" OUT_TERM = "UNTUNED_50"; // 50欧姆未调 NET "output3" OUT_TERM = "SERIES_50"; // 50欧姆串联 NET "output4" OUT_TERM = "SERIES_60"; // 60欧姆串联
三、在Xilinx工具中的具体应用
1. UCF约束文件示例
NET "tx_data<0>" LOC = "P45" | IOSTANDARD = LVCMOS33 | OUT_TERM = NONE | SLEW = FAST; NET "tx_data<1>" LOC = "P46" | IOSTANDARD = LVCMOS33 | OUT_TERM = NONE | SLEW = FAST; NET "clk_out" LOC = "P47" | IOSTANDARD = LVCMOS33 | OUT_TERM = SERIES_50 | SLEW = SLOW;
2. XDC约束文件示例
set_property PACKAGE_PIN B15 [get_ports data_out] set_property IOSTANDARD LVCMOS33 [get_ports data_out] set_property OUT_TERM NONE [get_ports data_out] set_property SLEW FAST [get_ports data_out] set_property DRIVE 12 [get_ports data_out] # 驱动电流(mA)
四、常见的OUT_TERM值
| 值 | 描述 | 适用场景 |
|---|---|---|
NONE | 无终端电阻 | 普通输出,短距离传输 |
UNTUNED_50 | 50欧姆未调终端 | 通用阻抗匹配 |
SERIES_50 | 50欧姆串联终端 | 长线传输,阻抗匹配 |
SERIES_60 | 60欧姆串联终端 | 特定阻抗要求 |
五、相关输出属性
1. 驱动强度 (DRIVE)
set_property DRIVE 8 [get_ports output_sig] // 8mA驱动 set_property DRIVE 12 [get_ports output_sig] // 12mA驱动 set_property DRIVE 16 [get_ports output_sig] // 16mA驱动
2. 压摆率 (SLEW)
set_property SLEW SLOW [get_ports output_sig] // 慢压摆,减少噪声 set_property SLEW FAST [get_ports output_sig] // 快压摆,提高速度
六、设计考虑因素
1. 负载特性
// 驱动重负载 NET "heavy_load" OUT_TERM = "NONE" | DRIVE = 16 | SLEW = "SLOW"; // 驱动轻负载 NET "light_load" OUT_TERM = "NONE" | DRIVE = 8 | SLEW = "FAST";
2. 传输距离
// 短距离板内传输 NET "local_sig" OUT_TERM = "NONE" | SLEW = "FAST"; // 长距离或板间传输 NET "external_sig" OUT_TERM = "SERIES_50" | SLEW = "SLOW";
3. 信号类型
// 时钟输出 NET "clk_out" OUT_TERM = "SERIES_50" | SLEW = "SLOW" | DRIVE = 12; // 数据总线 NET "data_bus[*]" OUT_TERM = "NONE" | SLEW = "FAST" | DRIVE = 8; // 控制信号 NET "ctrl_sig" OUT_TERM = "NONE" | SLEW = "SLOW" | DRIVE = 8;
七、实际应用示例
1. DDR接口输出配置
// DDR数据线 set_property IOSTANDARD SSTL15 [get_ports ddr_dq[*]] set_property OUT_TERM UNTUNED_50 [get_ports ddr_dq[*]] set_property SLEW FAST [get_ports ddr_dq[*]] // DDR地址/控制线 set_property IOSTANDARD SSTL15 [get_ports ddr_addr[*]] set_property OUT_TERM SERIES_50 [get_ports ddr_addr[*]] set_property SLEW SLOW [get_ports ddr_addr[*]]
2. 普通GPIO配置
// 高速GPIO set_property IOSTANDARD LVCMOS33 [get_ports gpio_fast[*]] set_property OUT_TERM NONE [get_ports gpio_fast[*]] set_property SLEW FAST [get_ports gpio_fast[*]] set_property DRIVE 12 [get_ports gpio_fast[*]] // 低功耗GPIO set_property IOSTANDARD LVCMOS33 [get_ports gpio_slow[*]] set_property OUT_TERM NONE [get_ports gpio_slow[*]] set_property SLEW SLOW [get_ports gpio_slow[*]] set_property DRIVE 8 [get_ports gpio_slow[*]]
八、与IN_TERM的对比
| 特性 | IN_TERM | OUT_TERM |
|---|---|---|
| 目的 | 输入阻抗匹配 | 输出驱动控制 |
| 主要功能 | 减少反射 | 控制驱动能力 |
| 常用值 | PULLUP/PULLDOWN/UNTUNED_50 | NONE/SERIES_50 |
| 关联属性 | IBUF, 输入延迟 | OBUF, 驱动强度, 压摆率 |
OUT_TERM的正确配置对于确保信号完整性、减少EMI和降低功耗都至关重要,需要根据具体的应用场景和负载特性进行优化选择。
737

被折叠的 条评论
为什么被折叠?



