What's New in CADSTAR 11 FPGA 8.2 (for Active-HDL 8.2)
The following is a brief overview of new features and changes introduced
to Active-HDL 8.2 (BUILD 1986, 07/24/2009)
Licensing
Compiler and Simulator
NOTE:
Due to internal changes in the compiler and simulator as well as updates
in third-party tool libraries, all user-defined libraries should be re-compiled
after the installation of Active-HDL 8.2. The installation program of
version 8.2 delivers and installs only the updated system and vendor-specific
libraries that do not require re-compilation after Active-HDL is installed.
All existing designs will not have any problems associated with re-compiling
the libraries. If you update Active-HDL to version 8.2 and do not re-compile
your design libraries, the following error message will be displayed in
the Console window:
# ELBREAD: Warning: Files created by the old version of the compiler found.
# ELBREAD: Error: Library '<library_name>' has incompatible format.
Recompile all library units.
General
The approach to controlling read and write access
to design objects during simulation has changed. In the previous version
of Active-HDL, the compiler running in the -O3
mode could block access to signals that did not affect simulation results
(i.e. to signals that neither drove other signals nor were recorded to
a file). This was indicated by a message printed in the Console
window:
Warning: DAGGEN_0525:
Read access to some signals in unit <unit_name> was blocked. Signals
marked as unreadable cannot be accessed with macro commands, graphical
tools, or VHPI applications. Compile with -O2, -O1, or -O0 to disable
this optimization.
Starting from version 8.2, the compiler no
longer blocks read access to any signal in any mode (-O3,
-O2, -O1, -O0). Instead, access can be controlled at the simulation
initialization stage with the +access +r, +access +w, and +access +r+w
options of the asim command. The asim
command (contrary to the compiler) has access to the complete design so
it can perform more design optimizations. Except for shorter simulation
runtimes, this may also imply generating warnings similar to the warning
shown below, e.g. when adding signals to the Waveform Viewer or the simulation
database:
Warning: "XYZ"
does not have read access. Use switch +access +r for this region.
To enable access, pass the +access
+r argument to the asim command or specify
access settings in the Simulation | Access
to Design Objects category in the Design
Settings dialog box. Note that in many scenarios, access to a complete
design is not required. Therefore, +access +r,
+access +w options can be followed by either
a hierarchical path specification (+p+<path>+...)
or a unit specification (+m+<unitname>+...)
identifying design regions and/or design units where read or write access
is required. The simulator may disable access in all other locations thus
improving simulation performance.
The new solution is consistent with Verilog where read and write access
is also specified at the simulation initialization stage using the same
command line options. It is also more flexible (changing access requirements
does not require recompilation of source files). Note, however, that in
some cases the compiler running in the -O3
mode may disable read access to selected signals due to other optimizations.
The new Performance
Optimization category has been added to the Preferences
dialog box. This category provides options that allow optimizing design
performance at the cost of debugging capabilities and visibility of design
objects during simulation. The settings specified in this category are
inherited while creating a new design and they determine selected compilation
and simulation options available in the Compilation
and Simulation categories of the
Design Settings dialog box.
The Post Simulation Debug Mode can be turned on
when the Accelerated Waveform is selected as the default waveform viewer.
In order to run simulation in this mode, you need to initialize it with
the Initialize Post Simulation Debug
command of the Simulation main
menu and choose a *.vcd file or a simulation database (*.asdb) with a
history of traced objects saved in the previous simulation session. The
*.psd files are still supported but initializing the debugging session
in the off-line mode requires the use of the Standard Waveform Viewer.
VHDL Compilation and Simulation
Compilation of VHDL files containing many library
units has been accelerated. Selected vendor libraries, e.g. the unisim library from Xilinx compile up to two times
faster.
VHDL simulations run 5% faster on the average
with selected designs running up to 60% faster.
The simulator can now accelerate VHDL models at
the simulation initialization stage by blocking read and/or write access
to selected signals. For selected designs this can reduce simulation runtimes
by 50%.
Significant improvements can be observed in designs
that make an extensive use of the case statement.
Selected designs can simulate twice as fast.
Processes sensitive to a clock signal that change
the driven signal (or signals) in each clock cycle simulate faster. The
examples are processes modeling registers or counters.
Memory allocation has been reduced by 5 to 10
percent.
Active-HDL 8.2 provides support for the most recent
version of the VHDL standard - IEEE Std 1076™-2008.
The -2006 compiler option was replaced with
the new -2008 argument. The GUI settings in
the Preferences, Design
Settings, and File Properties
dialog boxes have also been updated accordingly.
The following new language features are supported
in this version of Active-HDL:
|
context tb_env is
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_textio.all;
end context;
A context clause may then be used in front
of the design unit declaration to define the context in which the unit
is compiled, for example:
context work.tb_env;
entity tb1 is begin
end entity tb1;
Context declaration are visible in libraries,
i.e. they are printed by the adir command and
displayed in the Library Manager.
with sel select? dout <=
a when "1--",
b when "01-",
c when "001",
d when others;
If the question mark modifier is used, the
expression value is compared to the choice using the matching equality
operator (?=). Additionally, the don't care value in the expression is
not allowed and triggers a runtime error. For the operands of the std_logic type, the matching equality operator, unlike
the ordinary equality operator (=), returns true when comparing '1' against
'H', '0' against 'L', or '-' against any other value.
The selected signal assignment statement that includes the question mark
is equivalent to the sequential case statement
with the question mark delimiters following both occurrences of the reserved
word case.
process (a, b, c, d, f) is
begin
with f select dout <=
a when "11",
b when "01",
c when "10",
d when others;
-- ...
-- more sequential statements
-- ...
end process;
Earlier revisions of the VHDL standard (up
to IEEE Std 1076™-2002)
allowed using selected signal assignments only as concurrent statements.
p1 : process is
begin
t <= 1 when c = 0 else
0 when c = 1 else
-1 when c = 2;
wait;
end process;
The previous revisions of the VHDL standard
(up to IEEE Std 1076™-2002)
allowed using conditional signal assignments only as concurrent statements.
Conditional variable assignments and selected
variable assignments are available. The syntax for variable assignments
matches analogous signal assignment statements, with <=
replaced by :=.
The process in the listing below contains two variable assignments.
The assignment to the A variable is a conditional
variable assignment, the assignment to the B
variable is a selected variable assignment.
process is
variable a, b : integer;
variable sel : integer;
variable con : integer;
begin
a := 0 when sel = 0 else
2 when sel = 1 else
3 when sel = 2;
with sel select b :=
1 when 0,
0 when 1,
-1 when others;
--
-- more sequential statements
--
end process;
Choices in the matching case statement are now
checked for overlapping. In the previous version, the compiler did not
perform such a check. If multiple choices matched during simulation, the
first matching choice was selected.
Note that the compiler can detect overlapping choices only if they
are locally static. You can also use non-static choices. This violates
language requirements and, therefore, requires running the compilation
with the -relax compiler argument (acom).
The compiler will warn you that a choice is not locally static and duplicate
choices cannot be detected.
The unaffected keyword
can be used in sequential signal assignments, for example:
process is
begin
S0 <= unaffected;
S1 <= D when CS1 = "01" else
E when CS1 = "10"
else
unaffected;
with CS2 select S2 <=
D when "01",
E when "10",
unaffected when others;
-- ...
end process;
The previous revisions of the VHDL standard
(up to IEEE Std 1076™-2002)
allowed using the unaffected keyword only as
a waveform only in concurrent signal assignment statements.
architecture example of example is
signal se : std_logic;
begin
sensor : block ( se ) is
begin
-- ...
end block sensor;
--...
Note that the se
signal used as the guard expression is of the std_logic
type rather than boolean. After the condition operator (??)
is applied implicitly to se, the resulting
expression (?? se) returns a boolean value.
Operators mod and rem are now available for operands of the time
type.
Generic
lists can now be used in package declarations, similarly to generics in
entities. An example of such a package is shown below.
package unistpack is
generic (
intsize : integer
);
signal R1 : bit_vector (intsize - 1 downto 0);
end package unistpack;
The unistpack
package shown in the listing is referred to as an uninstantiated
package. Prior to using the package, you must instantiate it. The package
instantiation statement should contain a generic map, similarly to a component
instantiation statement, for example:
package pack is new unistpack
generic map (
intsize => 32
);
The instantiated package (the pack
package in the listing) can be made available to other design units with
a regular use clause, for example:
use pack.all;
entity en is
end entity en;
architecture ar of en is
signal L1 : bit_vector( 31 downto 0 );
begin
L1 <= R1;
end architecture ar;
VHDL 2008 adds a number of other enhancements
to generics, for example it allows specifying generic types, generic subprograms,
and generic packages in generic maps. Those extensions are not yet supported.
(Only interface objects, not interface types/subprograms/packages can
be used in generic maps.)
Attribute declaration and attribute specifications
are now allowed in the declarative part of a package body.
The IEEE_BIT_CONTEXT
and IEEE_STD_CONTEXT standard synthesis context
declarations are available in the IEEE library.
|
For additional information about the new
VHDL constructs supported in this release, refer to the Compilation
| VHDL Compilation | VHDL 2008 section in the on-line documentation.
NOTE:
The -2006 compiler argument (and corresponding
GUI setting) will not be supported in the next version of Active-HDL and
the new -2008 argument will be used instead.
The following changes and improvements to VHDL simulation are also available:
subtype myarr_t is bit_vector (3 downto
0);
type mygeneric_t is array (2 downto 0) of myarr_t;
the value of ("0000","0010","0111")
could be assigned to the mygeneric generic
by using the following command line:
asim -gmygeneric=("0000","0010","0111")
top
(SPT19928)
Two new procedures were added to the aldec_tools
package from the aldec library. This package
contains the asdb_dump procedure
that allows specifying signals to be recorded in the simulation
database. Signal recording starts immediately after asdb_dump
is executed. In the previous version of Active-HDL, it could not be stopped
from VHDL code. Starting from version 8.2, the asdb_dump
package contains two new procedures: asdb_dump_off
and asdb_dump_on. The asdb_dump_off
procedure disables recording to the database. The asdb_dump_on
procedure resumes recording.
Physical types now use a 64-bit representation.
Accordingly, the following type definition is now valid.
type distance is range
0 to 2**31 * 2**31
units
mm;
cm =
10 mm;
m =
100 cm;
km =
1000 m;
megam = 1000 km;
gigam = 1000 megam;
lightyear = 9460528 gigam;
end units distance;
Note that the literals used to specify the
type range and secondary units must still be valid integer literals, i.e.
they must fit into 32 bits. (The simulator uses a 32-bit representation
for the integer type). If the literal is greater than integer'high
(i.e. greater than 2**31 - 1) but equal or less than 2**32, the compiler
will generate a warning but the value will be interpreted correctly.
The same limitation applies to expressions that yield values of a physical
type - the integer literals used in the expression must be within the
valid 32-bit range. Note that you can also use real literals instead of
integers.
Verilog
Compilation and Simulation
Active-HDL 8.2 introduces significant changes
in default GUI settings for Verilog compilation and simulation. Now, the
acceleration of simulation in Verilog designs (SLP engine) is enabled
by default. SLP acceleration reduces the run time needed to simulate Verilog
at the cost of limited visibility into the design regions during simulation.
(Step simulation and code breakpoints are not available, read and/or write
access to signals in the design may be disabled, collecting coverage data
is disabled, etc.) To disable SLP acceleration, clear the Verilog
Optimization option in the Simulation
| Verilog category in the Design
Settings dialog box.
Simulations started in the command line with the use of the asim
command will use SLP acceleration unless it is explicitly disabled with
the -O2 argument. Previously, the SLP technology
had to be enabled with the -O5 argument. Note
that you do not have to disable SLP, e.g. if you only want to record signal
waveforms and you do not need code debugging.
Additionally, in order to achieve maximum performance, the default
compiler settings for optimization levels and generation of debugging
information have been changed for newly created designs. (No changes are
introduced to predefined settings of existing user-defined designs.) Since
version 8.2, the default compiler setting for the optimization level (required
for e.g. Advanced Dataflow, stepping through HDL statements, setting code
breakpoints, and collecting coverage data, etc.) is set to level 2 and
the generation of debugging information has been disabled (the Enable
Debug option in the Compilation
| Verilog and Compilation | VHDL
categories of the Design Settings
dialog box is cleared).
Verilog simulations that record VCD files run
up to three times faster in the default -O5
mode (i.e. with the SLP acceleration enabled) and up to 50% faster in
the -O2 mode (i.e. without the SLP acceleration).
Simulations using PLI applications extensively
run up to 40% faster.
RTL simulations without SLP acceleration are 5%
faster on the average and allocate less memory.
Simulations recording VCD files may run faster.
Speedups depend heavily on designs and types of recorded signals. In some
benchmarked designs, simulations run up to 30% faster.
Two new tasks are available to control recording
of simulation database directly from Verilog code: $asdbDumpOn
and $asdbDumpOff. These two tasks complement
the functionality provided by the $asdbDump
task. The $asdbDump task specifies signals
to be recorded in the database. Recording starts immediately after the
task is executed. Starting from version 8.2, you can stop recording with
$asdbDumpOff and resume it with $asdbDumpOn.
Automatically generated names for generate
blocks now meet requirements of the IEEE Std. 1364™-2005.
All unnamed generate blocks are given the name genblk<n>
where <n> is the number assigned to its
enclosing generate construct. The numbering of the generate
constructs starts at 1 at the construct that appears textually first in
a given scope. In the previous version, the names started with a number
followed by the generateblock string.
SystemVerilog Compilation and Simulation
Dynamic arrays are supported. The dynamic arrays
can be used to manage collections of variables whose number changes during
simulation runtime. The example below shows how to declare, create, resize,
and delete such an array.
integer arr[]; //declare
initial begin
arr = new [10]; //create
$display( arr.size() );
arr = new[20](arr); //resize
$display( arr.size() );
arr.delete(); //delete
$display( arr.size() );
end
The array size reported by the $display
task will be 10, 20, and 0.
integer opcode_cnts[ string ];
initial begin
opcode_cnts[ "ADD" ] = 3;
opcode_cnts[ "SUB" ] = 4;
opcode_cnts[ "JNE" ] = 4;
end
Supported associative array methods include:
num (returns the number of elements), delete (removes an element form the array), exists (checks if the document exists), first,
last (assign the index of the first/last element
and return 1 on success), prev, and next
(assign the index of the previous/next element and return 1 one on success).
(SPT18135, SPT21757)
integer q[$]; //A queue of integers
integer r[$:15]; //A queue with a maximum size of 16
initial begin
#10;
q.push_back( 1 );
q.push_back( 2 );
q.push_front( 0 );
q.push_front( 4 );
for( int i = 0; i < q.size();
i++ )
$display( q[i] );
r = q [1:2];
for( int i = 0; i < r.size(); i++ )
$display( r[i] );
end
(SPT19488, SPT21734, SPT21735, SPT22556,
SPT22656)
class stack #(type T = int);
//...
endclass
The class could provide the following methods
(note how type T is used to specify task arguments
and function return values):
task push( T a );
//..
endtask
function T pop( );
//..
endfunction
function integer size( );
//..
endfunction
The class, when instantiated, can be parameterized
with an arbitrary type, for example:
typedef struct {
int x;
int y;
} point;
stack #( point );
Operators !== and === can now be used with class handles as operands.
(SPT22226)
The foreach loop is
now available and can be used to iterate over array elements, for example:
int arr[0:7]='{0,0,0,0,4,4,4,8};
initial
foreach(arr [i])
$display( arr[i] );
The foreach loop
can iterate not only over regular arrays but also over associative arrays,
dynamic arrays, and queues.
An unpacked structure can now be assigned to another
structure of the same type. Previously, such functionality was available
only for packed structures.
Unpacked structures and arrays can now be used
as task and function arguments and module ports, and modports. (SPT19526,
SPT22375)
Blocking and nonblocking assignments to complete
structures are supported. Additionally support for assignments to complete
arrays has been improved, for example it is now possible to have a procedural
assignment to a packed array or a continuous assignment to a packed array
of nets. (SPT22572, SPT22373)
A class property can be placed on a sensitivity
list or in an event expression. In the previous release, only static class
properties could be used as timing controls.
The support of the string
type has been enhanced:
string s;
always @( s )
$display( "String s changed: %s", s );
You can also use string type methods on the
sensitivity list, for example the len() method:
string s;
always @( s.len() )
$display( "String length changed: %s", s );
Structure fields and class properties can
now be declared to be of type string. In the
previous release, only static string properties were supported.
Module ports can be declared as objects of
the string type. (SPT22537)
The following methods have been added to the
string object: atoi(), atohex(),
atooct(), atobin(),
atoreal(), itoa(),
hextoa(), octtoa(),
and bintoa(). (SPT15376)
The $fgets, $fread, $ferror, and $swrite system tasks can now handle correctly arguments
of the string type.
Additionally:
Functions can return values of the string
type.
Automatic tasks and functions can accept arguments
of the string type.
Class methods accept arguments of the string type and can return values of the string
type.
Variables of the string
type can be declared in class methods.
The following improvements are available for the
constraint solver engine:
The constraints definitions can include function
calls.
Fields of unpacked structures can be randomized.
Static class properties can be randomized.
Randomization of non-static class properties is not yet available.
Parameters can be declared in the compilation
unit scope. (SPT21078)
Several improvement are available in virtual interfaces.
Event control on virtual interface dynamic class properties is supported.
Non-blocking assignments can be used inside virtual interfaces. (SPT20700,
SPT21676)
A clocking block may be specified for a modport. (SPT15871, SPT21180)
Compiling code with declarations of pure virtual
methods conforming to the IEEE 1800™-2005
syntax requires the uss of the -sv2k5 compiler
argument. For example, the compiler will assume that the declaration below
declares a pure virtual method only if -sv2k5
is passed.
virtual function void f;
endfunction
If the -sv2k5
argument is omitted, the compiler will analyze the declaration according
to the rules outlined in the draft of the new revision of the standard,
that is, it will assume that the declaration declares a non-pure virtual
method with an empty implementation. (SPT22341)
Constant functions can be declared in packages.
An arbitrary cycle delay can be used in intra-assignments
in a clocking drive. In the previous release, only ##1
was allowed.
The clocking event can be passed to the sampled
value functions ($sampled, $rose,
$fell, $stable,
$stable). Previously, only the one-argument
version of those functions was supported.
A four-argument version of the $past
function is supported, i.e. the function accepts the expression2
and clocking_event arguments, as required by
IEEE 1800™-2005.
(SPT14379)
The sampled value functions can be used in procedural
code. (SPT19101)
The fork ... join_any
and fork ... join_none constructs are now supported.
(SPT21675, SPT22557)
Variables can be declared in unnamed blocks, for
example in an unnamed always block or an unnamed
initial block.
SystemVerilog classes can contain unpacked properties,
for example unpacked structures, arrays, or real values. In the previous
version of Active-HDL, classes containing such properties could not be
compiled (SPT20597).
Structures and arrays can be used as task and
function arguments.
Class methods can be declared extern.
This feature allows moving the method definition outside the body of the
class declaration; this can improve the readability and maintainability
of a code and is especially convenient for methods with large bodies.
To move a method definition outside the class, precede the method prototype
with the extern qualifier, for example:
class c;
extern function void f;
endclass
Then, declare the method outside the class,
qualifying its name with the class name and two colons, for example:
function void c::f;
$display ("A method defined outside the class declaration.");
endfunction
If you fail to provide the method body, the
compiler will not report an error. However, a fatal error will be reported
when the simulation is initialized.
Extern class methods in Active-HDL are visible as separate library units
and can be compiled independently of class declarations. This feature
further enhances code management. The
Compiling Code that Uses Classes in the SystemVerilog
Simulation section contains tips on how to split SystemVerilog
code into header files (.svh)
and implementation files (.sv).
The correct organization of source files can substantially reduce compilation
dependencies and recompilation times, enforce proper interfaces inside
the project, facilitate organizing sources into packages and libraries,
and improve code reusability.
module dynamic_cast;
class c;
endclass
class ce extends c;
endclass
c C = new;
ce CE1 = new;
ce CE2 = new;
initial begin
C = CE1; // Variable C now holds a reference
// to a variable of class
CE
if( $cast(CE2, C) ); // so $cast
succeeds.
$display( "Cast succeeded" );
end
endmodule
The ce class extends
the c class. The CE1
object is assigned to the c variable of the
C class. (It is legal to assign a subclass
variable to a variable of a class higher in the inheritance tree.) Because
the C variable holds a reference to a variable
of the ce class, you can then cast C
(superclass handle) to CE2 (subclass variable).
A limited support for virtual interfaces is available.
Virtual interfaces allow separating abstract models and test programs
from the actual signals in the design. The users manipulate sets of virtual
signals without having to refer to actual signals in the design. Changes
to the underlying design do not necessitate changes to the code that uses
virtual interfaces.
Virtual interfaces can be used for arguments of task, function, and
class methods. The example below shows the C
class with a virtual interface passed to the class constructor (the new() function). Note the virtual
keyword.
interface itf;
logic req,ack;
endinterface
class C;
virtual itf itf_var;
function new(virtual itf itf_in);
itf_var = itf_in;
endfunction
task request();
itf_var.req = 1'b1;
endtask
endclass
The current implementation in Active-HDL
supports:
Declarations of virtual interfaces, including
declarations inside classes.
Assignments to virtual interface variables.
Simple read-write access to elements of a
virtual interface: variables, parameters, bit selections, part selections,
and concatenations; chained hierarchical references are not supported
yet.
Calling functions and tasks in the interface.
Expressions using ==, !=, ?: operators with
virtual interface operands.
Access to virtual interface objects on sensitivity
lists.
Additional information about virtual interfaces
is available in the SystemVerilog Reference
Guide.
The std::randomize
function supports randomization for more data types: packed structures
and unions, members of both packed and unpacked structures and unions,
static and non-static class properties accessed via static object references
(i.e. references that are not declared inside automatic tasks and functions
and created on the stack during runtime). Any nested combination of those
types is also supported.
Array literals are supported. The example below
shows an array literal used for assigning value at declaration:
typedef reg [0:1][0:1] R;
R r1 = '{ '{1, 1}, '{1, 0} };
The nesting of braces in the literal must
follow the number of array dimensions. Using the replication expression
is allowed, for example:
R r2 = '{ '{ 2{1} }, '{1, 0} };
The literal can specify the default value,
for example:
typedef int T [0:31];
T t1 = '{default : 16};
Literals can also refer to fields in the
array using indexes and specify the default field value, for example:
T t2 = '{0:10, 1:10, 2:10, default : 16};
(SPT17667, SPT21780, DAM602/Case ID:15608)
typedef struct {bit x; int y; real z; }
S;
S s = '{1, 2, 0.0};
In this release, structure literals cannot
be prefixed with a type indication.
User-defined bins in coverpoints are supported.
The detect_overlap
member is now available in the option structure
holding instance-specific coverage options. Setting this option to 1 forces
the simulator to check for overlaps between coverpoint
bins. If an overlap is detected, the simulator issues a warning. For example,
given the following coverpoint:
coverpoint addr {
option.detect_overlap = 1;
bins a = { [0:31]};
bins b = { [0:63]};
}
the simulator will issue the following warning:
Warning: RUNTIME_0206 Detected an overlap
between SystemVerilog coverage bin(s) 'a', 'b' within the interval '[0:31]'.
The two-argument variants of the get_coverage()
and get_inst_coverage() methods are now available.
When the two arguments are specified, both methods assign to the first
argument the number of covered bins and to the second argument the number
of coverage bins defined for the given coverage item.
The following abort properties accept_on,
reject_on, sync_accept_on,
and sync_reject_on are now supported. The accept_on and reject_on
properties are asynchronous; the sync_accept_on
and sync_reject_on properties are synchronous.
A garbage collector is available. The garbage
collector automatically detects unreferenced objects (i.e. objects that
can never be accessed by the application) and frees the memory occupied
by those objects.
The cover statement can be used to monitor a sequence,
for example:
sequence s1;
@(posedge clk) { a, b};
endsequence
cover sequence( s1 );
Note that the cover
statement can only be used with properties in IEEE Std. 1800™-2005.
Property evaluations are either vacuous and nonvacuous.
For more information on this feature, see Assertions
| Concurrent Assertions | Vacuity Feature in the SystemVerilog
Reference Guide.
New commands dedicated to Functional Coverage
are available (fcover report, fcover
comment, fcover clear). See Scripts
below for more information.
Functional Coverage metrics can be collected by
using the newly supported covergroup and coverpoint constructs. A covergroup specification
contains a set of coverage points and a clocking event that synchronizes
sampling of coverage points. In the listing below, the covg
covergroup is defined inside the m module.
The group has only one coverage point (clrs).
The coverage points are sampled at the negative edge of the clk
signal. The group is then instantiated as covvar.
typedef enum bit[1:0] {
cyan, magenta, yellow, black
} colors_t;
module m( clk, clrs );
input bit clk;
input colors_t clrs;
covergroup covg @(negedge clk);
option.at_least = 2;
coverpoint clrs;
endgroup
covg covvar = new;
// other statements
endmodule
The coverage options such as auto_bin_max,
at_least, goal,
and weight are supported. The get_inst_coverage
and merge_instances options are also supported.
A functional coverage report can be created by using the fcover
report command. The report for the code in the listing could look
as follows:
FUNCTIONAL COVERAGE:
================================================================
| Covergroup | Hits | Goal / | Status |
| | | At Least | |
================================================================
| TYPE tb.U1.covg | 75.000% | 100.000% | Uncovered |
|-----------------------------|---------|----------|-----------|
| COVERPOINT tb.U1.covg::clrs | 75.000% | 100.000% | Uncovered |
|-----------------------------|---------|----------|-----------|
| bin auto(0) | 6 | 1 | Covered |
| bin auto(1) | 1 | 1 | Covered |
| bin auto(2) | 2 | 1 | Covered |
| bin auto(3) | 0 | 1 | Zero |
================================================================
| TYPE tb.U2.covg | 75.000% | 100.000% | Uncovered |
|-----------------------------|---------|----------|-----------|
| COVERPOINT tb.U2.covg::clrs | 75.000% | 100.000% | Uncovered |
|-----------------------------|---------|----------|-----------|
| bin auto(0) | 6 | 1 | Covered |
| bin auto(1) | 1 | 1 | Covered |
| bin auto(2) | 2 | 1 | Covered |
| bin auto(3) | 0 | 1 | Zero |
================================================================
TOTAL FUNCTIONAL COVERAGE: 75.000% COVERGROUP TYPES: 2
User-defined coverage bins and the cross
construct are not yet supported.
class b;
virtual function void f;
$display ("function from the base class");
endfunction
endclass
class d extends b;
function void f;
$display ("function from the derived class");
endfunction
endclass
module m;
b B;
d D;
initial begin
D = new;
B = D;
B.f();
end
endmodule
The d class extends
the b class and overrides the f()
method declared as virtual. A call to the f()
method in the base class (i.e. B.f()) executes
the f() method from the derived class (i.e.
D.f()). If the f()
method in the base B
class were not declared virtual, then B.f()
would be executed instead. (Function
from the base class would be displayed.) A method declared as virtual in the base class remains virtual in all
classes derived from that class, either directly or indirectly.
Note that compiler assumes reg to be the default function argument type,
therefore the following declarations are not equivalent:
virtual function void f (input logic r);
endfunction
virtual function void f (logic r);
endfunction
virtual class b;
pure virtual function void f;
endclass
class d extends b;
function void f;
$display ("function from the derived class");
endfunction
endclass
Constants declarations can be used inside packages.
Packages can now export symbols imported from
other packages using the export keyword, for example:
package p1;
const integer c = 1;
endpackage
package p2;
import p1::*;
export p1::*;
endpackage
module m;
import p2::*;
reg r = c; // c is now visible
endmodule
The substr() method
is available for string objects. The substr()
method returns a new string created from a range of consecutive characters
in the string object. The beginning and the end of the range must be specified
as arguments to the substr() method. Both arguments
must be integers. Character numbering starts at 0. An example is shown
in the listing below. When the code is executed, the simulator will display
the ring string, which is a substring of the
original my string string:
string str;
initial begin
str = "my string";
$display (str.substr (5, 8));
end
Note that the substr()
method returns an empty string when the second argument is less than the
first argument or either of the arguments is out of range (i.e. it is
less than 0 or more than str.len()). (SPT18138)
Input and inout ports can be of the bit type.
In the previous version, the bit type was allowed only for module output
ports. (SPT15870)
The list of port connections in a module instantiation
statement can now connect two-value output port to a four-value output
port in the instantiating module, or a four-value output port to a two-value
output port in the instantiating module. For example, an output port of
the integer type can be connected to an output port of the int type. Previously,
such connections triggered an error at the initialization of simulation
about an unsupported reg to reg connection. (SPT18931, SPT18933)
Packed structures can be used as module ports.
(SPT16023)
The %m format specifier
used in the action block in an assertion displays the assertion label.
(SPT19125)
Mixed-Language Compilation and Simulation
Mixed-language simulation is faster by 11% on
average and up to 75% in selected cases.
Mapping of Verilog parameters in VHDL generic
maps is now more flexible. In the previous version, when a Verilog module
was encapsulated as a VHDL component, Verilog parameters without the type
specification and Verilog parameters of the integer type had to be mapped
to VHDL generics of the integer type. Starting from Active-HDL 8.2, such
parameters can also be mapped to VHDL generics of the
bit_vector and std_logic_vector type.
The algorithm of translating Verilog values to
VHDL generics changed for generics of the predefined boolean,
bit, and character
type, enumeration types whose values are character literals and contain
value '0' and '1', and for arrays of the aforementioned types. Note that
this comprises both the std_logic and std_logic_vector type.
In the previous version, the value of the Verilog parameter was always
translated to an integer and then that integer was used to select one
value from the enumeration type based on its position. For example, for
a VHDL generic of the std_logic type declared as:
generic( g : std_logic );
the following Verilog mapping in the module
instantiation statement
#(.g(1))
resulted in assigning 'X' value to the generic.
('X' is located at position one in the definition of the std_logic
type.)
Starting from Active-HDL 8.2, the following
mapping is used for scalar types:
|
Verilog |
VHDL |
|
0 and other even integers |
'0' |
|
1 and other odd integers |
'1' |
|
X |
'X', 'x', or '0' |
|
Z |
'Z', 'z', or '0' |
If the VHDL type contains both 'X' and 'x'
literals, then the Verilog value 1'bx is translated into the literal that
has the greater position number in the VHDL type definition. If neither
'X' or 'x' is included in the type definition, then X is translated to
'0'. The same principle applies to the 'Z' and 'z' literals.
If the VHDL generic is of an array type then, the Verilog value is translated
into VHDL bit by bit. For example, the Verilog value 8'hFE mapped onto
VHDL generic of the std_logic_vector (7 downto 0)
type will be translated to "11110000". If the Verilog value
is a string literal, then each character in the string is treated as an
8-bit wide variable; the resulting bit value is translated to VHDL bit
by bit. For example, Verilog string literal "Z" is 8'h5a, which
is 8'b01011010 binary. Accordingly, the VHDL generic will be mapped to
"01011010".
C/C++/SystemC Compilation and Simulation
Simulation with SystemC is faster by 7% on average
and up to 25% in
selected cases.
The SystemC ports of the bool
type can now be connected to VHDL objects of the std_logic
or boolean type. In the previous version, the
SystemC bool type could only be mapped to the
VHDL std_logic type. The type mapping (SystemC
bool as std_logic
or boolean) is determined by the addsc
command. The default behavior has not been changed (i.e. SystemC bool types are still mapped to VHDL std_logic
type). However, if you use the new -boolasbool
argument of addsc, the SystemC bool
type will be mapped to the VHDL boolean type;
you will be able to connect SystemC ports of the bool
type to VHDL objects of the boolean type (connection
to an std_logic object will trigger an error).
The TLM library version 1.0 available in the previous
version of Active-HDL has been replaced with TLM 2.0.
The MinGW package (Minimalist GNU for Windows)
was updated. The updated package includes gcc 3.4.5. In the previous versions
of Active-HDL, the gcc 3.4.2 was used.
Assertion-Based Verification
property p;
@(posedge clk ) a |-> c;
endproperty
assert property (p);
will succeed in two distinct cases:
Whenever the antecedent sequence does not
match, the evaluation attempt is vacuous. A list of SystemVerilog sequence
and property operators that can be evaluated either vacuously or non-vacuously
is available in the Assertions | Concurrent
Assertions | Vacuity Feature section of the SystemVerilog
Reference Guide.
To enable or disable the distinction between
vacuous and non-vacuous evaluations for either assert
or cover statements, use the new vacuity
command. The distinction between vacuous and non-vacuous evaluations is
by default enabled for assertion passes and the cover
statements and disabled for assertion failures.
property p;
@(posedge clk) a ##[1:3] c;
endproperty
The property is asserted in the following
statement:
assert property (not p);
If the assertion failed because sequence
a ##1 c completed successfully, then the information
that a ##2 c also completed successfully (and
the additional evaluation of the assertion failed) is usually redundant.
Previously, such failures were not reported by the simulator.
Starting from version 8.2, Active-HDL can report additional evaluations,
both for assert and for cover
statements. The information obtained from such evaluations may be useful
in a variety of cases, for example, when checking the functional coverage.
To force the simulator to report additional evaluations, use the new -extra argument available both for the assertion
and cover command, for example:
assertion fail -extra -enable
assertion pass -extra -enable
cover -extra -enable
Generating information about the additional
(extra) evaluations may adversely affect the simulation speed. Therefore,
this functionality is by default disabled and, if required, must be enabled
by the user with the assertion/cover
commands.
Libraries
The following changes have been introduced to the system and vendor-specific
libraries delivered with Active-HDL 8.2:
Removed Libraries
Implementation
1. Xilinx ISE 11.2 (AIM, LOGIBLOX, PLS, SPARTAN, SPARTAN2, SPARTAN2E,
SPARTANX, VIRTEX, VIRTEX2, VIRTEX2P, XABELSIM, XC3000, XC4000E, XC4000X,
XC5200, OVI_UNI3000, OVI_UNI5200)
Design Flow Manager
Updated Flowcharts
HDL Synthesis
1. Mentor Graphics Precision RTL 2008 Synthesis (supports Precision
RTL 2008a2.208 OEM edition for QuickLogic) (SPT21132)
2. Synplicity Synplify/Synplify Pro 9.6 for Lattice (supports the 9.6L3
OEM edition for Lattice)
Implementation
1. Actel Designer 8.5 (supports Service Pack 2 for Designer 8.5)
2. Altera Quartus II 9.0 (supports Service Pack 2 for Quartus II 9.0)
3. Lattice ispLEVER 7.2 (supports Service Pack 2 for ispLEVER 7.2)
4. QuickLogic QuickWorks 2009.x (supports QuickWorks 2009.1.2.1, QuickWorks
2009.2.1, and QuickWorks 2009.2.2.1)
Expression Coverage
Expression Coverage has been supplemented with
Condition Coverage. Condition Coverage is a part of the Expression Coverage
engine that monitors and factorizes logical expressions used in conditional
statements. When the simulation session is finished, statistics are processed
and saved to a coverage database (.exd).
Condition Coverage data is a subset of statistics produced by the Expression
Coverage engine. Condition Coverage share the database with Expression
Coverage, i.e. both coverage statistics are collected simultaneously during
the same simulation session.
Reports generated by Condition Coverage are based on data extracted
from the Expression Coverage database and they include only expressions
used in VHDL conditional statements such as if,
while, or the conditional signal assignment
statement. Condition Coverage statistics can be displayed in the Code
Coverage Viewer window. For additional information, refer to the Code
Coverage section below. (SPT21616)
The Expression Coverage engine can collect statistics
for atomic logical expressions used in conditional statements, such as
if RESET, where RESET
is a boolean value. Enabling this functionality requires compilation of
source files with the new -exci argument of
the compiler (acom). The argument comprises
the functionality of the -exc argument and
should be used instead of -exc when statistics
for atomic expressions are required. (SPT22813)
Code Coverage
The Code Coverage Viewer window allows presenting
Condition Coverage statistics. The Condition Coverage statistics can be
displayed in the same way as Code Coverage or Expression Coverage data.
To load Condition Coverage data, a coverage data filter should be set
to Condition Coverage (.exd) in
the Open dialog box. Otherwise,
Expression Coverage statistics will be loaded and shown instead of data
for Condition Coverage. For additional information, refer to the Condition Coverage Report topic in
the on-line documentation.
Scripts
The following changes have been introduced to internal macro commands:
In previous versions of Active-HDL, macros and
scripts could be executed in the DO, Tcl, and Compatibility Mode. (The
Compatibility Mode is a modified Tcl mode supporting the command syntax
of the ModelSim®
simulator.) In order to execute a script in one of the Tcl modes (the
DO mode was always on), the -tcl or -msim
arguments had to be passed to the do or runscript command. Active-HDL 8.2 allows switching
the command interpreter from the DO mode to either the Tcl or Compatibility
Mode so that the execution of regular Tcl commands is possible directly
from the Console window until
the end of the Active-HDL session (the command interpreter returns to
the default DO mode) or the working mode is changed manually with the
new scripterconf macro command. The version
of the Tcl interpreter used in this release is 8.4.19.
Due to this change, the format of the command line (e.g. the names
of the predefined variables, specification of file paths and command arguments)
and interpretation of commands specified within user-defined scripts or
in the Console window has been
updated to meet the requirements of the Tcl language. For more information,
refer to the Active-HDL on-line documentation. (SPT19639)
The new scripterconf
command has been implemented. The macro allows changing the working mode
of the command interpreter (DO, Tcl, or Compatibility Mode).
The -condition argument
has been added to the excoverage report command.
The new argument allows generating a Condition Coverage report instead
of an Expression Coverage report. The Condition Coverage report includes
only expressions used in VHDL conditional statements such as if,
while, or the conditional signal assignment
statement. (SPT21616)
The coverage merge
command has been enhanced with two new arguments dedicated to the Merge
Branches mode. The -path argument specifies
the design branches from respective databases to be merged. The alternative
argument, -rpath, can be used when you need
to merge coverage results for selected hierarchies coming from different
design regions, e.g. if you want to add individual (partial) coverage
results for selected modules to the coverage result of the entire design.
When the design regions being merged differ, the hierarchy paths need
to be replaced before the merge starts.
Both the arguments are available only in the branch merging mode (-merge branches) and they must follow immediately
after either the -dir or -ccl
argument. Multiple specification of -dir |
-ccl and -path|-rpath
pairs is allowed.
The new -rpath argument is also available
in the excoverage merge command. (SPT19555,
SPT21566, SPT21649)
The vacuity command
is available. The command specifies whether the simulator should distinguish
vacuous and non-vacuous evaluations of the assert
and cover statements.
The new arguments -vacuous
and -nonvacuous are available for the assertion fail, assertion pass,
and cover commands. These arguments control
counting and reporting of vacuous assertion passes, assertion failures,
and cover statement matches.
The -extra argument
is available for the assertion fail, assertion pass, and cover
commands. The argument is used to enable monitoring of additional (extra)
evaluation threads for the assert and cover statements.
The fcover command
for generating functional coverage reports has been replaced with the
fcover report command. All arguments previously
supported by the fcover command are now supported
by the fcover report command. Additionally,
the -comment argument is available. This argument
specifies that the report generated by the comment should include a separate
column with comments attached by the fcover comment
command.
The fcover comment
command is available. The command can be used to attach comments to a
covergroup or a coverpoint
and to read previously attached comments. The comments can also be included
in the Functional Coverage report. (The fcover report
command can be invoked with the -comment argument.)
Note that it is not yet possible to attach comments directly from SystemVerilog
code by setting the comment field in the type_options structure. (That field is not yet available
and any reference to it will trigger an error at the initialization of
simulation.)
The fcover clear command
is available. The command clears the contents of the Functional Coverage
database; it is possible to clear either the entire database or data for
selected instances only.
The -lcu option is
available for the Verilog compiler (alog).
Using this options forces the compiler to print a list of successfully
compiled units. (If the option is omitted the compiler will only print
the list of top-level modules.)
The -2008 argument
replaced the -2006 option of the acom,
vhdlstandard, and filevhdloptions
commands.
The -enable_bp_assert
argument has been implemented in the acom and
alog command. The argument allows setting regular
code breakpoints at lines containing the assert
or cover directives.
The -asdbsizelimit
argument has been added to the syntax of the asim
command. It allows specifying the maximum size (in MB) of the ASDB simulation
database file. When the limit is exceeded, a warning message is printed
to the Console window and signal
logging stops without interrupting simulation. If argument is not specified,
the default limit for the size of the *.asdb file is 15750MB.
The -bdepagesize argument
has been added to the syntax of the code2graphics
command. The new argument allows specifying the size for the generated
block diagram document (*.bde).
The -l <logfile>
argument is available for the asim command.
Using this argument forces the application to create a log file with the
contents of the Console window,
similarly to the transcript file command. Logging
does not terminate until you quit the application or close the log file
with the transcript file -close command. (SPT21107)
The -O2 argument has
been added to the syntax of the asim command.
The new argument allows disabling SLP-accelerated simulation, which is
by default enabled during the initialization of simulation since Active-HDL
8.2.
The adir macro command
has been enhanced and supplemented with new arguments. The -l
argument allows printing verbose information about units residing in a
library, -source returns the names of library
source files and -witharch prints architectures
associated with each entity when listing library contents.
The libraryinfo macro
has been added. The command prints to the Console
window the information about a library status, vendor, version and its
description.
The -color argument
of the wave command can be used for any object
when the Accelerated Waveform Viewer is selected. Previously, the color
of waveform objects could be changed only for analog overlay buses in
the Accelerated Waveform Viewer window or for objects displayed in the
Standard Waveform Viewer/Editor window. (SPT22109, SPT21696, SPT21425,
SPT21367, SPT18543, SPT18994, SPT19383, SPT18255)
The new opendocument
and closedocument commands have been implemented.
The commands are the equivalent of the open
and close commands but they can be used in
the Tcl and Compatibility Mode.
The -f argument has
been enabled in the filelibrary, filescriptoptions,
filestatus, filetype,
fileveroptions, and filevhdloptions.
The new argument allows specifying the path and name of a textual file
containing a list of files for which new design settings are to be applied.
The cover unfinished
command has been added. The command enables reporting of the cover
statements whose evaluation has not finished prior to restarting or ending
the simulation session.
The cloc macro command
has been implemented. The command allows analyzing all design/resource
files and languages recognized by Active-HDL and calculates statistics
for blank lines, comment lines, and lines of source code. The tool can
be also started from the Tools
menu by using the HDL Code Statistics
option. (SPT18491, SPT20874, SPT21134)
The psd command supports
now the *.asdb and *.vcd files while initializing the Post Simulation
Debug Mode.
The -preserve argument
has been introduced to the syntax of the design open,
workspace open, and opendesign
macro commands. The new argument preserves the original design settings
and prevents from turning on performance optimization options while opening
for the first time a design coming from an earlier version of Active-HDL.
It is now possible to add array slices to the
waveform; for example command
wave arr(1)(12:2)
creates a virtual bus consisting of 11 elements starting with arr(1)(12) down to arr(1)(2).
(SPT20868)
Block Diagram Editor
The input and output terminals inherit the names
and range specification of symbol pins when connected directly. In the
previous versions, the default terminals names specified in the Default Names category of the Preferences dialog box were used. (SPT20267)
The preferences of the Block Diagram Editor have
been equipped with a new option that allows controlling the order in which
symbol pins are inserted while generating a new BDE symbol in a library
after the compilation of HDL source code. Now, you can choose between
inserting the symbol pins in the alphabetical order or in the order of
their declaration in HDL source code. Previously, the symbol pins were
always inserted in the alphabetical order.
The Pin order option is available
in the Block Diagram Editor | Symbols
Generation category of the Preferences
dialog box. This option is also used by the CODE2GRAPHICS Conversion Wizard
while generating new block diagrams. (SPT20266)
State Diagram Editor
Two new subcategories have been added to the State Diagram Editor category in the
Preferences dialog box. The Default Port Settings subcategory allows
specifying default properties for new ports added to any state diagram
document (*.asf). In turn, the Code Generation
Settings subcategory provides default settings for HDL code generation.
These settings are inherited while creating a new design and they are
valid for all state machines in an active design. (SPT16839)
The New State Diagram Wizard has been enhanced
with an additional page that allows specifying basic elements of new state
diagrams and saving the time while repeating time-consuming graphical
operations, e.g. adding and placing new states. The Wizard allows you
to define a Reset state, a number
of machine states, a layout (pattern) of automatic state placing and distributing
on a state diagram sheet (circular, linear horizontal or vertical), automatic
insertion of unconditional transitions (forward, backward, or both), design
unit header, and a trap or default state. (SPT16835)
The A3 format is now supported by the State Diagram
Editor. It can be selected in the Paper
Size list box in the Page Setup
dialog box. (SPT17422)
HDL Editor
The HDL Editor has been equipped with a new option
that indicates with a vertical dashed line the right margin of the page.
Turning on the right margin indication can be useful, e.g. when you intend
to format text documents before you start printing them. The number of
available columns can be customized in the HDL
Editor category in the Preferences
dialog box. (SPT22604)
The Find
option allows now searching for user-defined strings also in comments
or source code of HDL files. Previously, the search was limited to an
entire document or a selected document area. (SPT16999)
A quick search mode is available. After selecting
text and hitting Ctrl+F3, the editor will search the selection forward.
To search backwards, hit Ctrl+Shift+F3. If nothing is selected, Ctrl+F3
and Ctrl+Shift+F3 will search or search backwards for the word at cursor.
(SPT20009)
The Generate
Structure option in the HDL Editor now recognizes comments following
each other as one group. This is especially useful for reviewing files
with long, initial headers (required by many companies). (SPT13882)
Waveform Viewer
Accelerated Waveform Viewer
A new toolbar has been added to the Accelerated
Waveform Viewer window. The toolbar allows modifying graphical properties
of selected waveform objects (color, height, bold). (SPT20265)
The Display
tab of the Signal Properties dialog
box has been equipped with the Color
option. The pull-down menu with a color palette allows selecting the desired
color for the selected waveform object. The color of any waveform object
can also be specified while adding new objects in the command line. Refer
to Scripts for additional information. (SPT22109,
SPT21696, SPT21425, SPT21367, SPT18543, SPT18994, SPT19383, SPT18255)
The Measurement Mode has been implemented. When
this mode is selected, the distance between events can be measured not
only with the timing cursors but also by inserting the measurement objects
into the Waveform View pane. The measurements, unlike the timing cursors,
are shown above the waveform objects. It is possible to measure the distance
between events on the same or different signals. Except for the time value,
the new mode also allows presenting the value of the signal frequence
or duty cycle and the number of events, rising and falling edges, or positive
and negative pulses. (SPT19680, SPT19917, SPT20748, SPT21376)
When signals are added to the Accelerated Waveforem
Viewer window by using the Add to Waveform
option, the add wave command is printed to
the Console window for each added
signal. When the Add to Waveform Recursively
option is used, wave -rec * is
printed. The add wave/wave
commands are followed by a summary with the number of traced signals.
The drag&drop behavior has not changed, that is only the summary is
printed (without the add wave/wave
commands). (SPT20005)
Options for copying and pasting signals are available.
A signal can be copied or cut from a Wave
View or a List View window.
Such signals can be then pasted elsewhere in the Accelerated
Waveform Viewer window or in another window as long as that window
it is connected to the same database. It is also possible to copy signals
from the Structure tab in the
Design Browser window (and then
paste them to the Accelerated Waveform
Viewer window). Note that you can copy all signals from a given
region by selecting that region in the upper part of the Hierarchy
tab and then using the Copy option.
(SPT20223)
Option Group
by Hierarchy is available in the waveform context menu. The option
creates virtual groups from selected signals. All signals in the given
virtual group come from the same hierarchy level. The name of the virtual
group is a hierarchical path of the design region.
You can use this option to sort all signals in the waveform; simply
select all signals and choose the Group
by Hierarchy option - all signals will be inserted to virtual groups
based on the hierarchy. Note that the Hierarchy
column for a virtual group will display the hierarchical path to the design
region where its elements are located. If the elements come from different
hierarchies, the column is empty. This principle applies not only to virtual
groups but also to other virtual objects (virtual buses and analog overlay
buses). (SPT17990)
A new Export
to Macro option is available in the Export
Wizard dialog box (File | Export
| Waveforms). The option generates a DO macro with an add
wave command for each signal displayed in the Accelerated Waveform
Viewer. The macro also contains additional commands to restore timing
cursors, named rows, etc. The export procedure relies on the write
format command. (SPT16850)
Standard Waveform Viewer/Editor
A new Export
to Macro option is available in the Export
Wizard dialog box (File | Export
| Waveforms). The option generates a DO macro with a wave
command for each signal displayed in the Standard Waveform Viewer/Editor.
The export procedure relies on the format wave
command. (SPT16850)
Current page
is now the default option in the Print
dialog box. This implies that only the current page is displayed when
the contents of the Standard Waveform Viewer/Editor are displayed in the
print preview mode. (SPT20270)
Active-HDL Interfaces and Wizards
The following changes and improvements have been made to the built-in
Active-HDL DSP interfaces:
Interface to
Simulink®
1. A major change in the SampleTime parameter registration for HDL
Black-Box was introduced. Now, the Period setting for ports is used not
only to manage transactions rate between environments, but it also defines
the SampleTime value registered for a port in Simulink. This makes HDL
Black-Box a true multirate block. Now, connecting blocks in multirate
systems is much easier (no Rate Transfer blocks are needed). This change
may require some corrections of the SampleTime parameter in blocks connected
to the HDL Black-Box block. (Due to the port rate changes, conflicts with
other blocks may appear if they have explicit block rate specified.) In
order to avoid such problems, the Sampling Compatibility Mode is implemented.
It is turned on by default by the ald_UpdateModel
function for models coming from versions earlier than 8.2.
2. The sampling period for input ports can now be specified explicitly
or inherited. Additionally, the sampling period of output ports can now
be inherited from the specified input port.
3. The Macro tab has been added
to the Active-HDL Co-Sim dialog
box. It allows specifying and executing an Active-HDL macro before the
co-simulation session initializes. Such a macro can be used, e.g. to compile
an HDL design and generate M-Files before co-simulation starts. A simple
MATLAB expression returning the true/false value can be used to conditionally
execute the macro. To prevent the macro from execution whenever co-simulation
starts, a simple function, e.g. checking whether M-Files exist can be
used.
4. The ald_do function was added. It allows
executing any macro command in Active-HDL from within the MATLAB Console
Window or M-File.
The following changes and improvements have been made to the import
of third-party projects (File | Import):
The following changes and improvements have been made to the built-in
third-party interfaces:
The following changes and improvements have been made to the CODE2GRAPHICS
Conversion Wizard:
The new BDE Page
Size tab has been added to the CODE2GRAPHICS
Settings dialog box. The new tab allows specifying page settings
(size, orientation, title table, etc.) for the generated block diagrams.
(SPT20922)
Documentation
The new VHDL 2008 section has been added to the
VHDL Reference Guide. This section describes features added in the latest
edition of the standard, i.e. IEEE Std 1076™-2008.
Constructs not yet supported by the simulator have been omitted. The term
VHDL 2008 supersedes the term VHDL 2006 used previously to informally
designate the language based on subsequent drafts of IEEE Std 1076™-2008, e.g.
Draft IEEE P1076™-2006/D3.2.
The contents of the References
| Package References section (describing packages STANDARD, TEXTIO,
STD_LOGIC_1164, and STD_LOGIC_ARITH) and the topic describing the ENV
package have been updated and they are now available in the VHDL Reference
Guide that can be found in the References
| VHDL Language Reference Guide section in the main TOC or from
the References | Active-HDL Reference
Guides | VHDL Language Reference Guide page of the Graphical
View of Contents main window.
Others
The new HDL Code
Statistics tool has been added. It allows analyzing all design/resource
files and languages recognized by Active-HDL and calculates statistics
for blank lines, comment lines, and lines of source code. The HDL
Code Statistics option added to the Tools
menu starts the tool (\bin\clocgui.exe)
in the GUI mode. The HDL Code Statistics
window allows selecting items to analyze and specifying analysis settings
prior to processing files. The tool can be also started from the Console window by using the cloc
macro command. (SPT18491, SPT20874, SPT21134)
Problems Corrected in Version 8.2
VHDL Compilation and Simulation
The compiler crashed if the subtype range was
specified with attributes, the base type of the subtype was REAL, and
such a subtype was used as an entity port. (SPT21274)
A function returning a value stored in a local
variable of an array type could crash the compiler if the index range
of the array was determined with a call to another function. (SPT20442)
Under specific circumstances, a runtime error
could happen when a VHDL function returned a complex data structure containing
a mixture of access types, arrays, and records. (SPT20827)
The simulator sometimes did not produce meaningful
error messages when the size of interface ports did not match at the design
elaboration stage or a range check failed during simulation. The issue
was resolved and now correct messages are reported, for example:
ELAB2_0020 Different lengths; left: 9, right:
11
or:
RUNTIME_0047 Index 2 out of range (63 downto
32).
(SPT20960, SPT21406)
Using an illegal prefix for the 'length
attribute in a complex expression could sometimes result in a confusing
error about an unsupported construct. The issue has been resolved and
the compiler now correctly indicates that the prefix for the attribute
is illegal. (SPT21262)
The -nowarn compiler
argument (i.e. the argument to selectively suppress compiler warnings
by the message ID) did not work for some messages, for example COMP96_0119
(a warning about a null range). The issue has been corrected. (SPT16478)
An error that appeared during simulation of selected
Altera models was fixed. The error resulted in attaching the 'U' driver
to elements of a bus. (SPT20768)
An issue with range calculation was resolved.
(SPT20508)
The signal_agent procedure
sometimes failed to locate signals in the design if hierarchical signal
names used the slash separator (/) rather than
the colon separator (:). (SPT20305)
An unknown error reported during the simulation
initialization stage was fixed. (SPT21418)
A simulation runtime error
was corrected. The error happened under specific conditions when some
of the source files were compiled with and some without the debugging
information. (SPT22157)
Verilog Compilation and Simulation
An issue with incorrect evaluation of a Verilog
expression was resolved. (SPT21287)
Incremental compilation of Verilog sources (alog -incr) increased the size of library files on
disk even when the compiler correctly detected that the Verilog source
files did not change. (SPT20878)
The $random task did
not correctly handle arguments that were a part-selection. (SPT20988)
The `include directive
was not compiled correctly if the file name to be included was specified
with a text macro defined with another macro. (SPT21016)
An issue with SDF annotation was resolved. (SPT21060)
SystemVerilog Compilation and Simulation
Mixed-Simulation
An issue that resulted in a runtime error during
simulation of mixed VHDL-Verilog design with SLP acceleration enabled
was fixed. (SPT20594)
A problem with instantiating VHDL entities in
a SystemVerilog testbench that used interfaces and modports was resolved.
(SPT20500)
PSL Simulation
Debussy/Verdi
Interface
PLI Interface
Project Management
Folders on the Files
tab in the Design Browser window
were sometimes not marked correctly with the red mark when files inside
such folders did not compile cleanly. This issue is now resolved and the
red mark is correctly displayed. (SPT22604)
A double click can now be used in the General
| Top-level category of the Design
Settings dialog box to set the top-level unit. In the previous
version of Active-HDL, the Set as Top-level
option had to be selected from the pop-up menu and the double click had
no effect. The top-level unit can also be set by selecting that unit and
clicking the Apply button. (SPT14973,
SPT18485)
Block Diagram Editor
Previously, the values in the signal, named net,
and terminal probes were displayed incorrectly when the Save
full signal history option was enabled during simulation. In this
release, this issue is corrected. (SPT16161, SPT22781)
Standard Waveform Viewer
The Enable Show
Event Source option (asim -ses) has
been improved and now it allows checking events on vectors, arrays, records,
and their elements. (SPT22164)
Documentation
What's New in Previous Versions?
For more information about features and changes introduced to previous
releases of Active-HDL, refer to the Active-HDL release history. See On-line Documentation for
details.
|