有时候咱们想让多个信号或多或少的出现在同一时刻(也便是说这些信号之间的时刻差应该在某个边界之内)。
一个经典的状况便是多位的数据总线,总线上的信号应该(简直)一起抵达。
假如其它信号均由其间一个信号生成,那么要满意上面的要求,咱们能够经过设置set_min_delay束缚来完成。
可是假如这些信号都是相互独立生成的呢?
或者说,大多数状况下,这些信号或许都是由同一个信号源生成的(例如同一个时钟源)?
保证小的信号传输偏移的一个办法便是相对一起的源束缚每个信号。
举个比方,一个32位的数据信号,相对同一个时钟源(用于生成这些信号)咱们能够对每个信号进行束缚。
可是运用这种办法来操控数据总线上信号之间的偏移需求十分严厉的时序束缚。
例如咱们需求保证不同信号之间的偏移差在0.5ns范围内。
因而咱们需求规划推迟标准,比方界说最小和最大推迟,保证一切信号能在0.5ns误差范围内悉数抵达节点。
这个要求不是关于某个详细的0.5ns节点来说的,而是需求满意恣意一个节点——在0.5ns的推迟范围内一切信号都能抵达。
XDC能够经过set_data_check指令来规则这样的误差操控要求。
咱们能够运用这个指令来界说两个数据信号之间所能承受的最大误差值。
举个比方:
set_data_check –from A –to B 0.5
也便是说AB之间的传输时刻在0.5之内。
下面让咱们来运用这个指令来标准一个32位总线的数据偏移问题。
这需求31*32/2条指令来界说恣意数据信号之间的组合。
另一个简略的办法(仅仅略微加一些束缚)是取其间一位数据信号作为参照,依据这个信号来标准其它数据信号。
关于每个数据信号位,set_data_check指令后边都要加“-to”参数。
这样将仅需求32条这样的指令。
举个比方:
set_data_check –from A[0] – to A[15] 0.25
set_data_check –from A[1] –to A[15] 0.25
….
set_data_check –from A[31] –to A[15] 0.25
留意必定要将想界说的数值折半,由于界说的是双向的。
因而考虑到的极点状况便是一个信号或许早些抵达,另一个信号或许晚些抵达。
因而一切要束缚的信号之间的最大时刻偏移将是详细值的两倍。
上面的指令设置能够保证恣意的信号组合都能够运用,信号之间的最大时刻偏移为0.5ns。