赛灵思
直播中

李铭冠

7年用户 222经验值
私信 关注
[问答]

Vivado在set_clock_groups之后无法应用ASYNC_REG属性

大家好,
我在Vivado2014.4中定义异步路径时遇到问题。
我在各种时钟域之间使用一些慢速信号 - 检查具有不同时钟域的DPRAM的完全和空状态 - 并且为我用于亚稳性的那两个FF应用了“ASYNC_REG”属性。
当我使用set_clock_groups强制Vivado不检查这些路径时,我收到以下消息,表明它不能在同一个SLICE上放置两个FF!
我不明白为什么?
[约束18-1079]注册dbg_hub / inst / UUT_MASTER / U_ICON_INTERFACE / U_CMD6_RD / U_RD_FIFO / SUBCORE_FIFO.xsdbm_v1_0_rdfifo_inst / inst_fifo_gen / gconvfifo.rf / grf.rf / rstblk / ngwrdrst.grst.g7serrst.rd_rst_asreg_reg和dbg_hub / inst / UUT_MASTER / U_ICON_INTERFACE
/U_CMD6_RD/U_RD_FIFO/SUBCORE_FIFO.xsdbm_v1_0_rdfifo_inst/inst_fifo_gen/gconvfifo.rf/grf.rf/rstblk/ngwrdrst.grst.g7serrst.rd_rst_asreg_d1_reg来自同一个同步器并设置了ASYNC_REG属性,但无法放入同一切片中
对寄存器的约束或不匹配的控制信号。
通过进一步研究设计,我发现它没有将这些FF放在同一个SLICE中?
下图显示了它们。
而下面的一个,显示第二个FF:
下面是我用来表示某些时钟是异步的命令:
set_clock_groups -name async_ADC_ETH -asynchronous  -group [get_clocks -include_generated_clocks iADC_DCO_P]  -group [get_clocks -include_generated_clocks iGCLKP]
set_clock_groups -name async_RXETH_TXETH -asynchronous  -group [get_clocks -include_generated_clocks iPHY_RX_CLK]  -group [get_clocks -include_generated_clocks iGCLKP]
我想知道我是否使用set_false_path而不是set_clock_groupswouldit使Vivado启用以应用时间和位置约束?
我感谢任何帮助,
侯赛因

以上来自于谷歌翻译


以下为原文

Hi all,
I have a problem in defining Asynchronous paths in Vivado2014.4. I am using some slow signals between various clock domains - checking full and empty status of DPRAM with different clock domains - and have applied "ASYNC_REG" property for those two FFs that I used for Metastability. When I use set_clock_groups to force Vivado not checking on those paths, I receive below messages indicating that it couldn't place two FFs on the same SLICE!..
I can't realize why?

[Constraints 18-1079] Register dbg_hub/inst/UUT_MASTER/U_ICON_INTERFACE/U_CMD6_RD/U_RD_FIFO/SUBCORE_FIFO.xsdbm_v1_0_rdfifo_inst/inst_fifo_gen/gconvfifo.rf/grf.rf/rstblk/ngwrdrst.grst.g7serrst.rd_rst_asreg_reg and dbg_hub/inst/UUT_MASTER/U_ICON_INTERFACE/U_CMD6_RD/U_RD_FIFO/SUBCORE_FIFO.xsdbm_v1_0_rdfifo_inst/inst_fifo_gen/gconvfifo.rf/grf.rf/rstblk/ngwrdrst.grst.g7serrst.rd_rst_asreg_d1_reg are from the same synchronizer and have the ASYNC_REG property set, but could not be placed into the same slice due to constraints or mismatched control signals on the registers.

By further looking into the design I see that it didn't place these FFs in the same SLICE?.
Below pictures show them.



And the below one, shows 2nd FF:


Below is the command I used to indicate some clocks are asynchronous:


set_clock_groups -name async_ADC_ETH -asynchronous
-group [get_clocks -include_generated_clocks iADC_DCO_P]
-group [get_clocks -include_generated_clocks iGCLKP]
set_clock_groups -name async_RXETH_TXETH -asynchronous
-group [get_clocks -include_generated_clocks iPHY_RX_CLK]
-group [get_clocks -include_generated_clocks iGCLKP]

I am wondering if I use set_false_path instead of set_clock_groups would it make Vivado enabled to apply both timing and placement constraints?


I appreciate any help,

Hossein

回帖(8)

王云

2018-11-5 11:49:34
嗨@ avrumw,
谢谢您的意见。
你是对的。
我不应该使用get_cells,因为我需要一个网络而不是一个单元格!
我将约束更改为以下格式:-from& -to。
在这种情况下,您必须使用get_cells。
但是,命名问题仍然存在。
偶然的机会,我学会了在实现的设计中搜索它,发现它已经扩展到像sOverFlow_reg!
然后我在这个名字之前使用了组件标签和'/',看到它运作良好。
就像是:
[get_cells ADC_Module_INST / sOverFlow_reg]
谢谢,
Hossein Moradi Sarvandi
在原帖中查看解决方案

以上来自于谷歌翻译


以下为原文

Hi @avrumw,
 
Thank you for your comments. Yes, you're right. I shouldn't have used get_cells for -through because I need a net not a cell!. I changed my constraint to this format: -from&-to. In this case you have to use get_cells. However, the naming problem still existed. By chance, I learned to search it inside implemented design and found out it has been extended to something like sOverFlow_reg!.
Then I used component label and '/' before this name and saw it worked well. something like:
[get_cells ADC_Module_INST/sOverFlow_reg]
 
Thanks,
Hossein Moradi Sarvandi
 
View solution in original post
举报

陈苏文

