Commit Graph

1469 Commits

Author SHA1 Message Date
Cary R 5d150c3151 Update and localize HOST compile information. 2011-12-16 09:15:01 -08:00
Cary R 0dc9ed2b5d Remove one MinGW compile warning. 2011-12-15 19:03:55 -08:00
Cary R 76c835a00e Update configure and Makefiles for cross compiling.
There are still a couple issues with cross compiling, but this patch
addresses most of the issues.
2011-12-15 19:03:48 -08:00
Cary R d198a57d99 The _vpiNexusId property must return zero when undefined
This was created by a user contributed patch. It resulted in all objects
that cannot have aliases being aliased.
2011-12-14 18:39:16 -08:00
Cary R 670efb38d9 Document that vpiFullName is supported in the generic routine. 2011-12-06 11:35:37 -08:00
Cary R 15a3f8ef2a For now treat vpiFullName the same as vpiName for a signal.
This needs to be fixed, but for now this prevents a seg. fault in
the VCD dumpers, etc.
2011-12-06 10:17:41 -08:00
Cary R 95e25ad40f Apply a slightly modified user patch. 2011-12-05 19:54:50 -08:00
Stephen Williams 7a812fbe39 Rework vvp code generator for compressed assignments
Now we have a code generator that can handle compressed assignments
as they have been re-imagined in elaboration. There are some cases
that are not yet supported, we'll patch them up in due course.
2011-11-28 15:29:53 -08:00
Cary R 5b1e2c8c6c Update the cppcheck suppression file in the vpp directory.
Recent code changes moved the line that was being suppressed to a
different line. This patch updates the suppression file to match the
current code.
2011-11-22 19:30:53 -08:00
Cary R 24b6264318 Remove wide input valgrind warnings.
Both UDPs and system functions use the wide input functor. This patch
modified the code generator to create a local net declaration for the
output net if we have either a delay or modpath connecting the output
to the true output. This is needed so that the wide input can be
cleaned up correctly.

Local real nets were also added to the local net pool when testing with
valgrind. This allows them to be cleaned up at the end.
2011-11-10 17:53:08 -08:00
Cary R f415c744ad Cleanup unneeded vectors in a delay after initialization.
For a delay we do not know exactly what type we will be propagating
until the initialization event has happened. Because of this we
allocate both a vec4 and a vec8 value. Once the initialization event
has happened we can free the unneeded element(s).
2011-11-10 17:49:51 -08:00
Cary R 27cb140cb4 Fix space issues.
This patch removes space before EOL, etc.
2011-11-03 19:18:30 -07:00
Cary R ff309fb04f Reduce the error when scaling a real time value.
When scaling a time value we would often use the power operator to
create constants 10**-N that were then multiplied with the original
value. The problem with this is that there is some errors in the
representation of the fractional number. It is better to create a
integer value 10**N and then divide the original value by this
exact constant. You still have the calculation error, but the scale
value is now an exactly real value.
2011-10-31 10:44:00 -07:00
Cary R 7a8ac008bb Remove some gcc/g++ (4.6.1) warnings.
This patch remove some unused variable warnings found with gcc/g++ 4.6.1
on Ubuntu 11.10.
2011-10-19 15:01:24 -07:00
Cary R 8f6062799e If there are no opcodes then just delete the code space.
If there are no opcodes then the various checks access an undefined
opcode, so just delete the code space for this case.
2011-10-19 14:59:59 -07:00
Cary R 8977248ee2 For valgrind testing remove the UDP functionality object.
When checking with valgrind we need to remove the UDP functionality
object to avoid a reported memory issue.
2011-10-19 14:56:30 -07:00
Cary R 7a75f94eda Move UDP name to the UDP base class.
The name is not currently used, but when it is it makes sense for it to
be in the base class. Also the name cannot be deleted after compiling
since it may be used later.
2011-10-19 14:46:15 -07:00
Martin Whitaker 1e814cfc1e Fix for pr3420994.
The VPI object data model diagrams show a one to many relationship
between the "mod path" and "path term" objects. This means that the
correct way to obtain handles to "path term" objects is to use the
vpi_iterate and vpi_scan functions.

Support for the old method of obtaining handles to "path term" objects
using the vpi_handle function is retained for backwards compatibility.
2011-10-19 14:37:20 -07:00
Cary R 52d05c0215 Use correct name to iterate on enumeration constants.
The standard defines how to calculate the name for an access function
or iterator if one is not given. It is supposed to be vpi followed by
the words in the name with each word capitalized. For the one to many
(iterator) interface from the enumeration typespec to the individual
constants this is vpiEnumConst not vpiMember.
2011-10-14 18:35:39 -07:00
Cary R 4692756eb9 Add primitive vpiBaseTypespec support for enumerations.
We don't currently have the information needed to correctly provide the
base typespec, but in the next() and prev() methods I need to know if
the enumeration is two or four state. This patch sets the base typespec
for four state enumerations to vpiReg and to vpiBitVar for two state
enumerations. This provide enough information to get next() and prev()
working correctly.
2011-10-14 18:22:23 -07:00
Cary R 6a99520fa6 Add string display for vpiEnumTypespec and create hook for UdpDefn iteration.
This patch adds vpiEnumTypespec to the list so that vpi_get_str(vpiType, ...)
returns an appropriate string when an enum type is passed.

It also adds the initial hook to allow iteration (global) over the UDP
definitions. This along with table traversal will be needed to free the
memory allocated when the UDP definition is created. Ultimately this
will all the UDP test to be valgrind clean.
2011-10-14 18:20:23 -07:00
Cary R 19307ba9dc Add an enum type to the appropriate scope and add valgrind cleanup code.
Add the enum type to the scope when it is created. Also delete the type
when checking with valgrind.
2011-10-14 18:09:36 -07:00
Cary R be1be31deb Update some cppcheck suppressions and fix one problem in the code.
Update the line number for a couple cppcheck suppressions and add one for
the pool variable in the vvp directory.

Also move a check for null to the correct place.
2011-09-29 09:40:40 -07:00
Martin Whitaker c59d27e19f Remove more clang warnings.
clang warns that the yyinput function generated by flex is never used.
2011-09-25 10:14:16 -07:00
Cary R eab5bacf9f Remove clang/clang++ warnings.
This patch makes the code consistently use struct/class in the C++ files,
it removes a couple shadow warnings and where a class pointer is passed to
the C routines, it defines the pointer as a class for C++ and as struct for
C and it removes a namespace std duplication.
2011-09-25 10:14:04 -07:00
Cary R 609c038484 Add more support for signed enumerations in SV.
This patch add support for passing if the enumeration is signed or not
to the run time. This is really only needed for debug and VPI access.
2011-09-25 09:56:02 -07:00
Alexander Klimov 766bf45dcf Fix long division.
On a 64-bit machine the following module shows incorrect division
results:

`define X {4'b 1000, `N'b 0}
`define Y {1'b  1, `N'b 0}
module b;
   reg [`N:0] y = `Y;
   reg [3:0] z1, z2;
   initial begin
      z1 = `X / `Y;
      z2 = `X /  y;
      $display("%3d %b %b", `N, z1, z2);
   end
endmodule // b

$ for N in {60..65}; do /usr/bin/iverilog -DN=$N -oa b.v && /usr/bin/vvp a; done
 60 1000 1000
 61 1000 1000
 62 1000 0111
 63 1000 0101
 64 1000 1000
 65 1000 1000

The first chunk of the patch (result -> tmp_result) fixes this:

$ for N in {60..65}; do iverilog -DN=$N -oa b.v && vvp a; done
 60 1000 1000
 61 1000 1000
 62 1000 1000
 63 1000 1000
 64 1000 1000
 65 1000 1000

The second chunk fixes

`define X 264'h 800000000000000000000000000000000000000000000000000000000000000000
`define Y 192'h c6df998d06b97b0db1f056638484d609c0895e8112153524
module c;
   reg [191:0] y = `Y;
   reg [72:0] z1, z2;
   initial begin
      z1 = `X / `Y;
      z2 = `X /  y;
      $display("%x %x %b", z1, z2, z1 == z2);
   end
endmodule // c

$ /usr/bin/iverilog -oa c.v && /usr/bin/vvp a
0a4c4a2c1dacd76220c 0809033397ca3427927 0

$ iverilog -oa c.v && vvp a
0a4c4a2c1dacd76220c 0a4c4a2c1dacd76220c 1
2011-09-17 18:35:25 -07:00
Cary R dd9962c221 The two-state variables are in the vpiVariable category.
Add all the two-state variables (bit, byte, short, int and long) to
the vpiVariable category.
2011-09-11 12:04:03 -07:00
Cary R 9fb317a4e1 A vpiBitVar can have a non-zero LSB and can be unsigned.
The general bit variable can be either signed or unsigned and can
have a non-zero LSB.
2011-09-11 11:47:39 -07:00
Cary R 4f8cace5a9 Add the ability to place callbacks on bit, byte, short, int and long variables.
You can place a callback on the new SystemVerilog 2-state variables.
2011-09-11 11:46:25 -07:00
Cary R 40c37be307 Display the type name for bit variable (vpiBitVar).
Display vpiBitVar instead of 620 when asking for the type name of a
bit variable.
2011-09-11 11:42:46 -07:00
Cary R b16401301e For MinGW report an error of the two \\ are not found in the exe path
We need to print a message and fail if the two \\ characters are not found
in the executable path.
2011-08-27 10:04:33 -07:00
Jared Casper 9b785031f5 Implement SystemVerilog final statements.
Add a new IVL_PR_FINAL process type.

