在FPGA设计中如何解决常数问题?
在FPGA设计中如何解决常数问题?
具体说说,有什么问题?
在FPGA设计中如何解决常数问题?
我用的是Verilog
我在设计一个流水结构的模块时,必须使用一些常数。我发现他们的存在对设计的速度居然有很大影响!我使用的方法是:1,直接写数字,这样做综合的结果是把‘1’与高电压连接起来;把‘0’与地连在一起,综合的关键路径是30ns。2,使用DFF把这些常数先存起来,写法是:always@(posedge clk)
begin
cons1<=13'b0101010101001;
end
这样的综合结果是关键路径20ns。
现在很迷惑,不知道如何处理这些信源。
在FPGA设计中如何解决常数问题?
我的更惨,经常稍作改动,逻辑分析仪就看不见波形了。大家有什么心得没有,请指点一下?
在FPGA设计中如何解决常数问题?
那你的关键路径是哪条?和这个常数有关系吗?看看report里的路径,研究一下延时主要在哪里。
在FPGA设计中如何解决常数问题?
应该是这样,没错,俺的理解是,接电源的话,可布线的路径资源少,延迟肯定大;用寄存器锁一下,虽然寄存器的输入也是接电源,但那不影响你后面的逻辑延迟;用锁过的信号去做逻辑,资源就丰富得多了。当然这是针对FPGA的资源来说的,对ASIC设计应该没有任何延迟区别。
另外,你加约束了吗?加了的话俺估计不会差那么多,你试试。
在FPGA设计中如何解决常数问题?
回bravelu:这个最长路径和它有关,加寄存器后它就不是最长路径了,不过我还是认为加寄存器不是最好的办法,所以想听听大家的想法。
回老扁:我用的是Leonardo,不知道那个约束可以解决这个问题,请多指教
另外,使用Altera的LPM_CONSTANT是不是更好啊,由于我以前从未用过它的任何LPM,所以不知道如何在Leonardo中使用,请大家帮忙
在FPGA设计中如何解决常数问题?
从逻辑设计的角度来看,应该无需去理会常数是如何实现的,所以用寄存器锁常数确实不是一个好办法。
俺觉得应该只要简单约束一下时钟周期就可以了,至于综合工具和布线工具到底怎么实现它,应该不用去管了,只要时钟频率不是很高,应该很容易实现的出来。
从俺的经验来看,俺还从来没有在做设计时对这种问题去考虑过,因为确实好像没必要考虑。
在FPGA设计中如何解决常数问题?
the improvement is probably caused by the introduction of extra flip-flops.
synthesis tools may do retiming to balance the combinatorial delay among
flip-flops.
you can verify it by not registering the first stage (constant), but registering at the second stage and see whether you see the same timing improvement or not. synthesis tool also reports retiming done.
there shall be nothing to do with the constant.