Skip to content

Commit 2605ff6

Browse files
Merge pull request #17 from verilog-to-routing/feature-create-generated-clock
Updated Create Generated Clock Syntax
2 parents 6e2280f + 2c046dd commit 2605ff6

7 files changed

Lines changed: 36 additions & 33 deletions

File tree

src/main.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727

2828
using namespace sdcparse;
2929

30+
void print_object_id(ObjectId object_id);
3031
void print_object_id_vec(const std::vector<ObjectId>& group);
3132
void print_from_to_object_id_vec(const std::vector<ObjectId>& from, const std::vector<ObjectId>& to);
3233

@@ -81,8 +82,8 @@ class PrintCallback : public Callback {
8182
flushing_printf(" -name %s",
8283
cmd.name.c_str());
8384
}
84-
std::string source_name = obj_database.get_object_name(ObjectId(cmd.source));
85-
flushing_printf(" -source %s", source_name.c_str());
85+
flushing_printf(" -source ");
86+
print_object_id_vec(cmd.sources);
8687
if (cmd.divide_by != sdcparse::UNINITIALIZED_INT)
8788
flushing_printf(" -divide_by %d", cmd.divide_by);
8889
if (cmd.multiply_by != sdcparse::UNINITIALIZED_INT)
@@ -297,14 +298,18 @@ int main(int argc, char **argv) {
297298
return 0;
298299
}
299300

