在多时钟域设计时,coding 结束后,需要做CDC(Clock Domain Cross)检查。一般使用Mentor Graphics推出的Questa-cdc工具或者Spyglass cdc。目前使用的Questa-cdc,version10.0f linux of may 2013下面记录一些用法。
【1】一个design被设置为blackbox后,还需要将该design 端口设置相应的同步的时钟。
例如:
module example ( input clk , input rst_n, input i_wren, input [31:0] i_wrdat, output reg o_wren, output reg [31:0] o_wrdat );
endmodule |
将exmaple设置为blackbox。如果不对example端口约束,那么这些端口就没有时钟信息,就会报blockbox的问题。
// 0in set_black_box exmaple // 0in set_cdc_port_domain i_wren -clock clk -module example // 0in set_cdc_port_domain i_wrdat -clock clk -module example // 0in set_cdc_port_domain o_wren -clock clk -module example // 0in set_cdc_port_domain o_wrdat -clock clk -module example
|
【2】 约束的撰写
ctrl信息包括 set_cdc_prefence.
然后每个design有自己的特殊性,需要针对design在设置design_ctrl文件,包括时钟
复位设置、端口时钟域设置、端口常值设置、blackbox设置等。
//design_ctrl.v module ctrl; set_cdc_clock clk_200m -period 5 -group CLK_GROUP_200M set_cdc_clock clk_100m -period 10 -group CLK_GROUP_100M set_reset
set_cdc_port_domain signal_name -clock clk_name -module module_name
set_block_box example set_constant endmodule |
【3】启动
0in -od $(design)
-cmd cdc
-ctrl ctrl.v
-ctrl design_ctrl.v
-f filelist
-d $(design)
【4】CDC scheme:list as violation、caution、evaluation。
使用set_cdc_report 来调整scheme的level。
set_cdc_report scheme_name -severity {violation | caution | evaluation | off}
【5】如果一个部件内部使用使用了异步复位同步释放电路,并且产生内部复位信号,那么必须在ctrl_top.v里面做如下设置:
module ctrl_top; // 0in set_cdc_preference -enable_interal_reset
endmodule |
【6】出现一个现象:同步fifo使用了一个控制器 DW_fifoctrl_s1_sf,但是
就不能设置set_cdc_preference -black_box_empty_module。这句话意思就是空的module设置为blackbox。DW文件中会有 “ //synopsys translate off ”
一般的做法,把控制器的端口都约束到相应时钟上。
// 0in set_cdc_port_domain push_n -clock clk -module DW_fifoctrl_s1_sf
.....
【7】0in_cdc options
[ [ -db <db_name> | [db-name] [-mergedb <db-name> | [[-p <project_name>] | <ptoject_file> [[ <hdl_file_name>+[-]] \
[-d <top_level_module>] [-do <output_direcroty>] \
[-f <verilog_file_list> ] [-vhf <VHDL_file_list>] \
[-libmapfile <library_map_file>] [-libmap <name>=<value>] \
[-L <search library for saved module> ] \
[-Lf <library for saved modules.search before uselib> ] \
[-G <name>=<value>] [-g <name>=<value>] \
[-sdc_in <sdc_file> ] [-sdc_out <sdc_file>] \
[-v95] [-formal] [-verbos] \
[-ctrl <verilog control file>] [-vhctrl <vhdl control file>] \
[-import_ctrl <control_file>] [-run] \
[-no_directive_error_check] \
[-work <work_lib_path>] [-y <library_search_file>] [-v <library file>] \
[-cache <location of the cache directory>] \
[+define+<name=value>] [+libext+<ext>] [+incdir+<path>] \
[-block <treat module as a block for hierarchical emphsis+[-]>] \
[-id <CDC_ID>]
【8】CDC scheme summary
CDC scheme |
name |
Status |
protocol |
single-bit signal does not have proper synchronizer |
no_sync |
V |
cdc_sample |
combinational logic before synchronizer |
combo_logic |
V |
clk_glitch |
signal feeds to the asynchronizer reset port of receiving register has no synchronizer. |
async_reset_no_sync |
V |
NA |
fainin logic from multiple clock domains |
fainin_different_clocks |
V |
cdc_sync |
signal source reconvergence |
single_source_reconvergence |
V |
NA |
reconvergence of sychronizers |
reconvergence |
V |
cdc_hamming1 |
redundant synchronization |
redundant |
V |
NA |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|