Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Synopsys: DC synthesis of design with different clocks

Status
Not open for further replies.

Vivek2Keviv

Newbie level 2
Joined
Jul 2, 2018
Messages
2
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Activity points
25
Hello all,

Greetings! Hope you all doing good!

I have a quick question about synopsys DC synthesis.

I have a top module called "topblock.v". This module has two sub modules called "block1.v", "block2.v".

The outputs of "block1.v" goes to "block2.v" as the inputs but the module "block1.v" is runnig with clock "clk_a" and the module "block2.v" is running with clock "clk_b".

Now the top module has two sub-modules running with two clocks!

I have a start up problem here.

1. Should I need to use TOPMODULE.v as design entry here? (TOPMODULE.v includes two submodules)?

2. I have used "set_clock groups" to seperate two clock group but I couldn't constraint the corresponding input,output delays.

3. Why I couldn't seperate inputs and outputs with respect to clocks?

4. I have the scripts below. Can anyone please let me know what is the problem with this script?

I also attached image to clarify the situation.

Thanks in advance.
Vivek.

Code:
	analyze -format verilog -library work TOPMODULE.v
	elaborate TOPMODULE
	create_clock -period 10 -name CLK_A [get_ports CLK_A]
	create_clock -period 20 -name CLK_B [get_ports CLK_B]
	set_clock_groups -asynchronous -group CLK_A -group CLK_B 
	report_clock
	check_timing
	set_clock_latency 1 [get_clocks  CLK_A]
	set_clock_uncertainty 0.3 [get_clocks  CLK_A]
	set_clock_transition -max 0.25 [get_clocks  CLK_A]
	set_clock_transition -min 0.04 [get_clocks  CLK_A]
	set_clock_latency 2 [get_clocks  CLK_B]
	set_clock_uncertainty 1 [get_clocks  CLK_B]
	set_clock_transition -max 0.4 [get_clocks  CLK_B]
	set_clock_transition -min 0.1 [get_clocks  CLK_B]
	report_clock -skew
	check_timing
	set_ideal_network [get_ports RESET]
	set_input_delay  1 -max -clock CLK_A  [remove_from_collection [all_inputs] [get_ports CLK_A]] 
	set_output_delay 1 -max -clock  CLK_A  [all_outputs] 
	set_input_delay  4 -max -clock CLK_B  [remove_from_collection [all_inputs] [get_ports CLK_B]] 
	set_output_delay 3 -max -clock CLK_B  [all_outputs]
 

Attachments

  • Screen Shot 2018-07-02 at 21.09.29.png
    Screen Shot 2018-07-02 at 21.09.29.png
    47.3 KB · Views: 129

Now if I remember my Tcl and the sdc commands correctly...

[get_ports CLK_A] will return CLK_A it won't return a collection of inputs that use CLK_A.

Therefore your command [remove_form_collection [all_inputs] [get_ports CLK_A]] does this...
[remove_from_collection {in1 in2 in3 in4} {clk_a}]
which leaves you with a collection of {in1 in2 in3 in4} and not what you expect: {in2 in3 in4}

You should be using [get_ports in1] if you want to remove the signal on CLK_B from the set. There might be a command to specify inputs that only go to CLK_B but it's not get_ports (maybe get_ports with some option? I really don't know)
 

Now if I remember my Tcl and the sdc commands correctly...

[get_ports CLK_A] will return CLK_A it won't return a collection of inputs that use CLK_A.

Therefore your command [remove_form_collection [all_inputs] [get_ports CLK_A]] does this...
[remove_from_collection {in1 in2 in3 in4} {clk_a}]
which leaves you with a collection of {in1 in2 in3 in4} and not what you expect: {in2 in3 in4}

You should be using [get_ports in1] if you want to remove the signal on CLK_B from the set. There might be a command to specify inputs that only go to CLK_B but it's not get_ports (maybe get_ports with some option? I really don't know)





Hi,

Thanks for your quick reply!

Yeah, you are right! we can't use this command,
set_input_delay 1 -max -clock D_CLK [remove_from_collection [all_inputs] [get_ports CLK_A]]

But how to seperate inputs of specific clock from all_inputs???

As you mentioned we can specify the inputs seperately for the specfic clock but for the block having large number of inputs, writing all the inputs is painful isn't?

Also how to seperate outputs here? because the output is input to the another clock!!!

Thanks again for your reply.
 

set_input_delay or set_output_delay are only for pins of the device they don't apply to the block to block connections.

Personally I never used all_inputs or all_outputs, I specify using wildcards and partial names. This is where naming conventions really help.

e.g. Name all inputs on clk_a as ia_<some_input_pin_name> and all outputs as oa_<some_output_pin_name> now it's easy to specify all the pins for an output or input based on the clock domain.
 

set_input_delay or set_output_delay are only for pins of the device they don't apply to the block to block connections.

Personally I never used all_inputs or all_outputs, I specify using wildcards and partial names. This is where naming conventions really help.

e.g. Name all inputs on clk_a as ia_<some_input_pin_name> and all outputs as oa_<some_output_pin_name> now it's easy to specify all the pins for an output or input based on the clock domain.

agreed, use wildcards and some naming strategy.
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top