301+
void print_object_id(ObjectId object_id) {
302+
size_t object_id_val = static_cast<size_t>(object_id);
303+
flushing_printf("__vtr_obj_%lld", static_cast<long long int>(object_id_val));
304+
}
305+
300306
void print_object_id_vec(const std::vector<ObjectId>& object_ids) {
301307
if (object_ids.empty())
302308
return;
303309

304310
flushing_printf("{");
305311
for (size_t i = 0; i < object_ids.size(); ++i) {
306-
size_t object_id_val = static_cast<size_t>(object_ids[i]);
307-
flushing_printf("__vtr_obj_%lld", static_cast<long long int>(object_id_val));
312+
print_object_id(object_ids[i]);
308313

309314
if (i != object_ids.size() - 1) {
310315
flushing_printf(" ");

src/sdcparse.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ struct CreateClock {
193193

194194
struct CreateGeneratedClock {
195195
std::string name = "";
196-
ObjectId source = ObjectId::INVALID();
196+
std::vector<ObjectId> sources;
197197
int divide_by = UNINITIALIZED_INT;
198198
int multiply_by = UNINITIALIZED_INT;
199199
bool add = false;

src/tcl/sdc_commands.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,14 +59,14 @@ void libsdcparse_create_clock_internal(double period,
5959
}
6060

6161
void libsdcparse_create_generated_clock_internal(const std::string& name,
62-
sdcparse::ObjectId source,
62+
const std::vector<sdcparse::ObjectId>& sources,
6363
int divide_by,
6464
int multiply_by,
6565
bool add,
6666
const std::vector<sdcparse::ObjectId>& targets) {
6767
sdcparse::CreateGeneratedClock create_gen_clock_cmd;
6868
create_gen_clock_cmd.name = name;
69-
create_gen_clock_cmd.source = source;
69+
create_gen_clock_cmd.sources = sources;
7070
create_gen_clock_cmd.divide_by = divide_by;
7171
create_gen_clock_cmd.multiply_by = multiply_by;
7272
create_gen_clock_cmd.add = add;

src/tcl/sdc_commands.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,11 @@ void libsdcparse_create_clock_internal(double period,
3535
const std::vector<sdcparse::ObjectId>& targets);
3636

3737
void libsdcparse_create_generated_clock_internal(const std::string& name,
38-
sdcparse::ObjectId source,
39-
int divide_by,
40-
int multiply_by,
41-
bool add,
42-
const std::vector<sdcparse::ObjectId>& targets);
38+
const std::vector<sdcparse::ObjectId>& sources,
39+
int divide_by,
40+
int multiply_by,
41+
bool add,
42+
const std::vector<sdcparse::ObjectId>& targets);
4343

4444
void libsdcparse_set_clock_groups_internal(const std::vector<sdcparse::ObjectId>& clock_list,
4545
const std::vector<int>& clock_group_start_pos,

src/tcl/sdc_wrapper.tcl

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -271,18 +271,15 @@ proc create_generated_clock {args} {
271271
flags {-name -source -divide_by -multiply_by}
272272
bools {-add}
273273
pos {targets}
274-
require {-source targets}
274+
require {-source}
275275
types {-divide_by integer -multiply_by integer}
276276
}
277277

278278
set params [libsdcparse_generic_sdc_parser "create_generated_clock" $spec $args]
279279

280280
set name [dict get $params -name]
281281

282-
set src [libsdcparse_convert_to_objects "create_generated_clock" [dict get $params -source] {port pin net}]
283-
if {[llength $src] != 1} {
284-
error "create_generated_clock: Only one source can be defined, found: '$src'"
285-
}
282+
set id_sources [libsdcparse_convert_to_objects "create_generated_clock" [dict get $params -source] {port pin net}]
286283

287284
set divide_by [dict get $params -divide_by]
288285
if {$divide_by == ""} {
@@ -303,9 +300,9 @@ proc create_generated_clock {args} {
303300

304301
set add [dict get $params -add]
305302

306-
set id_targets [libsdcparse_convert_to_objects "create_generated_clock" [dict get $params targets] {port}]
303+
set id_targets [libsdcparse_convert_to_objects "create_generated_clock" [dict get $params targets] {port pin net}]
307304

308-
libsdcparse_create_generated_clock_internal $name $src $divide_by $multiply_by $add $id_targets
305+
libsdcparse_create_generated_clock_internal $name $id_sources $divide_by $multiply_by $add $id_targets
309306
}
310307

311308
proc set_clock_groups {args} {
@@ -844,4 +841,4 @@ proc libsdcparse_is_object_id_internal {obj} {
844841
return 1
845842
}
846843
return 0
847-
}
844+
}

test/basic/create_generated_clock.sdc

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,30 @@ puts [libsdcparse_create_port "gen_clk1" -direction INPUT]
88
puts [libsdcparse_create_port "gen_clk2" -direction INPUT]
99
# CHECK: [[gen_clk3_port_ptr:__vtr_obj_[0-9]+]]
1010
puts [libsdcparse_create_port "gen_clk3" -direction INPUT]
11+
# CHECK: [[clk4_port_ptr:__vtr_obj_[0-9]+]]
12+
puts [libsdcparse_create_port "clk4" -direction INPUT]
13+
# CHECK: [[clk4_net_ptr:__vtr_obj_[0-9]+]]
14+
puts [libsdcparse_create_net "clk4"]
1115

1216
create_clock -period 1.0 clk1
1317

14-
# CHECK: create_generated_clock -source clk1 -divide_by 4 {[[gen_clk1_port_ptr]]}
18+
# CHECK: create_generated_clock -source {[[clk1_port_ptr]]} -divide_by 4 {[[gen_clk1_port_ptr]]}
1519
create_generated_clock -source clk1 -divide_by 4 gen_clk1
1620

1721
# CHECK: gen_clk1: {{__vtr_obj_[0-9]+}}
1822
puts "gen_clk1: [get_clocks gen_clk1]"
1923

20-
# CHECK: create_generated_clock -source clk1 -multiply_by 5 {[[gen_clk2_port_ptr]]}
24+
# CHECK: create_generated_clock -source {[[clk1_port_ptr]]} -multiply_by 5 {[[gen_clk2_port_ptr]]}
2125
create_generated_clock -source clk1 -multiply_by 5 gen_clk2
2226

23-
# CHECK: create_generated_clock -name gen_clk_custom_name -source clk1 -multiply_by 6 {[[gen_clk3_port_ptr]]}
27+
# CHECK: create_generated_clock -name gen_clk_custom_name -source {[[clk1_port_ptr]]} -multiply_by 6 {[[gen_clk3_port_ptr]]}
2428
create_generated_clock -name gen_clk_custom_name -source clk1 -multiply_by 6 gen_clk3
2529

26-
# CHECK: create_generated_clock -name gen_clk4 -source clk1 -multiply_by 8 -add {[[gen_clk2_port_ptr]]}
30+
# CHECK: create_generated_clock -name gen_clk4 -source {[[clk1_port_ptr]]} -multiply_by 8 -add {[[gen_clk2_port_ptr]]}
2731
create_generated_clock -name gen_clk4 -source clk1 -multiply_by 8 gen_clk2 -add
32+
33+
# CHECK: create_generated_clock -name gen_clk5 -source {[[clk1_port_ptr]]} -divide_by 2
34+
create_generated_clock -name gen_clk5 -source clk1 -divide_by 2
35+
36+
# CHECK: create_generated_clock -source {[[clk4_port_ptr]] [[clk4_net_ptr]]} -divide_by 2 {[[gen_clk1_port_ptr]]}
37+
create_generated_clock -source clk4 -divide_by 2 gen_clk1

test/strong/create_generated_clock/missing_targets.sdc

Lines changed: 0 additions & 9 deletions
This file was deleted.

0 commit comments

Comments
 (0)