在线咨询 切换到宽版
eetop公众号 创芯大讲堂 创芯人才网

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜帖子
查看: 4851|回复: 11

[求助] 多周期路径电路描述

[复制链接]
发表于 2021-8-22 11:23:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×

想要实现如下图所示的电路图,应该怎么描述3-cycle delay呢?

有没有大神指点下呢?谢谢了!

多周期路径1.png
发表于 2021-8-22 16:44:42 | 显示全部楼层
本帖最后由 innovation 于 2021-8-22 17:00 编辑

感觉你现在好像在使用vivado,vivado的约束语法我还没看过,但估计设计思想应该不会和ISE有本质区别,所以给你提供ISE下的约束方法参考吧:
首先,你这个图也不知道你是从哪里抄来的,不完整。就你这个图,最直接的答案是:将你图中的up to 3-cycle delay路径命名为comb_netA,再假设你的CLKM的周期为10 ns,那么你要的:NET   "comb_netA"  MAXDELAY = 30 ns; 这个约束方法的局限:
1. MAXDELAY 的value只能是正整数(不知道vivado里这个规则变了没)  
2. MAXDELAY约束不包括FF0的输出延迟和FF1的输入建立时间
回复 支持 反对

使用道具 举报

发表于 2021-8-22 16:58:20 | 显示全部楼层
本帖最后由 innovation 于 2021-8-22 17:12 编辑

更为常见的约束需求其实是约束从FF0输出(包含FF0输出延迟)到FF1输入(包含FF1输入建立时间)总时间不超过3个CLKM周期,那么你这个图还需要一个假设,FF0输出只到FF1输入,没有其它路径,否则在写约束条件时还需要定义TIMEGRP并EXCEPTION其它路径,满足这个假设的话,还需假定FF0的输入为ff0_din,输出为ff0_dq,这样写:
NET   "CLKM"  TNM_NET = "CLKM";
TIMESPEC  "TS_CLKM_PRD"  = PERIOD "CLKM" 10.0 ns HIGH 50%;
NET   "ff0_din"   TNM  =  "pathA_src";
NET   "ff0_dq"    TNM  =  "pathA_dist";
TIMESPEC  "TS_pathA_3cycle"  = FROM  "pathA_src"  TO   "pathA_dist"   3*TS_CLKM_PRD;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-22 19:07:15 | 显示全部楼层


   
innovation 发表于 2021-8-22 16:58
更为常见的约束需求其实是约束从FF0输出(包含FF0输出延迟)到FF1输入(包含FF1输入建立时间)总时间不超过 ...


非常感谢您的解答了,我是不太明白怎么在电路层面描述一个寄存器的数据输出经过一定周期延迟后送给另一个寄存器使用
(简单来说不知道怎么用HDL描述)
回复 支持 反对

使用道具 举报

发表于 2021-8-22 19:22:18 | 显示全部楼层


   
come_on_sn 发表于 2021-8-22 19:07
非常感谢您的解答了,我是不太明白怎么在电路层面描述一个寄存器的数据输出经过一定周期延迟后送给另一个 ...


你这是啥子骚操作哦,你想问流水线延迟怎么弄,结果你跑那些讲时序约束的文章里面截图,并提问“多周期路径电路描述”?
回复 支持 反对

使用道具 举报

发表于 2021-8-22 19:28:25 | 显示全部楼层


   
come_on_sn 发表于 2021-8-22 19:07
非常感谢您的解答了,我是不太明白怎么在电路层面描述一个寄存器的数据输出经过一定周期延迟后送给另一个 ...


要插入流水线延迟?很简单呀:
1. 如果是单bit信号需要插入流水线延迟,想插几级就在源触发器(FF0)和目的触发器(FF1)之间插入几级FFx就可以了。如果插入级数多,又嫌使用的FFs多,你就可以使用xilinx的LUTs构成移位寄存器呀
2. 如果是总线型(多bit)信号,建议另外设计一个源端数据有效(比如:Data_RDY)信号,把这个有效信号延迟你需要的周期后变为目的端的触发器的时钟使能信号(比如:Data_CE),就可以了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-23 10:49:45 | 显示全部楼层


   
innovation 发表于 2021-8-22 19:22
你这是啥子骚操作哦,你想问流水线延迟怎么弄,结果你跑那些讲时序约束的文章里面截图,并提问“多周期路 ...



哦哦 就是不太清楚怎么描述寄存器输出经过一定时间的延迟送给另一个FF

回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-23 11:05:27 | 显示全部楼层


   
innovation 发表于 2021-8-22 19:28
要插入流水线延迟?很简单呀:
1. 如果是单bit信号需要插入流水线延迟,想插几级就在源触发器(FF0)和目 ...


您好,关于源端数据有效和目的端时钟使能信号,能具体讲讲吗?
基础比较薄弱,谢谢了
回复 支持 反对

使用道具 举报

发表于 2021-8-23 14:11:18 | 显示全部楼层
本帖最后由 innovation 于 2021-8-24 11:58 编辑


   
come_on_sn 发表于 2021-8-23 11:05
您好,关于源端数据有效和目的端时钟使能信号,能具体讲讲吗?
基础比较薄弱,谢谢了
...


好吧,我举一个比较典型的例子吧,比如说,咱们有一个SPI接口16-bits的ADC,工作于1MSPS,那么我们每隔1us需要通过SPI接口串行移位输入一个16-bits的转换数据,并将这个数据存入缓存中,这个例子就需要控制相关触发器的时钟使能,比如说,我们把ADC SPI接口的移位寄存器定义为ADC_RSR[15:0],在一个状态机的控制下通过SPI接口读取ADC的转换数据,16-bits移位完成时,我们产生一个单周期的脉冲信号,ADC_RSR_VLD,那么,我们就可以用这个信号控制只在ADC_RSR_VLD有效的这个时钟周期将ADC_RSR[15:0]这组数据写入另一组寄存器(比如说:ADC_Dout[15:0]),同时,ADC_RSR_VLD通过一个寄存器后变为ADC_Dout_Vld,然后我们再将ADC_Dout[15:0]这组数据写入缓存(比如说,片内的Block dpRAM),需要的话,我们可以在ADC_Dout[15:0]到dpRAM_din[15:0]之间插入我们想要的流水线延迟:
temp_1.PNG



回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-23 21:40:45 | 显示全部楼层


   
innovation 发表于 2021-8-23 14:11
好吧,我举一个比较典型的例子吧,比如说,咱们有一个SPI接口16-bits的ADC,工作于1MSPS,那么我们每隔1us ...


好的好的,非常感谢了!

谢谢大佬了!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


手机版| 小黑屋| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-8-22 00:36 , Processed in 0.018802 second(s), 4 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表