?
场景分析一:
slow_clk不是由PLL这类IP产生的,而是由逻辑产生的。
理想情况下,slow_clk这类时钟到达1/2的时刻是相同的;
非理想情况下,这类时钟达到1/2的时刻有很大可能与FPGA逻辑版本编译布局布线情况有关,每次进行编译后问题情况可能都不一样,会导致其上升沿到达1/2的时刻不一致;
问题描述:期望是数据先从RAM的当前地址中读出、或者数据写入RAM的当前地址里,之后地址计数器才能进行翻转。
但是由于slow_clk不是从PLL里产生的,而是由逻辑产生;从而导致其上升沿到达RAM clk端口和cnt模块的时刻存在先后关系,而非同时到达,导致写错地址或者读错地址。
?
图1
?
?解决方法:逻辑设计保证cnt的计数翻转时刻与clk上升沿的先后设计,使其符合预期要求,如图二所示采用两路时钟驱动。
?
图2
结论,对待这类不是由PLL产生的时钟slow_clk,使用时就需要格外关注其上升沿达到各个模块的时刻是否相同;
若需要满足时间的先后顺序的话,需要逻辑设计进行保证(举例,如上图二所示)。
?
场景分析二:ISE工程稳定性分析
对比分析下面两种设计,分析其对ISE软件编译布局布线的依赖程度。
图3的设计,存在slow_clk上升沿到达1/2两点的时刻可能不同,受编译布局布线的影响大概是20%左右。
图4的设计,受ISE编译布局布线的影响大概75%左右,即每次ISE编译,Verilog工程其功能都可能受影响、导致工程功能异常,工程不稳定度比较高。
图3 图4
需要特别说明的是:在同步逻辑设计中,是不建议使用图4的时钟使用方式。
对图4的设计进行修改,可以采用时钟使能的方式,如图5所示。采用时钟使能的方式,将时钟使能送到RAM的读写使能端口。
图5
一般,硬件上若是需要进行两个时钟的切换,可以考虑采用专用的时钟切换芯片。
?
?
?
?
?
?
15917611