描述
关键词:FIFO、定时、问题、硬件、COREGEN、4.1i、4.2i、定时、分析器
紧迫性:标准
一般描述:
当FIFO核心在硬件中实现,并且我执行时序仿真时,我注意到时序问题导致核心中的意外行为。FIFO核心还利用不同时钟域中的读写时钟。即使当功能仿真成功且时序分析器没有问题时,这些问题也可能发生。
当FIFO核心使用两种不同的时钟速度来读写时会出现问题。FIFO核心BRAM使用两个不同的时钟周期。如果更快的端口被列在PCF中,并且被最后出现的较慢的端口阻塞,BRAM接口电路可能会无意地设置到较低的TimeScript,而该TimeSee不会达到更高的速度。因此,时序分析可以指示当不存在时,您期望的速度是可实现的。
注意:这个问题是在IS5.5.1软件中固定的。定时分析器已被更新,以便它适当地处理不同的时钟域。
解决方案
您可以通过用不同的时钟约束单独处理时序约束来仔细限制您的设计来避免此问题。将下面的约束复制到“DealthNo.UCF”文件中。
由于FIFO是由核心生成器创建的,所以不能确定哪个端口用于写端口,哪些端口用于读取端口。通常,端口A用于写入和Port B读取,但这并不总是正确的,特别是当写入和读取端口是不同的宽度时。较小的宽度总是在端口A上。下面的UCF代码不定义用于写入的端口,并且用于读取;任一端口可以用于任一目的。该代码还可以正确地将项目分组在一起,并剔除不必要的信息。
作为一个例子,我们可以看到一个具有三个时钟和许多块RAM的设计。每个块RAM具有三个时钟的不同组合,驱动其CLKA和CLKB时钟端口。下面的UCF示例说明如何约束此设计,从而在PCF文件中没有错误的块RAM端口分组。该示例很大,如果不存在任何情况,可能会在NGDBug中引起警告。您可以忽略大多数这些警告,但Xilinx建议您在第一次运行设计时检查警告。
注:
1。调整时钟网络名称以匹配您的设计中使用的名称,并输入正确的所需时间值。
2。这是一组长的UCF命令,但是所有命令都是必需的。
————————————————
选择每一个时钟附加的单独的块RAM端口。
显然,对于每个FIFO,只有两个分组规范中的一个应该被执行;让实现工具将它们分类。
净CKLY100A TNM=BRAMSH PORTA CLK100AY BRAM;
净CKLY100A TNM=BrAMSH PORTB CLK100AY BRAM;
显然,对于每个FIFO,只有两个分组规范中的一个应该被执行;让实现工具将它们分类。
净CKLY85 m TNM=BRAMSH PORTA CKK85 MYBRAM;
净CKLY85 m TNM=BrAMSH PORTB CLK85 MYBRAM;
显然,对于每个FIFO,只有两个分组规范中的一个应该被执行;让实现工具将它们分类。
净CKLY100B TNM=BRAMSH PORTA CLK100BYBRAMS;
网络CKLY100B TNM=BRAMSB PORTB CLK100BYBRAMS;
选择每一个时钟的附件。
网络CKLY100A TNM=CKLY100AAALL;
网络CKLY100B TNM=CKLY100BYALL;
净CKLY85 m TNM=CKLY85 MyALL;
创建不属于BRAM端口实际上属于其他CKKY组的组。
TimeGRP No.100AAbRAMS=CLK100BYBRAM:CKK85 MYBRAM;
TimeGRP No.100BBrAMS=CLK100AYBRAM:CKK85 MYBRAM;
Tim-GRP非No.8MyBrAMS=CLK100AYBRAM:CKK100BYBRAMS;
剔除不属于主时间组的BRAM端口的不属于的组。
TimeGRP CKLY100A=CKKY100AYALL除No.100AyBrAMS之外;
TimeGRP CKLY100B = CKKY100BYALL除No.100ByBrAMS之外;
TimeGRP CKKY85 M=CKKY85 MYL除No.85 MyBRAM外;
使用正常的周期或从/到约束,使用这些最后三组:CLKL100A、CKLY100B和CKLY85 M。
实例:
TimEXTSKLKY100A=100兆赫周期;
TimExcel TSKLKY100B=周期100 MHz;
TimExcel TSK CKLY85 m=85兆赫;
这一点很重要,原因如下:
1。如果块RAM的端口(或任何元件)包含在它们不属于的定时组中,则很可能您的时序约束不准确。这类似于从你的100 MHz时钟域中取出20个触发器,并把它们放到你的10 MHz时钟域中。
TimeSee优先级系统通常负责这一点。如果出现这种情况,可能会对路径应用不正确的约束。路径约束可能比必要的更具侵略性,并且可能导致更长的运行时间和错误的定时错误。
路径约束也可能比需要更保守。你可能认为时机已经成功地被满足了。但是,如果该部分由于未知原因在实验室中不工作,则路径约束可能导致问题,这取决于UCF文件中约束的顺序。
2。从3.1i软件开始,对用于时序分析的算法进行修改,以降低内存使用和加快运行时间。这种变化有一些副作用,其中大部分与集合分组有关。
基本上,如果包含两个或多个不同时钟域的一部分的元件,可能会发生意外事件;最好避免这种情况。为了避免有一个以上的组块RAM端口,使用新的BrimsxPoTa和BrimsSpulb约束。
没有回复内容