Synopsys综合指令
综合指令(Synthesis directives)是一些特殊的注释,一般以//synopsys、/*synopsys、//$s或//$S开始,能够影响综合工具的行为,但是在其他工具看来这就是普通的注释。
常见的综合指令有:
- async_set_reset
- async_set_reset_local
- async_set_reset_local_all
- dc_tcl_script_begin and dc_tcl_script_end
- enum
- full_case
- infer_multibit and dont_infer_multibit
- infer_mux
- infer_onehot_mux
- keep_signal_name
- one_cold
- one_hot
- parallel_case
- preserve_sequential
- sync_set_reset
- sync_set_reset_local
- sync_set_reset_local_all
- template
- translate_off and translate_on
full_case和parallel_case
结论:不要用!!!
有一句神话说:这两条指令会使设计变得更小更快,而且不会生成latch。事实上,这两条指令可能会对设计毫无影响、没有什么作用;甚至把设计变得更大更慢,还是会有latch生成出来。而且这两条指令可能会把设计的功能改变,导致前后仿结果不一致,所以这两条指令其实是危险的,最好是在Verilog中避免使用到。
full_case
设置了full_case语句代表的是case语句中即使没有default也认为现在的case目前的所有情况已经完整,不会有其他情况出现。下面看三个使用full_case的例子
module mux3d(y,a,b,c,sel);
input [1:0] sel;
input a,b,c;
output reg y;
always@(a or b or c or sel) begin
//y = 1'b0;
case(sel) //synposys full_case
2'b00 : y=a;
2'b01 : y=b;
2'b10 : y=c;
2'b11 : y=1'b0;