发 帖  
原厂入驻New
[问答] Vivado无法修复保持违规的解决办法?
52 vivado
分享
我的设计可以划分为几个时钟区域(现在最多20个)。
在每个区域中,我都实例化了一个PLL,每个PLL产生4个时钟。
我需要为每个区域复用这4个时钟,并根据结构逻辑中的信号对输出进行时钟门控
我知道一个正确的方法是使用3个BUFGMUX组件,然后是BUFGCE,但这有问题:
1)即使我有v2000 Virtex7 FPGA,由于放置限制,我最多只能使用32个BUFG。
2)假设我可以放弃并减少时钟区域的数量,不可能将所有4个BUFG放在相邻的站点中,因此除非我指定DEDICATED_clock_ROUTE FALSE,否则实现失败。
我宁愿避免使用这个选项,因为设计相当复杂,Vivado已经很难满足时机要求。
我尝试将第一级时钟与结构逻辑(RTL中的简单MUX)复用,然后将它们与BUFGCTRL复用。
最后,我使用BUFGCE来计时逻辑的门控部分。
这会将每个区域的BUFG数量减少到2(仍然不够,但优于4),逻辑在输出时钟上没有毛刺,方案如下所示:
clk0 _
| _
_ RTL_MUX(LUT)___
clk1 _ |
|
| __
clk2 _ __BUFGCTRL____BUFGCE_______logic
| _ |
|
_ RTL_MUX(LUT)____ |
| __clock_gating / selection_logic
clk3 _ |
这种尝试适用于部分设计,一切都正常运行。
但是,当我实例化整个设计(在V2000上占据50%的占用率)时,Vivado无法修复保持违规。
另外,对于完整的设计和较小的部分,我仍然警告,我不知道如何解决。
也许如果我能解决这些问题,我将有更多机会获得有效的设计。
这是我得到的警告:
[放置30-568] LUT'clkmux_3 / bufgctrl_1_i_2'驱动24个寄存器的时钟引脚。
这可能会导致大量的保留时间违规。
最初涉及的几个寄存器是:......
我检查了原理图,与LUT复用的时钟直接进入BUFGCTRL,这是驱动加热中列出的寄存器的BUFGCTRL。
这是否意味着即使我使用BUFG,Vivado仍然检测到时钟源自LUT(BUFG的输入)?
你知道一个解决方法吗?
先谢谢你。
亲切的问候。
保罗
0
2020-6-19 12:53:16   评论 分享淘帖 邀请回答
2个回答
嗨,
理想情况下,您要做的是使用门控时钟。
通常,时钟不应通过LUT或结构逻辑进行门控。
你应该使用缓冲区来做到这一点。
但是在您的情况下,考虑到您已经处理了保留违规和时间安排,您可以放心地忽略这些警告。
这个警告只是警告你关于LUT的时钟门控,这可能会影响设备的时序。
写出适当的时序约束并确保满足时序要求。
那应该做的。
谢谢,AnirudhPS:请将此标记作为答案,以防它有助于解决您的问题。如果帖子引导您找到解决方案,请给予赞誉。
在原帖中查看解决方案
2020-6-19 12:58:18 评论

举报

嗨,
理想情况下,您要做的是使用门控时钟。
通常,时钟不应通过LUT或结构逻辑进行门控。
你应该使用缓冲区来做到这一点。
但是在您的情况下,考虑到您已经处理了保留违规和时间安排,您可以放心地忽略这些警告。
这个警告只是警告你关于LUT的时钟门控,这可能会影响设备的时序。
写出适当的时序约束并确保满足时序要求。
那应该做的。
谢谢,AnirudhPS:请将此标记作为答案,以防它有助于解决您的问题。如果帖子引导您找到解决方案,请给予赞誉。
2020-6-19 13:11:05 评论

举报

只有小组成员才能发言,加入小组>>

98个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表