请教是否该设置Multicycle path
// Generation of the Mdo signal.
always @ (posedge Clk or posedge Reset)
begin
if(Reset)
begin
Mdo_2d <= 1'b0;
Mdo_d <= 1'b0;
Mdo <= 1'b0;
end
else
begin
if(MdcEn_n)
begin
Mdo_2d <= ~SerialEn & BitCounter<32;
Mdo_d <= ShiftedBit | Mdo_2d;
Mdo <= Mdo_d;
end
end
end
谢谢各位
其实多周期路径是告诉综合工具这个时钟是否需要门控。
这么简单的逻辑是不需要的。
多周期路径是为了保证timing能够满足(放宽对data path路径delay的要求),timing check的时候会用多个周期去check。
所以,本质上它是timing check中的一个概念而已。
使用MdcEn_n作为使能信号的寄存器间都可以设置多周期路径,SDC格式约束如下:
set_multicycle_path -setup -from Mdo_d -to Mdo 50
set_multicycle_path -hold -from Mdo_d -to Mdo 49
是否能直接写Mdo_d、Mdo,还是要用get registers...之类的你可以试一试。
这是多周期路径的典型应用之一。altera,xilinx等等的文档都有描述。
谢谢coyboy912,那是不是说一般简单的逻辑不需要设多周期,big logic可以设置一下?或者先不设置,看综合出来时序再决定设或不设?还有一个,我之前其实是做fpga的,所以感觉如果设置上多周期路径,那么工具在布局布线的时候这部分时序相对比较松,比较容易布线,从asic的角度来说,需要考虑这些吗?
顶一下,我来看看头像改过来没有
谢谢A1985 ,是说从门控时钟的角度来考虑吗,设上多周期路径后应该不会综合成门控时钟吧
谢谢帮顶
谢谢加油99,我试一下
嗯。比如两个寄存器之间夹着一个很大的乘法器,这个乘法器的路径超过了一个cycle,而且你的时序允许计算结果多个cycle之后才算出来,那么就必须设置muti cycle路径。这样timing才能过。
这就要求你设计的时候就要意识到这些路径的存在,而不是过后再修补。
一般来说,如果是手工写的RTL,最好不要出现这样的路径,没必要把一坨组合逻辑做得那么大。必须优化一下时序,比如中间插入点寄存器。
谢谢coyboy912 , 这种情况比较好理解,还有一个问题就是比如我一开始贴的那段代码中,Mdo这个信号会接到PAD上,那么寄存器到pad的这一段需要设置multicycle吗?还是该怎么设置output delay?目前来看延时有些大,不满足时序
Mdo信号已经是寄存器输出了呀。我不知道你所说的延时有点大是什么意思。
Mdo信号最终也是引到其它芯片的输入端的,还取决于sink那一端是如何使用这个信号的(比如是不是同一个时钟域的)。
延时大指的是MDO这个寄存器的输出到PAD的延时,MDO的输出用的是一个三态的IO,在这个IO本身上的延时比较大,所以用Clk来设置它的output delay之后,就满足不了时序要求了。同事在MDO寄存器的输出到PAD设置了Multicycle path,似乎就好了,不知道这样设置是否合理呢 或者是否可以定义个虚拟时钟,频率是Fclk/50,然后用这个时钟去设置MDO的output delay?
