Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
MiniEDA
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
MiniEDA
Commits
2380229d
Commit
2380229d
authored
Nov 30, 2022
by
lvzhengyang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add create/delete Block
parent
374c8b04
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
87 additions
and
14 deletions
+87
-14
src/db_mgr/include/db_mgr/db_mgr.h
+15
-7
src/db_mgr/src/db_mgr.cpp
+37
-7
src/db_mgr/src/db_mgr.i
+10
-0
src/db_mgr/src/db_mgr.tcl
+21
-0
tcl_scripts/test.tcl
+4
-0
No files found.
src/db_mgr/include/db_mgr/db_mgr.h
View file @
2380229d
...
...
@@ -9,7 +9,9 @@
namespace
odb
{
class
dbDatabase
;
class
dbBlock
;
class
lefin
;
class
defin
;
}
// Logger symbol: MGR
...
...
@@ -46,14 +48,16 @@ class DbMgr {
public
:
DbMgr
();
~
DbMgr
();
// dbDatadase::destroy()
bool
readLibDB
(
const
char
*
path
,
const
char
*
libname
,
bool
isTech
=
false
,
bool
isLib
=
true
);
bool
readLibDB
(
const
char
*
lef_path
,
const
char
*
libname
,
bool
isTech
=
false
,
bool
isLib
=
true
);
bool
haveBlockDB
(
const
std
::
string
block
);
bool
createBlockDB
(
const
char
*
block_name
);
bool
deleteBlockDB
(
const
char
*
block_name
);
/*
bool readBlockDBs();
bool addBlockDB();
bool deleteBlockDB();
bool readBlockDef();
*/
bool
haveBlockDB
(
std
::
string
block
);
void
setLogger
(
utl
::
Logger
*
logger
);
void
init
(
utl
::
Logger
*
logger
);
...
...
@@ -73,8 +77,12 @@ private:
std
::
unordered_map
<
std
::
string
,
odb
::
dbDatabase
*>
block_dbs_
;
utl
::
Logger
*
logger_
;
// parsers
/* parsers */
// use OpenDB's lef/def parser
std
::
unique_ptr
<
odb
::
lefin
>
lef_parser_
;
std
::
unique_ptr
<
odb
::
defin
>
def_parser_
;
// use Limbo's verilog parser
};
}
// namespace db_mgr
}
// namespace eda
...
...
src/db_mgr/src/db_mgr.cpp
View file @
2380229d
#include "db_mgr/db_mgr.h"
#include "db.h"
#include "lefin.h"
#include "defin.h"
#include "utl/Logger.h"
namespace
eda
{
...
...
@@ -8,7 +9,9 @@ namespace db_mgr {
DbMgr
::
DbMgr
()
:
lib_db_
(
nullptr
),
logger_
(
nullptr
)
logger_
(
nullptr
),
lef_parser_
(
nullptr
),
def_parser_
(
nullptr
)
{
block_dbs_
.
clear
();
}
...
...
@@ -34,7 +37,7 @@ DbMgr::~DbMgr()
}
}
bool
DbMgr
::
haveBlockDB
(
std
::
string
block
)
bool
DbMgr
::
haveBlockDB
(
const
std
::
string
block
)
{
if
(
block_dbs_
.
empty
())
return
false
;
return
block_dbs_
.
find
(
block
)
!=
block_dbs_
.
end
();
...
...
@@ -45,23 +48,50 @@ void DbMgr::setLogger(utl::Logger* logger)
logger_
=
logger
;
}
bool
DbMgr
::
readLibDB
(
const
char
*
path
,
const
char
*
libname
,
bool
DbMgr
::
readLibDB
(
const
char
*
lef_
path
,
const
char
*
libname
,
bool
isTech
,
bool
isLib
)
{
if
(
isTech
&&
isLib
)
{
lef_parser_
->
createTechAndLib
(
libname
,
path
);
lef_parser_
->
createTechAndLib
(
libname
,
lef_
path
);
}
else
if
(
isTech
&&
!
isLib
)
{
lef_parser_
->
createTech
(
path
);
lef_parser_
->
createTech
(
lef_
path
);
}
else
if
(
!
isTech
&&
isLib
)
{
lef_parser_
->
createLib
(
libname
,
path
);
lef_parser_
->
createLib
(
libname
,
lef_
path
);
}
else
{
logger_
->
warn
(
utl
::
MGR
,
1
,
"Failed to read {}. LEF file must be Tech or Lib."
,
path
);
lef_
path
);
return
false
;
}
return
true
;
}
bool
DbMgr
::
createBlockDB
(
const
char
*
block_name
)
{
if
(
haveBlockDB
(
block_name
))
{
logger_
->
error
(
utl
::
MGR
,
2
,
"Cannot create existing block: {}"
,
block_name
);
return
false
;
}
odb
::
dbDatabase
*
block_db
=
odb
::
dbDatabase
::
duplicate
(
lib_db_
);
block_dbs_
.
emplace
(
std
::
make_pair
(
block_name
,
block_db
));
logger_
->
info
(
utl
::
MGR
,
3
,
"Create Block: {}. Ensure lib has been successfully read."
,
block_name
);
return
true
;
}
bool
DbMgr
::
deleteBlockDB
(
const
char
*
block_name
)
{
if
(
!
haveBlockDB
(
block_name
))
{
logger_
->
error
(
utl
::
MGR
,
4
,
"Failed to delete non-existed block {}."
,
block_name
);
return
false
;
}
odb
::
dbDatabase
::
destroy
(
block_dbs_
.
find
(
block_name
)
->
second
);
block_dbs_
.
erase
(
block_name
);
logger_
->
info
(
utl
::
MGR
,
4
,
"Delete Block: {}."
,
block_name
);
return
true
;
}
}
// namespace db_mgr
}
// namespace eda
src/db_mgr/src/db_mgr.i
View file @
2380229d
...
...
@@ -26,6 +26,16 @@ bool read_lef(const char* file_path, const char* libname,
return getDbMgr()->readLibDB(file_path, libname, isTech, isLib);
}
bool create_blk_db(const char* block_name)
{
return getDbMgr()->createBlockDB(block_name);
}
bool delete_blk_db(const char* block_name)
{
return getDbMgr()->deleteBlockDB(block_name);
}
} // namespace db_mgr
%} // inline
src/db_mgr/src/db_mgr.tcl
View file @
2380229d
...
...
@@ -29,3 +29,23 @@ proc read_lef { args } {
db_mgr::read_lef
$lef
_name
$lib
_name
$is
_tech
$is
_lib
}
define_cmd_args
"create_block"
{
block_name
}
proc
create_block
{
args
}
{
parse_key_args
"create_block"
args keys
{}
flags
{}
foreach block
$args
{
db_mgr::create_blk_db
$block
}
}
define_cmd_args
"delete_block"
{
block_name
}
proc
delete_block
{
args
}
{
parse_key_args
"delete_block"
args keys
{}
flags
{}
foreach block
$args
{
db_mgr::delete_blk_db
$block
}
}
\ No newline at end of file
tcl_scripts/test.tcl
0 → 100644
View file @
2380229d
read_lef -tech ../test/Nangate45/Nangate45_tech.lef
read_lef ../test/Nangate45/Nangate45.lef
read_lef ../test/Nangate45/Nangate45_stdcell.lef
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment