可编程逻辑
在FPGA设计中,时序约束的设置对于电路性能和可靠性都至关重要。在上一篇的文章中,已经详细介绍了FPGA时序约束的基础知识。
本文将重点讲解主时钟约束设置,给出详细的约束命令,并介绍了在Vivado中如何写入主时钟约束。
主时钟是FPGA电路中最基础的时钟,其稳定性和精确性对电路的稳定运行有着至关重要的作用。在时序约束中,我们需要准确地定义主时钟的时钟约束,以确保电路的时序约束得以实现。
在Vivado中,我们可以使用create_clock命令来定义主时钟的时钟约束,其语法如下:
create_clock -name < clock_name > -period < clk_period > [ -waveform {< rise_time > < fall_tim
参数 | 含义 |
---|---|
-name | 用于给时钟命名 |
-period | 用于定义时钟周期 |
-waveform | 波形参数,可以理解为占空比,一个周期时间内,rise_time表示第一个上升沿时刻,fall_time表示第一个下降沿时刻。不设置,则表示默认为50%的占空比 |
get_ports | 指定工程里的模块时钟信号名 |
这里需要注意的是使用create_clock创建的时钟必须是主时钟primary clock。
FPGA中的主时钟通常有两种来源:
对于Xilinx 7系列FPGA,需要对GT的两个时钟都添加约束,但对于UltraScale以及以上系列FPGA,只需对GT的输入时钟约束即可。
设定从引脚clk输入外部时钟,时钟周期为12ns,占空比50%,相移为0,则主时钟约束如下所示:
create_clock -period 12 [get_ports clk]
如果存在相移为90,则主时钟约束变为
create_clock -period 12 -waveform {3 9} [get_ports clk]
PGA差分时钟是指通过时钟管脚的P端和N端共同进来的时钟信号。通常应用于高频或精度要求较高的场合,它的作用是消除共模噪声,从而提高系统性能。
只需要约束差分时钟的P端即可,不能同时约束P端和N端,N端可以被软件自动识别到。
比如差分时钟sys_clk_p和sys_clk_n,时钟周期为6.667ns,则约束为:
create_clock -name sys_clk -period 6.667 [get_ports sys_clk_p]
FPGA高速收发器GT时钟信号,是指在FPGA中使用高速收发器GT(Gigabit Transceiver)进行信号收发时,需要使用与其速率相匹配的时钟信号进行同步传输。这样做可以确保信号稳定地传输,避免了数据传输中可能出现的误码情况。
比如时钟源由高速收发器gt0提供,则时序约束为:
create_clock -name rx0_outclk -period 3.333 [get_pins gt0/RXOUTCLK]
create_clock -name tx0_outclk -period 3.333 [get_pins gt0/TXOUTCLK]
点击“+”号,选择“add or create constras”,点击下一步。
选择“create file”,填入时序文件名即可。
(1)方法1
直接打开XDC文件,写入时序约束语句即可
(2)方法2
在将工程综合Synthesis完成后,点开“Open Synthesized Design”,等待打开完成后,直接在TCL console窗口中输入时序约束语句,回车即可。
(3)方法3
在将工程综合Synthesis完成后,点开“Edit Timing Constraints”,等待打开GUI界面。
在“分类区”选中要创建的约束类型,点击“+”号,创建约束,弹出约束创建界面。
点击source objects右侧的“...”,打开模块接口搜索界面,并点击find按钮,选中“sys_clk”信号,点击“右箭头”,最后点击set即可。
最后输入时钟名,时钟周期,和波形参数即可,点击ok,并“ctrl + S”保存即可。
主时钟约束是FPGA中常见的操作,必须掌握,本文详细介绍了操作命令和操作示范,希望可以帮助到大家学习并掌握这个知识。
全部0条评论
快来发表一下你的评论吧 !