2、FPGA设计-时钟域的逻辑设计
1、PLL的时钟管理
Altera所有的FPGA内部都集成了模拟的PLL模块。
(1)对PLL的输入时钟约束:
create_ clock - period 10.000 - name clk_in - waveform {0 5} [ get_ ports clk_in)]
(2)对PLL所有的输出时钟进行约束:
derive_ pll_ clocks
(3)设置PLL两个输出时钟之间无数据路径
set_ false_ path - from [ get_ clocks { inst | altpll_ component | pll | clk[2] }] - to \ [ get_ clocks { inst | altpll_ component | pll | clk[0]}]
(4)PLL的输出时钟进行多周期路径约束
set_ multicycle_ path - from [ get_ clocks { inst I altpll_ component | pll | clk[0]}] - to \ [ get_clocks { inst | altpll_ component | pll | clk[2]}] - end - setup 4
set_ multicycle_ path - from [get_ clocks { inst | altpll_ component I pll | clk[0]}] - to \ [get_clocks { inst | altpll_ component | pll | clk[2]}] - end - hold 3
2、单比特信号跨时钟域
跨时钟域(Clock Domain Crossing,CDC):设计中存在两个及其以上的异步时钟域。
2.1、双触发电路(适用于慢时钟域到快时钟域)
采用两个D触发器进行打两拍处理,设计原则
3、多比特信号跨时钟域
当时钟域之间传递多比特数据时,同步多个信号到一个时钟时将可能偶发数据变化歪斜(Skew)。
避免策略:
3.1、多比特信号融合
将跨时钟域的多比特信号融合到单比特跨时钟域信号。
3.2、多周期路径规划
在传输非同步数据到接收时钟域上配上一个同步控制信号,数据和控制信号被同时发送到接收时钟域,同时控制信号在接收时钟域使用两级寄存器同步到接收时钟域。
3.3、异步FIFO处理
采用格雷码在异步时钟域之间传递多比特数值。
4、门控与行波时钟
门控时钟:任何由非寄存器逻辑功能驱动的时钟。
行波时钟:任何由寄存器逻辑功能驱动的时钟。
4.1、衍生时钟处理原则
(1)尽量不要使用行波和门控时钟,使用时钟使能和PLL。
(2)设计中不要有跨派生时钟的同步数据。本文为读书笔记