Commit Graph

49 Commits

Author SHA1 Message Date
Cary R 8b8e181fe2 vlog95: Print structural string constants and a few other fixes
This patch adds the ability to print a constant string in a
structural context. It also fixes the argument order for
structural function calls and makes a few improvements in
nexus identification.
2011-04-20 17:50:41 -07:00
Cary R 12df29af55 Fix space issues.
Thsi patch removes space before end of line, etc.
2011-04-20 17:26:52 -07:00
Cary R 087f4794af vlog95: Print double values correctly and clean up string emitting.
This patch adds code to make sure a double (Verilog real) constant
is printed correctly. It also adds code to trim any leading escaped
NULLs from an expression string.
2011-03-23 11:56:45 -07:00
Cary R 48dc977630 vlog95: Add code to emit logicals that are the base of a CA as a CA.
This patch uses the new function (ivl_logic_is_cassign) to determine
if a logical was really the base of a continuous assignment. This
allows creating code that more closely matches the original.
2011-03-23 11:43:43 -07:00
Cary R ceaa79e95d vlog95: Add support for most unconnected ports and more signed support.
This patch adds support for correctly handling most unconnected ports.
Most important is top level ports that are the root of the conversion.

This patch also adds support for emitting more signed constructs when
they are requested. $signed() and $unsigned() are still not supported
or recognized as an error when not emitting signed constructs.
2011-03-23 11:38:05 -07:00
Cary R ab265c6373 Make the >>> error message depend on the allow signed flag.
The >>> operator is also part of the allow signed extensions.
2011-03-23 11:26:37 -07:00
Cary R a6267281d9 vlog95: Add a flag to allow signed.
This patch adds a flag -pallowsigned=1 to the vlog95 converter that
tells it to allow signed signals. There is currently no code to check
for and warn/emit the $signed() and $unsigned() system functions. I
need to determine if >>> emitting should also be controlled by the
allow signed flag.
2011-03-16 10:53:51 -07:00
Cary R e375b26f78 vlog95: Add support for escaped ids and most module ports
This patch adds support for emitting escaped identifiers and adds
code to correctly emit most module port expressions/definitions.
There are some minor code optimizations/cleanup included as well.
2011-03-14 16:53:59 -07:00
Cary R e80404a85f Fix 64 bit warning when using pointer as unsigned counter
The logic_lpm.c file uses the nexus private data pointer as an
unsigned counter. This patch makes the value unsigned long to
avoid a compilation warning on 64 bit systems.
2011-03-14 16:34:36 -07:00
Larry Doolittle e9fda22ad9 Spelling fixes
Mostly then/than confusion.  All comments or README files,
except for one user-visible change in a tgt-vlog95 error message.
2011-03-14 16:28:36 -07:00
Cary R f13fabab71 vlog95: Add partial support for CA selects, emit for loop and other fixes.
This patch adds support for emitting fixed CA selects (zero based
variable bit and array selects also work), emitting a for statement
as a single statement and fixes for numerous little bugs. It also
adds the start of emitting module port information.
2011-03-08 19:20:23 -08:00
Cary R b019c21f46 OpenSolaris portability/bug fixes.
A valarray of an enum does not initialize to 0 so explicitly specify the
value to fill the array with. This was causing the compiler to incorrectly
report that fixed width elements in a concatenation had no size.

The following was done to remove compiler warning when using the native
compiler on OpenSolaris.

Remove the anonymous unions in tgt-vlog95/stmt.c and tgt-vvp/vvp_process.c.

Use UINT_MAX for the maximum unsigned unsigned instead of -1 in
tgt-vvp/draw_net_input.c.

Even though lex defines yywrap() to have no arguments when %option
noyywrp is used it generates a define that takes an argument that is not
used. The compiler warned about this so remove the option and add a
dummy yywrap function.
2011-03-04 10:31:47 -08:00
Cary R d541ef4709 vlog95: Various bug fixes/improvements
This patch fixes a couple bugs and improves the checking for blocks
that really represent a single statement.
2011-03-01 18:56:04 -08:00
Cary R 2df6850824 vlog95: A parameter in 1364-1995 is always zero based.
The 1364-1995 version of Verilog does not support non zero based
parameters. This patch removes the comment requesting the parameter
MSB/LSB information to denormalize the expression and replaces it
with one stating that we need to keep the compiler normalization.
2011-02-28 19:35:01 -08:00
Cary R c90a896448 vlog95: Don't print a logic/UPD NULL name.
If the logic/UDP name is NULL then don't print anything.
2011-02-28 19:20:39 -08:00
Cary R b95e46e621 vlog95: Add more procedural variable indexed part select code
This patch adds the rest of the functionality needed to correctly
emit both L-value and R-value procedural variable indexed part
selects as a concatenation of variable bit selects.
2011-02-28 19:19:27 -08:00
Cary R 026fe92a46 vlog95: UDP definitions now use the original port names.
This patch modifies the UDP definition emitting code to use the original
port names instead of made up ones.
2011-02-28 19:12:11 -08:00
Cary R 757611b8e9 vlog95: Add partial support for procedural variable indexed part selects.
This patch adds partial support of procedural variable indexed part
selects (both R and L-value). The restriction is that this currently
only works on a zero based little endian vector. I need to know if
the select is an up or down select to correctly denormalize the base
expression for the general case.
2011-02-28 18:37:01 -08:00
Cary R 96a9cb8d54 vlog95: Add a copyright notice for the Icarus UDPs and print a note.
This patch adds copyright information for the Icarus generated UDPs
(lesser GPL version 2.1). It also prints a note to let the user know
that this copyrighted code is being included in the output file. They
can then remove the primitives if needed. These are likely only
needed when the output is from synthesis. At the moment we only have
a positive edge D-FF. In the future a negative edge FF and D latches
will also be needed.
2011-02-28 18:34:51 -08:00
Cary R 7544575040 vlog95: Add preliminary logic gate name/range and assert logic pins in CA.
Add a preliminary gate name and range (zero based) for logic primitives.
Also assert that a logic gate in a continuous assignment has the correct
number of inputs/outputs.
2011-02-28 18:33:39 -08:00
Cary R e503c97cee vlog95: Add support for emitting variable real procedural delays.
This patch adds code to emit variable real procedural delays by
removing the scaling that is added by the compiler. It also
recognizes that all variable continuous assignment delays are
scaled at run time.
2011-02-28 18:32:10 -08:00
Cary R df85a33583 vlog95: Rework some of the delay emitting code and enclose unary in ()
This patch reworks the delay emitting code to handle delay expressions
better. It also encloses the emitted unary operators in parenthesis to
make sequenced unary operators work properly.
2011-02-28 18:31:03 -08:00
Cary R 28c10311f6 vlog95: Rework delayx to handle a CA vs using emit_expr_signal().
It was incorrect to extend emit_expr_signal() to handle a local signal
(a continuous assignment). The only way this should ever happen is
when evaluating a variable delay expression. It is better to do this
checking in the delayx evaluation where we know if we are processing
a delay for a statement or a continuous assignment. This keeps the
emit_expr_signal() routine cleaner and we only allow a CA delay for
a continuous assignment.
2011-02-28 18:29:38 -08:00
Cary R 88cec4d6f6 vlog95: Fix pull gate bug, emit local expr sigs as CA, etc.
This patch fixes the following bugs in the vlog95 converter:

When emitting a signal as an expression, if the signal is local then
emit the expression that is driving the local signal.

The casts need to emit the expression.

When emitting pull devices they have different default strength rules
(pull is the default).

For compatibility pull devices should only have a single output net.

Extend the code that searches for the <var> = <delay> <value> pattern
to also check for an <event>. The previous event code only looks for
the repeat event pattern.
2011-02-28 18:28:21 -08:00
Cary R 4679aadbd5 vlog95: Add support for printing file/line information for most line.
This patch adds a flag that emits file and line information for
most lines. This can help the user understand where the various
lines came from in the original code. They are printed as
comments so the generated code still runs correctly.
2011-02-10 19:13:12 -08:00
Cary R 2a9e15e8d8 vlog95: Fix some bugs when emitting a logical device as a CA, etc.
When emitting a logical device as part of a continuous assignment
we need to use the actual inputs (not the output). We also do not
need to emit anything if the nexus is NULL. Also skip logical gates
that have a local output since they are part of a continuous
assignment and the inputs to a logical gate can be an expression
so emit them as a continuous assignment.
2011-02-10 19:09:01 -08:00
Cary R bfb04998c5 vlog95: Add support for UDPs, DFFs, constant nets and bug fixes.
This patch adds the following to the vlog95 converter.

  Add support for emitting  and calling UDPs.

  Generate a UDP for a synthesized DFF.

  Add the ability do emit a constant assigned to a net.
2011-02-10 19:07:51 -08:00
Cary R 131a3d81d8 vlog95: Add the ability to recreate most variable parameter selects
This patch adds code that when it find a select of a constant it looks
for a parameter in the enclosing scope and the module scope that has
the same line, file and value information. If it find one that is
used to rebuild the expression. A more exhaustive search is need to
make this 100% clean.

It also uses the named scope when emitting statement inside a named
begin or fork instead of the enclosing scope.
2011-02-10 19:02:38 -08:00
Cary R a2531c5015 Add support for most tran gates and rework/split out logic/lpm code.
This patch moves the logic and lpm code to a new file. It refactors
the strength emitting routine and adds support for emitting the
standard tran style of gates.
2011-02-10 19:00:28 -08:00
Cary R 05a00ff631 vlog95: Convert compiler translation back to wait and strength fixes.
This patch adds the ability to translate the code produced by the
compiler for a wait statement back into a wait statement. It also
reworks the strength emitting code to only emit a single strength
for the pull gates and fixes a bug in the strength emitting code.
2011-02-10 18:53:46 -08:00
Cary R 1908f28d5b vlog95: Better handling of NOOP statements.
A NOOP at the end of an existing statement can be represented as ";\n"
(a simple line termination).  In general a NOOP represents an empty
begin/end pair.
2011-01-31 14:42:06 -08:00
Cary R 8744c4279d vlog95: Add CA support, other enhancements, refactoring and bug fixes.
This patch add the following functionality to the vlog95 generator.

  Add support for most CAs. Selects still don't work correctly.
  Emitting a named event as an expression.
  Enhance the ability to find a signal in a nexus.
  Add code to emit a nexus driven by a constant.
  Rework the delay/strength code for logic gates/CAs
  Refactor some of the number code.
  Refactor the variable emitting code to support named blocks.
  Translate the compiler code back to <var> = <event> <value>
2011-01-31 14:41:58 -08:00
Cary R 424fba819e vlog95: more functionality and some bug fixes.
This patch adds support for emitting an array as an expression. This is
used as a system task/function argument.

It partially reworks the real display code to print an appropriate
expression for NaN, inf and -inf. To get other real numbers to always
display correctly we need to build a custom printing routine that adjusts
what is displayed based on the actual bits in the double.

Add the ability to print a real variable delay. They are not scaled by
the compiler.

Since a delayx delay may be variable we must always enclose this type of
delay with parenthesis.

Fix the L-value concatenation to be in the correct order.

Handle the special case that an if with a single if as the true statement
does not loose any associated else clause to the enclosed if. Basically
add a begin/end pair as needed to make things work out correctly.
2011-01-31 12:01:03 -08:00
Cary R 72ede358ad vlog95: add support for calling a task with arguments
This patch adds code to decode a begin block that the compiler uses to
represent calling a task with arguments.
2011-01-31 11:59:32 -08:00
Cary R e3324dd2ae vlog95: Don't hide exp function with variable.
This patch renames the exp variable to be exponent since exp is a math
function.
2011-01-26 18:06:00 -08:00
Cary R 60d08d5f02 vlog95: add ability for user to change space increment.
This patch adds the ability for the user to change the spacing increment
from the command line using the -pspacing=<num> flag. The is restricted to
be a value between and including 1 and 16.
2011-01-26 18:02:51 -08:00
Cary R dd0ea9db40 vlog95: Add partial support for getting a nexus name, etc.
This patch adds preliminary support for finding the correct name for
a nexus at a given scope level. It also does the following.

Report that real modulus is not supported.
Fix a bug in the generation of concat expressions.
Add missing generation of unary ! operator.
Add ability to generate > integer delays.
Refactor some of the support code.
Make some of the error messages more descriptive.
Ignore the ALLOC and FREE statements (only used with automatic tasks).
2011-01-24 13:31:10 -08:00
Cary R 755d0b59d6 vlog95: Add support for translating some power expressions as a left shift.
If the left power operator expression is a numeric constant that has a
value 2^n n>0 then we can use a left shift to calculate the result. This
patch adds code to do this. All other power expressions are flagged as a
compilation error.
2011-01-18 17:23:46 -08:00
Cary R 5cec7e3870 Remove some cppcheck warnings about variable scope.
There were a couple variable that could have reduced scope.
2011-01-18 17:22:11 -08:00
Cary R 203a8cc997 Add more functionality to the vlog95 back end.
This patch adds significantly more functionality to the vlog95 back end.
The following are the major additions:

Display unsigned numbers without undefined bits in hex.
Add support for both L-Value and R-value bit and part selects.
Added support for out of scope references.
Added support for emitting logic gates (range not finished, name is invalid).
Added support for emitting initial/always blocks.
Add support for event inter statement delays.
Convert a blocking inter statement delay assign back to the original form.
Added support for rescaling variable delays.
Added support for the disable statement.
Added support for an event trigger statement (event name is missing).
Added support for calling a user task (calling arguments are missing).
Added support for an event based delay statement (@) (event name is missing)

Not all of these are working as expected since there is not currently a
routine to find a nexus name as a function of scope (needed for event names,
logic gate ports, etc.). Since the Icarus compiler generates structural code
the arguments to modules, module instantiations and calling user tasks are
also still missing.
2011-01-18 17:22:02 -08:00
Cary R 6581b13005 vlog95: add support for a scope and user function call expression.
This patch adds support for using a scope in an expression and calling
a user function. It also fixes an issue in the module name mangling
and calling a system task/function with multiple arguments.
2011-01-15 15:59:50 -08:00
Cary R 3c10eb2956 vlog95: add support for case statements and initial module instantiation.
This patch adds support for the various case statements and adds
preliminary support for instantiating modules. The module instantiation,
just like the module definition, is still missing ports. Adding this
will require modification to the compiler to get the port order correct.
Because of defparams and passed parameters any module that has a
parameter must be generated uniquely for each instance since they may not
all be the same. Modules without parameters are only generated once.
2011-01-15 15:58:43 -08:00
Cary R dc7bb9149e vlog95: Add support for more statements and a delay expression
This patch adds the ability to print a delay expression (it is rescaled
to the module timescale) and adds support the following statement types:

  nonblocking assignment with a delay (event control is still missing)
  condition (if/else)
  forever
  repeat
  while (Icarus translated for loops to while loops)
  fork
  procedural continuous assign
  deassign
  force
  release
2011-01-15 15:45:08 -08:00
Cary R 428c1f3222 vlog95: add expression support for ternary, concat and system functions.
This patch adds support to the vlog95 convert for the ternary operator,
the concat/repeat operator and calling a system function. It also adds
the `celldefine information when appropriate.
2011-01-12 16:43:59 -08:00
Cary R 50106547e3 Extend the vlog95 converter
This patch adds more support to the Verilog 1995 converter. There is
still a lot that is missing and there is still some implemented
functionality that is not 100%.
2011-01-12 16:43:50 -08:00
Cary R be44214598 Add cppcheck target to the Makefile
This patch adds support for running cppcheck from the Makefile. It also
standardizes the order of some of the targets. It renames vpip_format.c
to vpip_format.cc and fixes the size of the array tables to make room
for the trailing NULL. Found when using a C++ compiler.
2010-10-14 19:11:32 -07:00
Cary R 2aa627d89f Update all Makefile.in files to support OpenSolaris
This patch updates all the Makefile.in files and configure.in
as follows:

Do not use the -Wall warning flag when using the SunPro compiler.

The SunPro compiler uses -xMD instead of -MD.

There are still more fixes needed before Icarus will compile
on OpenSolaris.
2010-05-13 18:54:09 -07:00
Cary R c7e6de6fa4 vlog95 - Add output file code and basic header. 2010-03-25 12:32:02 -07:00
Cary R 96dab230f6 Start adding vlog95 (1364-1995) back end.
This is the initial commit in an effort to build a 1364-1995
back end for Icarus Verilog. It is expected that this back end
will allow the user to write 1364-2005 RTL and then using this
back end (converter) generate functionally equivalent 1364-1995
compatible code. This can be used to support older tools in a
work flow. The primary focus will be simulation equivalence,
though I expect to verify logical equivalence as well.
2010-03-25 12:31:51 -07:00