新手关于DC综合的一些问题,望前辈指点
1.
set_driving_cell命令。
set_driving_cell在某些情况下比set_drive更精确,但是怎么具体判断选择哪个cell?这个在spec里有体现,还是说需要读verilog代码确定。
当写如下命令set_driving_cell -lib_cell AND4X6 [all_inputs] 时 ,对时钟也加了同样的约束,需要在以后的命令中去除对时钟的约束?
2.
set_clock_latency命令。
值如何确定,是根据经验确定?比如为周期的10%~25%。
3.
set_clock_uncertainly命令。
值如何确定,在验证建立时间时是此值越大越好,还是说有一定的经验范围?
4.
set_false_path命令。
假路径怎么找到?需要先进行初步的综合,根据综合结果在更改约束文件,加入约束假路径的约束?
5.
Set_input_delay、set_output_delay命令。
值如何确定,是根据经验确定?比如为周期的10%~25%。
6.
Set_load命令。
值在spec中有定义?以何种形式定义,出现?因为到目前还没有见到过完整的spec,所以不知道那些约束值可以在spec中找到。
7.
使用哪种综合编译模式的问题。
8.
如果项目gate不多,但是模块、层次比较复杂,是不是使用top模式就会不合适?
我们设计中只有27m时钟接入,但pll出了54m,108m,这时在对电路进行时序路径划分时,应该怎么操作?
9.
内部使用pll分出多时钟,此时设计还能说是单时钟设计吗?
在Design compiler user guide提供的综合实例中有如下代码
always @(posedge clk) begin
cout = cout_tmp;
sout = sout_tmp;
ain_tmp = ain;
bin_tmp = bin;
cin_tmp = cin;
end
在时序控制块中使用阻塞赋值,一般情况下可以这么做吗?
10.
关于时钟?
“我们用TSMC018工艺clock_uncertainty经验值应该是setup 1ns,hole 0.5ns”,这种说法是经验值吗?
11.
设计中用的是异步复位设计,那整个设计为什么说是同步时序设计?
抛砖引玉: 期待深入专业解答和讨论
1、设置模块间端口的驱动
2、在综合时不设定
4、指两个信号之间不进行时序检查,常见两个时钟
5、除非有要求,一般设置为60-70%
9、你说的这段代码指的是第一个时钟给输入赋值,然后第二个时钟出计算结果,程序之所以写成阻塞赋值是这个意思,时序块always中都用非阻塞赋值。
11、如果只有一个时钟就是同步设计,出现多个时钟,并且数据之间有交互,就是异步设计。
谢谢,关于1.那该怎么选呢?4.假路径怎么知道是哪些?
因为不是专做后端的
1、一般是个buffer,尺寸看需求了
4、比如说你不想进行某些路径的时序检查,就可以设置他们为false path
比如有一个mux,他的输入是in1,in2,每次只能选择一个输出,那么就可以设置in1和in2之间是false path
