Constraints 巴士时间限制

Constraints 巴士时间限制,constraints,vhdl,timing,xilinx,spartan,Constraints,Vhdl,Timing,Xilinx,Spartan,我正在为大学的硕士论文编写一个基于OpalKelly实现的Xilinx Spartan-6。准确地说,这是我正在研究的FPGA(XEM6010-LX45): 它安装在一块板上,该板必须采集多个信号(8+),对其进行处理并生成多个信号(16+),以根据设置关闭一些反馈回路 正如您所想象的,我需要驱动多个DAC和ADC,但我正在努力寻找在.ucf文件中施加时序约束的正确方法 让我们从DAC开始,如果我们弄明白这一点,我们将讨论ADC:D 4个DAC芯片,每个芯片由4个信号驱动:时钟、复位、同步、数

我正在为大学的硕士论文编写一个基于OpalKelly实现的Xilinx Spartan-6。准确地说,这是我正在研究的FPGA(XEM6010-LX45):

它安装在一块板上,该板必须采集多个信号(8+),对其进行处理并生成多个信号(16+),以根据设置关闭一些反馈回路

正如您所想象的,我需要驱动多个DAC和ADC,但我正在努力寻找在.ucf文件中施加时序约束的正确方法


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

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

我已经提出了与外部时钟(我正在发送的时钟)相关的正确定时约束,但由于这不是为数据/同步/复位触发器计时的约束,因此我似乎必须施加与内部时钟相关的约束

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

计时报告很好,只是每个计时都与内部时钟有关,并且它忽略了我的参考引脚指令(可能是因为我用错了它)

如何相对于输出管脚施加定时约束?毕竟,软件应该能够计算出从FPGA发送时钟的延迟(就像它对每个引脚所做的那样),所以在这之后,仅仅是一个减法和总线倾斜的问题

以下是我编写的.ucf文件(仅我们感兴趣的部分):


在像DAC(我假设SDR…)这样的慢速SDR接口上对我有效的是将所有输出放在IOB寄存器上,并确保FPGA内的定时

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

通常,如果您发送时钟和数据边缘对齐,或者只反转时钟,您会发现很容易满足计时要求。正如我所说的,如果FPGA内部满足计时要求,那么如果所有输出都在IOB中注册并由同一个BUFG计时,那么FPGA外部的情况仍然如此。在DDR接口的情况下,发送延迟90度的时钟(需要PLL)通常有效

在您这样的情况下,我不需要考虑时间限制,只需要确保所有输出都在IOB中注册。您应该知道,约束不会影响地图或地点和路线,因为它们只经过验证。设计师的工作是确保系统符合接口计时,该工具仅为您的设计提供实际价值

最后一点,如果输出被注册,则计时延迟将是相同的,假设外部延迟是相同的。这对您来说不是这样的,因为当数据直接连接时,时钟似乎会馈送几个DAC(因此具有更大的电容和延迟)。再说一遍,你是必须做出必要调整的人

词汇更新 SDR:单一数据速率。数据在一个时钟边缘传输

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

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

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

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


我建议你看看这个。Xilinx站点也有大量的数据表、教程和应用说明。

对于我来说,在像DAC(我假设SDR…)这样的慢速SDR接口上工作的是将所有输出放在IOB寄存器上,并确保FPGA内部的计时

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

通常,如果您发送时钟和数据边缘对齐,或者只反转时钟,您会发现很容易满足计时要求。正如我所说的,如果FPGA内部满足计时要求,那么如果所有输出都在IOB中注册并由同一个BUFG计时,那么FPGA外部的情况仍然如此。在DDR接口的情况下,发送延迟90度的时钟(需要PLL)通常有效

在您这样的情况下,我不需要考虑时间限制,只需要确保所有输出都在IOB中注册。您应该知道,约束不会影响地图或地点和路线,因为它们只经过验证。设计师的工作是确保系统符合接口计时,该工具仅为您的设计提供实际价值

最后一点,如果输出被注册,则计时延迟将是相同的,假设外部延迟是相同的。这对您来说不是这样的,因为当数据直接连接时,时钟似乎会馈送几个DAC(因此具有更大的电容和延迟)。再说一遍,你是必须做出必要调整的人

词汇更新 SDR:单一数据速率。数据在一个时钟边缘传输

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

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

IOB:输入/输出块。IO焊盘附近的特殊电路,可以
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;