Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
H
Hdlmake
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
15
Issues
15
List
Board
Labels
Milestones
Merge Requests
4
Merge Requests
4
Wiki
Wiki
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Projects
Hdlmake
Commits
26768807
Commit
26768807
authored
Jun 04, 2016
by
Javier D. Garcia-Lasheras
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
New parse & solve strategy based on Directed Acyclic Graphs
parent
f694a735
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
278 additions
and
93 deletions
+278
-93
dep_file.py
hdlmake/dep_file.py
+1
-0
module_pool.py
hdlmake/module_pool.py
+1
-6
new_dep_solver.py
hdlmake/new_dep_solver.py
+208
-54
srcfile.py
hdlmake/srcfile.py
+1
-1
vhdl_parser.py
hdlmake/vhdl_parser.py
+36
-15
vlog_parser.py
hdlmake/vlog_parser.py
+31
-17
No files found.
hdlmake/dep_file.py
View file @
26768807
...
...
@@ -154,6 +154,7 @@ class DepFile(File):
self
.
provided_architectures
=
[]
self
.
provided_entities
=
[]
self
.
provided_packages
=
[]
self
.
used_packages
=
[]
self
.
is_parsed
=
False
...
...
hdlmake/module_pool.py
View file @
26768807
...
...
@@ -208,14 +208,9 @@ class ModulePool(list):
top_entity
=
self
.
top_module
.
top_module
#self.solve_dependencies()
all_files
=
self
.
build_complete_file_set
()
if
not
self
.
_deps_solved
:
logging
.
debug
(
"- begin solve"
)
dep_solver
.
solve
(
all_files
)
logging
.
debug
(
"- end solve"
)
self
.
_deps_solved
=
True
from
srcfile
import
SourceFileSet
source_files
=
SourceFileSet
()
source_files
.
add
(
dep_solver
.
make_dependency_set
(
all_files
,
top_entity
))
source_files
.
add
(
dep_solver
.
solve
(
all_files
,
top_entity
))
return
source_files
def
get_top_module
(
self
):
...
...
hdlmake/new_dep_solver.py
View file @
26768807
This diff is collapsed.
Click to expand it.
hdlmake/srcfile.py
View file @
26768807
...
...
@@ -78,7 +78,7 @@ class VerilogFile(SourceFile):
if
include_dirs
:
self
.
include_dirs
.
extend
(
include_dirs
)
self
.
include_dirs
.
append
(
path_mod
.
relpath
(
self
.
dirname
))
self
.
provided_modules
=
[]
class
SVFile
(
VerilogFile
):
pass
...
...
hdlmake/vhdl_parser.py
View file @
26768807
...
...
@@ -52,6 +52,12 @@ class Architecture():
self
.
model
=
None
;
self
.
components
=
None
;
self
.
entities
=
None
;
self
.
instances
=
None
;
class
Package
():
def
__init__
(
self
):
self
.
model
=
None
;
self
.
components
=
None
;
class
VHDLParser
(
DepParser
):
...
...
@@ -107,26 +113,41 @@ class VHDLParser(DepParser):
if
len
(
architecture_inner_content
)
==
1
:
architecture_aux
.
components
=
component_pattern
.
findall
(
architecture_inner_content
[
0
])
instances_pattern
=
re
.
compile
(
"^
\
s*(
\
w+)
\
s*
\
:
\
s*(
\
w+)
\
s*(?:port
\
s+map.*?;|generic
\
s+map.*?;|
\
s*;)"
,
re
.
DOTALL
|
re
.
MULTILINE
|
re
.
IGNORECASE
)
instance_from_library_pattern
=
re
.
compile
(
"^
\
s*(
\
w+)
\
s*
\
:
\
s*entity
\
s*(
\
w+)
\
s*
\
.
\
s*(
\
w+)
\
s*(?:port
\
s+map.*?;|generic
\
s+map.*?;|
\
s*;)"
,
re
.
DOTALL
|
re
.
MULTILINE
|
re
.
IGNORECASE
)
architecture_aux
.
entities
=
instances_pattern
.
findall
(
architecture_inner_content
[
0
])
architecture_aux
.
instances
=
instance_from_library_pattern
.
findall
(
architecture_inner_content
[
0
])
dep_file
.
provided_architectures
.
append
(
architecture_aux
)
instance_from_library_pattern
=
re
.
compile
(
"^
\
s*(
\
w+)
\
s*
\
:
\
s*entity
\
s*(
\
w+)
\
s*
\
.
\
s*(
\
w+)
\
s*(?:port
\
s+map.*?;|generic
\
s+map.*?;|
\
s*;)"
,
re
.
DOTALL
|
re
.
MULTILINE
|
re
.
IGNORECASE
)
print
(
"**********************************************************************************"
)
print
(
instance_from_library_pattern
.
findall
(
buf
))
print
(
"**********************************************************************************"
)
#print("Dump architectures")
#for architecture_test in dep_file.architectures:
# print("--------------------------")
# print(architecture_test.model)
# print(architecture_test.components)
# print(architecture_test.entities)
# print("--------------------------")
#new package
package_pattern
=
re
.
compile
(
"^
\
s*package
\
s+(
\
w+)
\
s+is"
,
re
.
DOTALL
|
re
.
MULTILINE
|
re
.
IGNORECASE
)
def
do_package
(
s
)
:
logging
.
debug
(
"found package
%
s.
%
s"
%
(
dep_file
.
library
,
s
.
group
(
1
)
))
dep_file
.
add_relation
(
DepRelation
(
"
%
s.
%
s"
%
(
dep_file
.
library
,
s
.
group
(
1
)),
DepRelation
.
PROVIDE
,
DepRelation
.
PACKAGE
))
return
"<hdlmake package
%
s.
%
s>"
%
(
dep_file
.
library
,
s
.
group
(
1
))
buf
=
re
.
sub
(
package_pattern
,
do_package
,
buf
)
#def do_package(s) :
# logging.debug("found package %s.%s" % (dep_file.library, s.group(1) ))
# dep_file.add_relation(DepRelation("%s.%s" % (dep_file.library, s.group(1)),
# DepRelation.PROVIDE,
# DepRelation.PACKAGE))
# return "<hdlmake package %s.%s>" % (dep_file.library, s.group(1))
#buf = re.sub(package_pattern, do_package, buf)
provided_packages
=
package_pattern
.
findall
(
buf
)
print
(
"Provided packages dependencies:"
)
print
(
provided_packages
)
for
package
in
provided_packages
:
package_aux
=
Package
();
package_aux
.
model
=
package
package_inner_pattern
=
re
.
compile
(
"package
\
s+
%
s
\
s+is(.*)end
\
s+
%
s.*?;"
%
(
package
,
package
),
re
.
DOTALL
|
re
.
MULTILINE
|
re
.
IGNORECASE
)
package_inner_content
=
package_inner_pattern
.
findall
(
buf
)
print
(
"******************* Package inner content ********************************"
)
print
(
package_inner_content
)
component_pattern
=
re
.
compile
(
"^
\
s*component
\
s+(
\
w+).*?end
\
s+component.*?;"
,
re
.
DOTALL
|
re
.
MULTILINE
|
re
.
IGNORECASE
)
if
len
(
package_inner_content
)
==
1
:
package_aux
.
components
=
component_pattern
.
findall
(
package_inner_content
[
0
])
print
(
package_aux
.
components
)
dep_file
.
provided_packages
.
append
(
package_aux
)
#component declaration
component_pattern
=
re
.
compile
(
"^
\
s*component
\
s+(
\
w+).*?end
\
s+component.*?;"
,
re
.
DOTALL
|
re
.
MULTILINE
|
re
.
IGNORECASE
)
...
...
hdlmake/vlog_parser.py
View file @
26768807
...
...
@@ -264,6 +264,12 @@ class VerilogPreprocessor(object):
return
list
(
set
(
deps
))
class
VlogModule
():
def
__init__
(
self
):
self
.
model
=
None
;
self
.
instances
=
None
;
class
VerilogParser
(
DepParser
):
reserved_words
=
[
"accept_on"
,
...
...
@@ -577,30 +583,38 @@ class VerilogParser(DepParser):
logging
.
debug
(
"file
%
s imports/uses
%
s.
%
s package"
%
(
dep_file
.
path
,
dep_file
.
library
,
s
.
group
(
1
)
)
)
dep_file
.
add_relation
(
DepRelation
(
"
%
s.
%
s"
%
(
dep_file
.
library
,
s
.
group
(
1
))
,
DepRelation
.
USE
,
DepRelation
.
PACKAGE
))
re
.
subn
(
import_pattern
,
do_imports
,
buf
)
#----------------------------------------------
use_packages
=
import_pattern
.
findall
(
buf
)
print
(
'use package:
\n
%
s'
%
use_packages
)
dep_file
.
used_packages
=
use_packages
#packages
m_inside_package
=
re
.
compile
(
"package
\
s+(
\
w+)
\
s*(?:
\
(.*?
\
))?
\
s*(.+?)endpackage"
,
re
.
DOTALL
|
re
.
MULTILINE
)
def
do_package
(
s
):
logging
.
debug
(
"found pacakge
%
s.
%
s"
%
(
dep_file
.
library
,
s
.
group
(
1
))
)
dep_file
.
add_relation
(
DepRelation
(
"
%
s.
%
s"
%
(
dep_file
.
library
,
s
.
group
(
1
)),
DepRelation
.
PROVIDE
,
DepRelation
.
PACKAGE
))
re
.
subn
(
m_inside_package
,
do_package
,
buf
)
#----------------------------------------------
provide_packages
=
m_inside_package
.
findall
(
buf
)
print
(
'provide package:
\n
%
s'
%
provide_packages
)
dep_file
.
provided_packages
=
provide_packages
#modules and instatniations
m_inside_module
=
re
.
compile
(
"(?:module|interface)
\
s+(
\
w+)
\
s*(?:
\
(.*?
\
))?
\
s*(.+?)(?:endmodule|endinterface)"
,
re
.
DOTALL
|
re
.
MULTILINE
)
m_instantiation
=
re
.
compile
(
"(?:
\
A|
\\
s*)
\
s*(
\
w+)
\
s+(?:#
\
s*
\
(.*?
\
)
\
s*)?(
\
w+)
\
s*
\
(.*?
\
)
\
s*"
,
re
.
DOTALL
|
re
.
MULTILINE
)
def
do_module
(
s
):
logging
.
debug
(
"found module
%
s.
%
s"
%
(
dep_file
.
library
,
s
.
group
(
1
)
))
dep_file
.
add_relation
(
DepRelation
(
"
%
s.
%
s"
%
(
dep_file
.
library
,
s
.
group
(
1
)),
DepRelation
.
PROVIDE
,
DepRelation
.
MODULE
))
def
do_inst
(
s
):
mod_name
=
s
.
group
(
1
)
if
(
mod_name
in
self
.
reserved_words
):
return
logging
.
debug
(
"-> instantiates
%
s.
%
s as
%
s"
%
(
dep_file
.
library
,
s
.
group
(
1
),
s
.
group
(
2
)
))
dep_file
.
add_relation
(
DepRelation
(
"
%
s.
%
s"
%
(
dep_file
.
library
,
s
.
group
(
1
)),
DepRelation
.
USE
,
DepRelation
.
MODULE
))
re
.
subn
(
m_instantiation
,
do_inst
,
s
.
group
(
2
))
re
.
subn
(
m_inside_module
,
do_module
,
buf
)
dep_file
.
add_relation
(
DepRelation
(
dep_file
.
path
,
DepRelation
.
PROVIDE
,
DepRelation
.
INCLUDE
))
#----------------------------------------------
provide_modules
=
m_inside_module
.
findall
(
buf
)
print
(
'provide module:
\n
%
s'
%
provide_modules
)
for
module
in
provide_modules
:
module_aux
=
VlogModule
();
module_aux
.
model
=
module
[
0
]
m_instantiation
=
re
.
compile
(
"(?:
\
A|
\\
s*)
\
s*(
\
w+)
\
s+(?:#
\
s*
\
(.*?
\
)
\
s*)?(
\
w+)
\
s*
\
(.*?
\
)
\
s*"
,
re
.
DOTALL
|
re
.
MULTILINE
)
used_instances
=
m_instantiation
.
findall
(
module
[
1
])
print
(
"used instances:"
)
module_aux
.
instances
=
used_instances
print
(
used_instances
)
dep_file
.
provided_modules
.
append
(
module_aux
)
dep_file
.
is_parsed
=
True
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