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

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 5527|回复: 12

[讨论] 请教一个关于时序约束的问题,请高人赐教,谢谢!欢迎讨论

[复制链接]
发表于 2011-9-26 21:28:18 | 显示全部楼层 |阅读模式

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

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

x
大家好,我现在刚开始学习用Tcl写时序约束,看到最基本的时钟约束的时候有些疑惑,举个例子:
   1. create_clock  -name  clk1  -period 10  [get_ports  clk1];
     2. create_generated_clock -name clk2 -divide_by 2 -source clk1  [get_ports  clk2];
可能写的有些错误,这里我主要有两个问题:
1. 关于get_pins 与 get_ports与get_pins的用法,假如我编写的程序里面有top(最顶层模块),还有base1,base2,base3.....模块,关于base1的模块的输入输出是用get_ports还是get_pins写约束呢?有高人能讲一下get_ports与get_pins的区别吗?请勿见笑,初学者,谢谢。
2. 关于上面的第二个语句能直接产生clk2时钟吗,是不是还得编写一个2分频的模块,在这个模块基础上进行输入输出约束么?用Tcl脚本能直接产生时钟么?或者说有没有不用编写verilog程序直接用约束生成逻辑?谢谢
发表于 2011-9-27 09:52:15 | 显示全部楼层
1.
get ports用来约束芯片的管脚, 注意在这里虽然管脚英文名是pins,但这里用的不是get pins.
get pins用来约束模块之间的输入输出信号.

2.约束不能直接产生逻辑或者时钟,你要约束一个二分频,你必须要事先有一个2分频时钟.
 楼主| 发表于 2011-9-27 12:14:48 | 显示全部楼层
回复 2# ertss
谢谢!另外,我想请教一下:
module        sdc_test
(
        input    clk,
        output  clkout
);

reg        flag;
always @ (posedge clk)
        flag <= !flag;

assign clkout = flag;

endmodule

.sdc文件内容:
create_clock -name clk -period 37.037 [get_ports clk]         #####27M时钟
create_generated_clock -name clkout -edges {1 3 5} -source clk -edge_shift {5 5 0} [get_ports clkout]

这样综合以后的程序会按照我的想法,产生的2分频时钟有偏离量吗?
发表于 2011-9-27 12:49:07 | 显示全部楼层
不会的,如果你想要分频时钟有相位偏移,应该用pll产生带相位偏移的分频时钟,再用sdc约束;
约束永远只是约束你的设计,不会替你设计;
发表于 2011-9-27 13:10:14 | 显示全部楼层
本帖最后由 wjhdmmm 于 2011-9-27 13:12 编辑

回复 4# ertss

楼上您好,你说的我也不太明白。不过我仿真以后的确没有产生偏移量。但是create_generated_clock提供了-edges与-edge_shift的参数,如果不能产生偏移量为什么要提供这些参数呢?能给讲一下约束的作用吗,适用在哪些场合比较好。我听了你说的,只是有些不太明白
发表于 2011-9-27 13:14:33 | 显示全部楼层
回复 4# ertss


    比如你说的约束设计,使用了-edge_shift {x y z}不也是约束了设计吗
 楼主| 发表于 2011-9-27 13:28:19 | 显示全部楼层
回复 4# ertss


    好的,谢谢,有点明白了。呵呵
发表于 2011-9-27 13:55:35 | 显示全部楼层
本帖最后由 ertss 于 2011-9-27 13:59 编辑

回复 5# wjhdmmm


约束是为了让quartus II 软件中的时序分析明白你设计的意图,并且根据使得你的设计满足时序要求.

比如说我要约束一个时钟的频率为100Mhz, 前提是你首先要在设计中产生一个100Mhz的时钟(比如片上时钟接口,或者pll输出);
当你有了这个时钟之后,你把他约束为100Mhz, 这样软件就会根据这个约束使得你的电路中这个时钟域满足所需要的建立时间条件,让它能跑到
100Mhz.

又比如说我设计另外一个时钟,频率是之前那个时钟的二倍,并且有一定的相位偏移.那我也要通过约束命令告诉软件这两个时钟的关系,Quartus II会利用这个关系使得电路满足相应的建立时间\保持时间要求.
发表于 2011-9-27 14:56:53 | 显示全部楼层
回复 8# ertss


谢谢,你的意思是不是我可以理解成必须设计了这样的时钟(比如是这两个时钟,bclk是aclk的1/2,且相对于aclk有一定的时钟偏移),然后写这样的约束告诉FPGA。如果我只是单纯的定义了两个时钟,而是想通过约束使bclk相对于aclk有相位偏移的话,FPGA是没有办法帮我设计的。这是不是可以理解成一个有阈值的设计,已经超过了阈值然后FPGA就不能设计了?可以这样理解吗?

还有一个问题还需要请教,比如我打算对FPGA设计增加一些约束,以get_pins为例,可能需要用到一个register,比如pll来说吧,在FPGA内部可能是这样写:pll27m|altpll_**|clk[0],我需要这么找到这些“隐性”的中间register或者~net呢,是从RTL视图里面找吗,有没有什么值得推荐的找寻办法。再次感谢。
发表于 2011-9-27 15:01:10 | 显示全部楼层
回复 8# ertss


    觉得你说的很有道理啊。。谢谢啊。学习了。。呵呵~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-5-12 07:36 , Processed in 0.039677 second(s), 8 queries , Gzip On, Redis On.

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