因为最近在忙着弄建立,就没有时间写博客,今天抽出点时间来更新一下 关于ucf的语法
1 : 最基本的语法
NET “a<0>” IOSTANDARD = “LVCMOS33” ;
NET “a<0>” LOC = “v1” ;
这是设置引脚和电压的文档
2 : 设置频率
NET “a<0>” TNM_NET = a ;
TIMESPEC TS_a = period "a<0>" 10ns HIGh 50% ;
这是约束a的时钟工作在100M下
3 : 约束全局时钟定位
如果当出现时钟error的时候,一般要把a定位要全局时钟引脚上
当a信号作为输入的时候,a作为时钟,那么a会先经过ibuf -> bufg ;
那么约束为
INST “a_ibuf_bufg” LOC = BUFGMUX_X2Y10 ;
这是因为我采用的是spartan3系列,有8个全局时钟,每个时钟有一个坐标,我把这固定到上面的全局时钟上去 。
4 :当出现error : a clock IOB/clock component ...的时候,并且会有一个提示
<net "A" clock_dedicated_route> = false 的时候,
可以把这句话放在usf文件中,那么编译器将会忽略这个错误 。
5 : 关于分组约束。
分组约束的好处可以把信号作为一个整体进行处理,也可以放宽约束。
比如一个30位的计数器,那么可以作为2+28.这样就要用到分组约束。
例子
inst “a/b/c<0>” TNM = a ;
inst"a/b/c<1>" TNM = b ;
timespec ts_atob = from "b" to "a" 20ns ;
以上的约束可以参考 EDA工作室出版的 FPGA开发指南。