Add a flag to NetScope in_final_ which is set when elaborating the
statement of a final procedure.

Add checks during statement elaboration for invalid statements in a
final procedure, similar to checks for statements in functions.

Do a final check to make sure no final blocks have delays.

In the vvp runtime, use "$final" as the flag for the thread created by
the final procedure.  During compilation, instead of adding such a
thread to the sched_list, add it to a new schedule_final_list that
mirrors the schedule_init_list, but is run at the end of simulation.
2011-08-11 14:31:38 -07:00
Prasad Joshi 045a1b9808 Add support for variable of primitive data type 'logic'
Verilog allows user to define variables of primitive types. The patch
adds support for defining variables of type 'logic'. The data type
'logic' is the only primitive data type which supports defining ranges.

Signed-off-by: Prasad Joshi <prasadjoshi124@gmail.com>
2011-07-04 10:25:50 -07:00
Prasad Joshi f25b957006 Add support for variable of primitive data type 'bit'
Verilog allows user to define variables of primitive types. The patch
adds support for defining variables of type 'bit'. The data type 'bit'
is the only primitive data type which supports defining ranges.

Signed-off-by: Prasad Joshi <prasadjoshi124@gmail.com>
2011-07-04 10:21:20 -07:00
Cary R ad13fa89dc Remove space issues.
This patch just removes a few spacing issues.
2011-06-26 11:17:31 -07:00
Martin Whitaker 6ffd19cd7e vvp fix for pr3296466.
This patch reworks the tran island code to allow it to handle cases where
tran primitives cross-connect different bits of the same vector.
2011-06-12 17:36:07 -07:00
Cary R c69f4ef7e0 Fix spelling problem reported in pr3301924 2011-05-29 08:48:19 -07:00
Martin Whitaker 767bb87ee2 Fix for pr3301924.
If a relative path name is passed to the Windows LoadModule function,
it is applied in turn to each path in the DLL search path. For the
ivl_dlopen function, we actually want to mimic the Unix behaviour,
where a relative path is relative to the current working directory.
On systems where the KB2264107 security fix has been applied, the
CWD is excluded from the DLL search path, so we no longer get the
required behaviour. This patch reworks the ivl_dlopen function to
give the correct behaviour under Windows.

This patch also adds a flush of the stderr stream after reporting
VPI call errors. This fixes a race between the stdout and stderr
streams when running the regression tests in a MinGW shell.
2011-05-29 08:47:47 -07:00
Cary R c2225f679b Remove some cppcheck warnings.
This patch removes some cppcheck warnings.
2011-05-07 11:40:16 -07:00
Greg Steuck f186c81403 Moved lex prefixes from Makefile.in into the corresponding .lex files.
Added an explicit option prefix="yy" to files that were generated
without an explicit -P.

This makes the lex-generated symbol names self contained without any
help from from build system.
2011-05-07 11:38:32 -07:00
Cary R 2158ebdf0b Fix a few minor cppcheck warnings.
This patch fixes a minor memory leak and slight inefficiency
reported by cppcheck. It also updates the expected warning for
vpi/fstapi.c.
2011-04-20 17:48:09 -07:00
Cary R 2517ba9041 Fix a few problems with the power operator.
The power operator defines 2**-1 and -2**-1 to be zero. This patch fixes
both the procedural and continuous assignments to work correctly. It also
fixes a problem in the compiler power code so that the one constant value
always has at least two bits.
2011-04-13 18:52:27 -07:00
Cary R c5b83bf2ee Add vpiBitVar to the memory cleanup code.
Support for vpiBitVar also needed to be added to the memory (valgrind)
cleanup code.
2011-04-06 19:11:02 -07:00
Stephen Williams 298495be97 Add vpiBitVar support is $display and other vpi functions. 2011-04-03 17:44:23 -07:00
Stephen Williams 7d53ac342f Fix handling of bool(bit) vectors with odd widths. 2011-04-02 15:58:51 -07:00
Larry Doolittle 8a568055f6 Spelling fixes
All are in comments and .txt files except for one in the Architecture::Statement dump message.
2011-03-29 08:56:10 -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 1e3af45335 Pass some module port information and fix a few bugs.
This patch adds some preliminary module port information to the ivl
interface. This may change as I investigate exactly what is needed.
It also fixes a few minor bugs (a missed local variable and spacing)
2011-03-08 19:15:28 -08:00
Cary R 78f985af0e Add trace command to interactive prompt to control statement tracing.
This patch adds a trace command to the interactive prompt that can be
used to control statement tracing when the code is instrumented (has
%file_line opcodes).
2011-03-04 10:36:26 -08:00