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
8cdbe392
Commit
8cdbe392
authored
Jul 20, 2013
by
Paweł Szostek
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add module information to files
parent
4ecf2baf
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
80 additions
and
46 deletions
+80
-46
module.py
src/module.py
+16
-8
srcfile.py
src/srcfile.py
+64
-38
No files found.
src/module.py
View file @
8cdbe392
...
...
@@ -4,14 +4,12 @@
# Author: Pawel Szostek (pawel.szostek@cern.ch)
from
__future__
import
print_function
from
manifest_parser
import
Manifest
,
ManifestParser
from
srcfile
import
VerilogFile
,
VHDLFile
,
SourceFileFactory
,
SourceFileSet
import
path
as
path_mod
import
os
import
global_mod
import
logging
from
manifest_parser
import
Manifest
,
ManifestParser
from
srcfile
import
SourceFileSet
,
SourceFileFactory
from
srcfile
import
VerilogFile
,
VHDLFile
import
traceback
class
Module
(
object
):
...
...
@@ -331,8 +329,8 @@ class Module(object):
else
:
self
.
git
=
[]
self
.
target
=
self
.
_manifest
[
"target"
]
self
.
action
=
self
.
_manifest
[
"action"
]
self
.
target
=
self
.
_manifest
[
"target"
]
.
lower
()
self
.
action
=
self
.
_manifest
[
"action"
]
.
lower
()
if
self
.
_manifest
[
"syn_name"
]
is
None
and
self
.
_manifest
[
"syn_project"
]
is
not
None
:
self
.
syn_name
=
self
.
_manifest
[
"syn_project"
][:
-
5
]
# cut out .xise from the end
...
...
@@ -423,9 +421,19 @@ class Module(object):
for
f_dir
in
dir
:
f_dir
=
os
.
path
.
join
(
self
.
path
,
p
,
f_dir
)
if
not
os
.
path
.
isdir
(
f_dir
):
srcs
.
add
(
sff
.
new
(
f_dir
,
self
.
library
,
self
.
vcom_opt
,
self
.
vlog_opt
,
self
.
include_dirs
))
srcs
.
add
(
sff
.
new
(
path
=
f_dir
,
module
=
self
,
library
=
self
.
library
,
vcom_opt
=
self
.
vcom_opt
,
vlog_opt
=
self
.
vlog_opt
,
include_dirs
=
self
.
include_dirs
))
else
:
srcs
.
add
(
sff
.
new
(
p
,
self
.
library
,
self
.
vcom_opt
,
self
.
vlog_opt
,
self
.
include_dirs
))
srcs
.
add
(
sff
.
new
(
path
=
p
,
module
=
self
,
library
=
self
.
library
,
vcom_opt
=
self
.
vcom_opt
,
vlog_opt
=
self
.
vlog_opt
,
include_dirs
=
self
.
include_dirs
))
return
srcs
def
build_global_file_list
(
self
):
...
...
src/srcfile.py
View file @
8cdbe392
...
...
@@ -22,16 +22,20 @@
from
__future__
import
print_function
from
dependable_file
import
DependableFile
import
os
import
sys
import
global_mod
import
logging
import
flow
import
path
as
path_mod
from
subprocess
import
Popen
,
PIPE
class
File
(
object
):
def
__init__
(
self
,
path
):
def
__init__
(
self
,
path
,
module
=
None
):
self
.
path
=
path
if
module
is
None
:
self
.
module
=
global_mod
.
top_module
else
:
assert
not
isinstance
(
module
,
basestring
)
self
.
module
=
module
@
property
def
name
(
self
):
...
...
@@ -92,9 +96,9 @@ class File(object):
class
SourceFile
(
DependableFile
,
File
):
cur_index
=
0
def
__init__
(
self
,
path
,
library
=
None
):
def
__init__
(
self
,
path
,
module
,
library
=
None
):
DependableFile
.
__init__
(
self
)
File
.
__init__
(
self
,
path
)
File
.
__init__
(
self
,
path
=
path
,
module
=
module
)
if
not
library
:
library
=
"work"
...
...
@@ -106,14 +110,14 @@ class SourceFile(DependableFile, File):
class
VHDLFile
(
SourceFile
):
def
__init__
(
self
,
path
,
library
=
None
,
vcom_opt
=
None
):
SourceFile
.
__init__
(
self
,
path
,
library
)
def
__init__
(
self
,
path
,
module
,
library
=
None
,
vcom_opt
=
None
):
SourceFile
.
__init__
(
self
,
path
=
path
,
module
=
module
,
library
=
library
)
if
not
vcom_opt
:
self
.
vcom_opt
=
""
else
:
self
.
vcom_opt
=
vcom_opt
def
_
_
check_encryption
(
self
):
def
_check_encryption
(
self
):
f
=
open
(
self
.
path
,
"rb"
)
s
=
f
.
read
(
3
)
f
.
close
()
...
...
@@ -123,20 +127,20 @@ class VHDLFile(SourceFile):
return
False
def
_create_deps_provides
(
self
):
if
self
.
_
_
check_encryption
():
if
self
.
_check_encryption
():
self
.
dep_index
=
SourceFile
.
gen_index
(
self
)
else
:
self
.
dep_provides
=
list
(
self
.
_
_
search_packages
())
self
.
dep_provides
=
list
(
self
.
_search_packages
())
logging
.
debug
(
self
.
path
+
" provides "
+
str
(
self
.
dep_provides
))
def
_create_deps_requires
(
self
):
if
self
.
_
_
check_encryption
():
if
self
.
_check_encryption
():
self
.
dep_index
=
SourceFile
.
gen_index
(
self
)
else
:
self
.
dep_requires
=
list
(
self
.
_
_
search_use_clauses
())
self
.
dep_requires
=
list
(
self
.
_search_use_clauses
())
logging
.
debug
(
self
.
path
+
" provides "
+
str
(
self
.
dep_provides
))
def
_
_
search_use_clauses
(
self
):
def
_search_use_clauses
(
self
):
"""
Reads a file and looks for 'use' clause. For every 'use' with
non-standard library a tuple (lib, file) is returned in a list.
...
...
@@ -207,7 +211,7 @@ class VHDLFile(SourceFile):
f
.
close
()
return
ret
def
_
_
search_packages
(
self
):
def
_search_packages
(
self
):
"""
Reads a file and looks for package clase. Returns list of packages' names
from the file
...
...
@@ -234,10 +238,10 @@ class VHDLFile(SourceFile):
class
VerilogFile
(
SourceFile
):
def
__init__
(
self
,
path
,
library
=
None
,
vlog_opt
=
None
,
include_dirs
=
None
):
def
__init__
(
self
,
path
,
module
,
library
=
None
,
vlog_opt
=
None
,
include_dirs
=
None
):
if
not
library
:
library
=
"work"
SourceFile
.
__init__
(
self
,
path
,
library
)
SourceFile
.
__init__
(
self
,
path
=
path
,
module
=
module
,
library
=
library
)
if
not
vlog_opt
:
self
.
vlog_opt
=
""
else
:
...
...
@@ -255,7 +259,7 @@ class VerilogFile(SourceFile):
def
_create_deps_requires
(
self
):
# self.dep_requires = self.__search_includes()
# self.dep_provides = self.name
if
global_mod
.
env
[
"iverilog_path"
]
:
if
global_mod
.
top_module
.
sim_tool
==
"iverilog"
:
deps
=
self
.
_get_iverilog_dependencies
()
self
.
dep_requires
=
deps
else
:
...
...
@@ -281,13 +285,20 @@ class VerilogFile(SourceFile):
command
+=
" "
+
vlog_opt
else
:
command
+=
" "
+
vlog_opt
+
" "
+
self
.
rel_path
()
logging
.
debug
(
"running
%
s"
%
command
)
retOsSystem
=
os
.
system
(
command
)
if
retOsSystem
and
retOsSystem
!=
256
:
logging
.
debug
(
"running
%
s"
%
command
)
retcode
=
os
.
system
(
command
)
# iverilog_cmd = Popen(command, shell=True, stdin=PIPE,
# stdout=PIPE, close_fds=True)
# iverilog_cmd.stdout.readlines()
# iverilog_cmd.wait()
# retcode = iverilog_cmd.returncode
print
(
"retcode"
,
retcode
)
if
retcode
and
retcode
!=
256
:
logging
.
error
(
"Dependencies not met for
%
s"
%
str
(
self
.
path
))
logging
.
debug
(
command
,
self
.
include_dirs
,
inc_dirs
,
global_mod
.
mod_pool
)
quit
()
elif
ret
OsSystem
==
256
:
elif
ret
code
==
256
:
#dependencies met
pass
depFile
=
open
(
depFileName
,
"r"
)
...
...
@@ -349,9 +360,11 @@ class DPFFile(File):
pass
class
NGCFile
(
SourceFile
):
def
__init__
(
self
,
path
):
SourceFile
.
__init__
(
self
,
path
)
# class NGCFile(SourceFile):
# def __init__(self, path, module):
# SourceFile.__init__(self, path=path, module=module)
class
NGCFile
(
File
):
pass
class
WBGenFile
(
File
):
...
...
@@ -405,7 +418,9 @@ class SourceFileSet(list):
class
SourceFileFactory
:
def
new
(
self
,
path
,
library
=
None
,
vcom_opt
=
None
,
vlog_opt
=
None
,
include_dirs
=
None
):
def
new
(
self
,
path
,
module
,
library
=
None
,
vcom_opt
=
None
,
vlog_opt
=
None
,
include_dirs
=
None
):
if
path
==
"/home/pawel/cern/wr-cores/testbench/top_level/gn4124_bfm.svh"
:
raise
Exception
()
if
path
is
None
or
path
==
""
:
raise
RuntimeError
(
"Expected a file path, got: "
+
str
(
path
))
if
not
os
.
path
.
isabs
(
path
):
...
...
@@ -416,29 +431,40 @@ class SourceFileFactory:
nf
=
None
if
extension
==
'vhd'
or
extension
==
'vhdl'
or
extension
==
'vho'
:
nf
=
VHDLFile
(
path
,
library
,
vcom_opt
)
nf
=
VHDLFile
(
path
=
path
,
module
=
module
,
library
=
library
,
vcom_opt
=
vcom_opt
)
elif
extension
==
'v'
or
extension
==
'vh'
or
extension
==
'vo'
or
extension
==
'vm'
:
nf
=
VerilogFile
(
path
,
library
,
vlog_opt
,
include_dirs
)
nf
=
VerilogFile
(
path
=
path
,
module
=
module
,
library
=
library
,
vlog_opt
=
vlog_opt
,
include_dirs
=
include_dirs
)
elif
extension
==
'sv'
or
extension
==
'svh'
:
nf
=
SVFile
(
path
,
library
,
vlog_opt
,
include_dirs
)
nf
=
SVFile
(
path
=
path
,
module
=
module
,
library
=
library
,
vlog_opt
=
vlog_opt
,
include_dirs
=
include_dirs
)
elif
extension
==
'ngc'
:
nf
=
NGCFile
(
path
)
nf
=
NGCFile
(
path
=
path
,
module
=
module
)
elif
extension
==
'ucf'
:
nf
=
UCFFile
(
path
)
nf
=
UCFFile
(
path
=
path
,
module
=
module
)
elif
extension
==
'cdc'
:
nf
=
CDCFile
(
path
)
nf
=
CDCFile
(
path
=
path
,
module
=
module
)
elif
extension
==
'wb'
:
nf
=
WBGenFile
(
path
)
nf
=
WBGenFile
(
path
=
path
,
module
=
module
)
elif
extension
==
'tcl'
:
nf
=
TCLFile
(
path
)
nf
=
TCLFile
(
path
=
path
,
module
=
module
)
elif
extension
==
'xise'
or
extension
==
'ise'
:
nf
=
XISEFile
(
path
)
nf
=
XISEFile
(
path
=
path
,
module
=
module
)
elif
extension
==
'stp'
:
nf
=
SignalTapFile
(
path
)
nf
=
SignalTapFile
(
path
=
path
,
module
=
module
)
elif
extension
==
'sdc'
:
nf
=
SDCFile
(
path
)
nf
=
SDCFile
(
path
=
path
,
module
=
module
)
elif
extension
==
'qip'
:
nf
=
QIPFile
(
path
)
nf
=
QIPFile
(
path
=
path
,
module
=
module
)
elif
extension
==
'dpf'
:
nf
=
DPFFile
(
path
)
nf
=
DPFFile
(
path
=
path
,
module
=
module
)
return
nf
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