总线时序限制

时间:2015-03-27 01:25:42

标签: constraints vhdl timing xilinx spartan

我正在为大学的硕士论文编写一个关于OpalKelly实现的Xilinx Spartan-6。确切地说,这是我正在研究的FPGA(XEM6010-LX45):https://www.opalkelly.com/products/xem6010/

它安装在必须获取多个信号(8+)的板上,处理它们并生成多个信号(16+)以根据设置关闭一些反馈回路。

你可以想象我需要驱动多个DAC和ADC,但我正在努力在.ucf文件中强加时序约束。


让我们从 DAC 开始,如果我们弄清楚这一点,我们将讨论ADC:D

4个DAC芯片,每个芯片由4个信号驱动:时钟,复位,同步,数据。时钟在所有DAC中是共同的,它是来自PLL的27MHz时钟,使用DDR结构重新生成并与其他信号一起发送。

我已经提出了相对于外部时钟(我发出的那个)的正确时序约束,但由于那不是时钟数据/同步/复位触发器,我似乎必须强加相对于内部时钟的约束。

我如何管理这种情况,基本上是一个带有时钟的BUS结构?

时序报告很好,除了每个时序都与内部时钟相关,并且它忽略了我的REFERENCE_PIN指令(可能是因为我以错误的方式使用它)。

如何对输出引脚施加时序约束?毕竟,软件应该能够计算出从FPGA发出时钟的延迟(就像每个引脚一样),所以之后只是减法和总线偏移的问题!

这是我写的.ucf文件(只是我们感兴趣的部分):

NET "clk_dac"        TNM_NET = "TNM_clk_dac";
TIMESPEC TS_clk_dac = PERIOD "TNM_clk_dac" 27 MHz HIGH 50%; #27MHz

# DAC SLOW
NET "dac_slow_sync_pin1" TNM = "dac_slow_sync";
NET "dac_slow_sync_pin2" TNM = "dac_slow_sync";
NET "dac_slow_sync_pin3" TNM = "dac_slow_sync";
NET "dac_slow_sync_pin4" TNM = "dac_slow_sync";
NET "dac_slow_data_pin1" TNM = "dac_slow_data";
NET "dac_slow_data_pin2" TNM = "dac_slow_data";
NET "dac_slow_data_pin3" TNM = "dac_slow_data";
NET "dac_slow_data_pin4" TNM = "dac_slow_data";

OFFSET = OUT AFTER "clk_dac" REFERENCE_PIN "dac_slow_clk" RISING;
OFFSET = OUT AFTER "clk_dac" REFERENCE_PIN "dac_slow_clk" FALLING;

TIMEGRP "dac_slow_sync" OFFSET = OUT 24 ns AFTER "clk_dac" REFERENCE_PIN "dac_slow_clk" FALLING;
TIMEGRP "dac_slow_data" OFFSET = OUT 35 ns AFTER "clk_dac" REFERENCE_PIN "dac_slow_clk" RISING;

2 个答案:

答案 0 :(得分:2)

对我来说,对于我这样的慢速SDR接口,比如DAC(我假设SDR ...),是将所有输出放在IOB寄存器上,并确保内部 FPGA的时序。

由相同内部BUFG时钟提供时钟的所有IOB寄存器将具有非常相似的时钟到输出值(尤其是相对于27 MHz时钟)。这尤其正确,因为时序延迟在很大程度上取决于温度,并且可以认为整个器件的温度基本恒定。

通常,如果您发送时钟和数据边沿对齐,或者只是反转时钟,您会发现很容易满足时序。正如我所说的,如果在FPGA内部满足时序,如果所有输出都在IOB中注册并由相同的BUFG计时,那么它仍然会出现这种情况。在DDR接口的情况下,发送延迟90度的时钟(需要PLL)通常可以工作。

在你的情况下,我不打扰时间限制,只确保所有输出都在IOB中注册。您应该知道约束不会影响地图或布局布线,因为它们只是已验证。确保系统满足接口时序是设计人员的工作,该工具只为您的设计提供实际价值。

最后一点,如果注册输出假设外部延迟是相同的,那么时间延迟将是相同的。对于您来说情况并非如此,因为当数据直接连接时,时钟似乎为多个DAC供电(因此具有更大的电容和延迟)。然后,你是那个必须做出必要调整的人。

词汇表更新

SDR:单一数据速率。数据在1个时钟边沿传输。

DDR:双倍数据速率。数据在两个时钟边沿传输。

BUFG:时钟缓冲区。你的所有时钟应该使用BUFG,它们是特殊的缓冲器和专为时钟设计的低偏斜线。

IOB:输入/输出块。 IO pad附近的特殊电路,可配置为自定义IO的路径。特别是,它有一个靠近垫的寄存器。 PLL:锁相环。修改时钟的电路(频率/相位)。

IODELAY:IOB中的一个特殊电路,用于为IO添加恒定或可编程的延迟。

我建议您查看IOB datasheet。 Xilinx网站还提供了大量的数据表,教程和应用说明。

答案 1 :(得分:2)

其他资源

UG612 - Timing Closure User Guide描述如何指定时序约束。第3章包含一般性描述静态时序分析(STA)如何工作以及应该定义什么来评估时序。从应用约束的位置还可以看到许多漂亮的图片。

还有UG625 - Constraints Guide描述了你可以在哪里指定约束(在ucf,xcf,ncf文件中,在VHDL / Verilog中......)。