Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
sv2v
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
sv2v
Commits
404385b0
Commit
404385b0
authored
Jun 16, 2021
by
Zachary Snow
Committed by
Zachary Snow
Jun 16, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
allow arbitrary .v output file using -w/--write
parent
5eef44c8
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
61 additions
and
16 deletions
+61
-16
README.md
+5
-3
src/Job.hs
+31
-11
src/sv2v.hs
+1
-2
test/write/run.sh
+24
-0
No files found.
README.md
View file @
404385b0
...
...
@@ -74,7 +74,8 @@ running `stack install`, or copy over the executable manually.
sv2v takes in a list of files and prints the converted Verilog to
`stdout`
.
Using
`--write=adjacent`
will create a converted
`.v`
for every
`.sv`
input file
rather than printing to
`stdout`
.
rather than printing to
`stdout`
.
`--write`
/
`-w`
can also be used to specify a
path to a
`.v`
output file.
Users may specify
`include`
search paths, define macros during preprocessing,
and exclude some of the conversions. Specifying
`-`
as an input file will read
...
...
@@ -95,8 +96,9 @@ Conversion:
-E --exclude=CONV Exclude a particular conversion (always, assert,
interface, or logic)
-v --verbose Retain certain conversion artifacts
-w --write=MODE How to write output; default is 'stdout'; use
'adjacent' to create a .v file next to each input
-w --write=MODE/FILE How to write output; default is 'stdout'; use
'adjacent' to create a .v file next to each input;
use a path ending in .v to write to a file
Other:
--help Display help message
--version Print version information
...
...
src/Job.hs
View file @
404385b0
...
...
@@ -8,12 +8,15 @@
module
Job
where
import
Data.Char
(
toLower
)
import
Data.List
(
isPrefixOf
,
isSuffixOf
)
import
Data.Version
(
showVersion
)
import
GitHash
(
giDescribe
,
tGitInfoCwdTry
)
import
qualified
Paths_sv2v
(
version
)
import
System.IO
(
stderr
,
hPutStr
)
import
System.Console.CmdArgs
import
System.Environment
(
getArgs
,
withArgs
)
import
System.Exit
(
exitFailure
)
data
Exclude
=
Always
...
...
@@ -26,12 +29,9 @@ data Exclude
data
Write
=
Stdout
|
Adjacent
|
File
|
File
FilePath
deriving
(
Show
,
Typeable
,
Data
,
Eq
)
instance
Default
Write
where
def
=
Stdout
data
Job
=
Job
{
files
::
[
FilePath
]
,
incdir
::
[
FilePath
]
...
...
@@ -41,6 +41,7 @@ data Job = Job
,
exclude
::
[
Exclude
]
,
verbose
::
Bool
,
write
::
Write
,
writeRaw
::
String
}
deriving
(
Show
,
Typeable
,
Data
)
version
::
String
...
...
@@ -65,10 +66,11 @@ defaultJob = Job
++
" or logic)"
)
&=
groupname
"Conversion"
,
verbose
=
nam
"verbose"
&=
help
"Retain certain conversion artifacts"
,
write
=
nam_
"write"
&=
name
"w"
&=
typ
"MODE"
,
write
=
Stdout
&=
ignore
-- parsed from the flexible flag below
,
writeRaw
=
"s"
&=
name
"write"
&=
name
"w"
&=
explicit
&=
typ
"MODE/FILE"
&=
help
(
"How to write output; default is 'stdout'; use 'adjacent' to"
++
" create a .v file next to each input; use
'file' to create a
"
++
"
sv2v_output.v
file"
)
++
" create a .v file next to each input; use
a path ending in .v
"
++
"
to write to a
file"
)
}
&=
program
"sv2v"
&=
summary
(
"sv2v "
++
version
)
...
...
@@ -83,6 +85,18 @@ defaultJob = Job
nam
xs
=
nam_
xs
&=
name
[
head
xs
]
nam_
xs
=
def
&=
name
xs
&=
explicit
parseWrite
::
String
->
IO
Write
parseWrite
w
|
w
`
matches
`
"stdout"
=
return
Stdout
parseWrite
w
|
w
`
matches
`
"adjacent"
=
return
Adjacent
parseWrite
w
|
".v"
`
isSuffixOf
`
w
=
return
$
File
w
parseWrite
w
|
otherwise
=
do
hPutStr
stderr
$
"invalid --write "
++
show
w
++
", expected stdout, adjacent, or a path ending in .v"
exitFailure
matches
::
String
->
String
->
Bool
matches
=
isPrefixOf
.
map
toLower
type
DeprecationPhase
=
[
String
]
->
IO
[
String
]
flagRename
::
String
->
String
->
DeprecationPhase
...
...
@@ -108,7 +122,13 @@ readJob = do
>>=
flagRename
"-i"
"-I"
>>=
flagRename
"-d"
"-D"
>>=
flagRename
"-e"
"-E"
job
<-
withArgs
(
strs'
)
$
cmdArgs
defaultJob
return
$
if
verbose
job
then
job
{
exclude
=
Succinct
:
exclude
job
}
else
job
withArgs
strs'
$
cmdArgs
defaultJob
>>=
setWrite
.
setSuccinct
where
setWrite
::
Job
->
IO
Job
setWrite
job
=
do
w
<-
parseWrite
$
writeRaw
job
return
$
job
{
write
=
w
}
setSuccinct
::
Job
->
Job
setSuccinct
job
|
verbose
job
=
job
{
exclude
=
Succinct
:
exclude
job
}
setSuccinct
job
|
otherwise
=
job
src/sv2v.hs
View file @
404385b0
...
...
@@ -64,9 +64,8 @@ writeOutput _ [] [] =
hPutStrLn
stderr
"Warning: No input files specified (try `sv2v --help`)"
writeOutput
Stdout
_
asts
=
hPrint
stdout
$
concat
asts
writeOutput
File
_
asts
=
writeOutput
(
File
f
)
_
asts
=
writeFile
f
$
show
$
concat
asts
where
f
=
"sv2v_output.v"
writeOutput
Adjacent
inPaths
asts
=
do
outPaths
<-
mapM
rewritePath
inPaths
badPaths
<-
filterM
doesFileExist
outPaths
...
...
test/write/run.sh
View file @
404385b0
...
...
@@ -66,6 +66,30 @@ test_adjacent_extension() {
"
$stderr
"
}
test_file
()
{
runAndCapture
--write
=
stdout
*
.sv
expected
=
"
$stdout
"
rm
-f
out.v
runAndCapture
--write
=
out.v
*
.sv
assertTrue
"file conversion should succeed"
$result
assertNull
"stdout should be empty"
"
$stdout
"
assertNull
"stderr should be empty"
"
$stderr
"
actual
=
`
cat
out.v
`
assertEquals
"file output should match combined"
"
$expected
"
"
$actual
"
clearArtifacts
}
test_unknown
()
{
runAndCapture
--write
=
unknown
*
.sv
assertFalse
"unknown write mode should fail"
$result
assertNull
"stdout should be empty"
"
$stdout
"
assertEquals
"stderr should list valid write modes"
\
"invalid --write
\"
unknown
\"
, expected stdout, adjacent, or a path ending in .v"
\
"
$stderr
"
}
source
../lib/functions.sh
.
shunit2
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