2018-11-5 12:01:10
@embeddeddont'使用set_false_path在最后一个翻牌圈的q之间使用set_max_delay -datapath_only;
目标时钟域中第一个触发器的d。
至于这个问题,你能说明你如何推断​​失败者?
- 如果提供的信息有用,请将答案标记为“接受为解决方案”。给予您认为有用且回复的帖子。

以上来自于谷歌翻译


以下为原文

@embedded dont' use set_false_path use set_max_delay -datapath_only between the q of the last flop & d of the first flop in the target clock domain. As to the issue can you show how you infer the flops?
- Please mark the Answer as "Accept as solution" if information provided is helpful.
Give Kudos to a post which you think is helpful and reply oriented.
举报

陈玉筠

2018-11-5 12:11:47
时序约束和ASYNC_REG并没有真正相互干扰。
因此,工具没有将两个同步器FF打包到同一切片中的事实与约束无关......
该错误表示“约束或不匹配的控制信号”。
这里所指的约束是放置约束(LOC或BEL约束),而不是时序约束。
因此,除非你有LOC约束,否则问题很可能是第二部分 - 不匹配的控制信号。
为了将两个触发器打包到同一个切片中,它们必须具有相同的控制集。
这意味着他们必须使用相同的时钟,重置和ce。
由于它们应该是同步器,因此它们可能共享相同的时钟。
此外,应始终启用同步器,因此它们可能共享相同的CE(常量为“1”)。
所以最后一个是重置 - 他们都使用相同的重置吗?
如果ASYNC_REG触发器不能放在同一个切片中(并且你得到这个消息),那么工具会将它们放在相邻的切片中,这就是他们所做的(X7Y152和X7Y153)。
这不一定是个问题 - 两个FF仍然很接近,因此可能很好地作为同步器链,但我们总是希望它们在一起(如果可能的话)(所以看看控制集)。
至于set_clock_groups  - 正如@muzaffer所提到的,我总是避免使用set_clock_groups(或者时钟之间的set_false_path,这基本上是一回事)。
很明显,域之间有时钟交叉 - 如果要交叉的数据不是“没有延迟要求的缓慢变化的单比特信号”,那么您的时钟域交叉(CDC)威廉希尔官方网站 需要约束。
使用set_clock_groups(或时钟之间的set_false_path)声明域false之间的所有路径。
由于这些限制是最高优先级,因此现在不可能限制您的CDC。
Avrum

以上来自于谷歌翻译


以下为原文

The timing constraints and the ASYNC_REG do not really interfere with each other. So the fact that the tools are not packing the two synchronizer FFs into the same slice has nothing to do with the constraints...
 
The error says "constraints or mismatched control signals". The constraints it is referring to here is placement constraints (LOC or BEL constraints), not timing constraints. So unless you have LOC constraints, the problem is likely the second part - mismatched control signals.
 
In order for two flip-flops to be packed into the same slice, they must have the same control set. This means they must use the same clock, reset and ce. Since these are supposed to be synchronizers, they presumably share the same clock. Furthermore, synchronizers should always be enabled, so they probably share the same CE (which is the constant '1'). So the last one is the reset - do they both use the same reset?
 
If the ASYNC_REG flip-flops cannot be placed in the same slice (and you get this message), then the tools will place them in adjacent slices, which is what they have done (X7Y152 and X7Y153). This is not necessarily a problem - the two FFs are still close together and hence are probably fine as a synchronizer chain, but we always prefer them to be together if possible (so take a look at the control set).
 
As for the set_clock_groups - as @muzaffer mentioned, I always avoid set_clock_groups (or set_false_path between clocks, which is essentially the same thing). It is clear that you have clock crossing between the domains - if the data to be crossed is anything other than a "slow changing single bit signal with no latency requirement" then your clock domain crossing (CDC) circuit needs constraints. Using the set_clock_groups (or set_false_path between clocks) declares all paths between the domain false. Since these constraints are the highest priority, it is now impossible to constrain your CDCs.
 
Avrum
举报

王云

2018-11-5 12:17:27
嗨@ muzafferand @ avrumw,
谢谢你们的帮助。
首先,到@ muzaffer:我在Vivado用户指南中搜索过,但我找不到一个明确的例子,说明如何使用“set_max_delay”专门用于我的情况!
如果你能在这一点上给我一些线索,我真的很感激。
我不知道如何计算这种约束的“-from”,“ -  through”和“-to”延迟?!
第二,到@ avrumw:你是对的。
此警告消息与我的时序约束无关。
我发现即使在评论出这个约束之后它也存在。
无论如何,警告说它无法将这两个dbg_hub模块的FF放在同一个SLICE中!
我在设计中使用了ILA核心,我对核心属性和约束没有任何控制权?
我不知道是否有办法修复这些错误。
关于这个问题的有用建议也将受到高度赞赏。
感谢你们,
侯赛因

以上来自于谷歌翻译


以下为原文

Hi @muzaffer and @avrumw,
 
Thank you guys for your helpful comments. First, to @muzaffer: I searched in Vivado user guide but I couldn't find a clear example of how to use "set_max_delay" specifically for my case!. I really appreciate if you can give me some clue on this point. I don't know how to calculate "-from", "-through" and "-to" delays for such constraint?!.
 
Second, to @avrumw: You were right. This warning message had nothing to do with my timing constraint. I saw that it exists even after commenting out that constraint. Anyway, the warning says that it couldn't place those two FFs of dbg_hub module in the same SLICE!. I have used an ILA core inside my design and I do not have any control on the core properties and constraints?!. I don't know if there is a way for fixing such bugs. Helpful advice on this issue would also be highly appreciated.
 
Thank you guys,
Hossein
举报

更多回帖

发帖
×
20
完善资料,
赚取积分