Declaring ports with a complicated array type

M

Marius Vollmer

Hi,

I would like to declare an entity that has a port with type

array (1 to columns) of signed (width-1 downto 0)

where both "columns" and "width" are generics of the entity. How can
I do that?

The natural (for me at least) formulation would be along the lines of

entity matrix_source is

generic (
filename : string;
rows, columns : integer;
row_delay, column_delay : integer;
zero_rows : integer;
width : integer);

subtype value is signed (width-1 downto 0);
type value_vector is array (natural range <>) of value;

port (
clk : in std_logic;
rst : in std_logic;
data : out value_vector (1 to columns));

end matrix_source;

However, this is not legal VHDL since ports can not follow entity
declarative items such as the type declarations.

I would be happy to put "value" and "value_vector" into a package but
I can't since "width" is a generic and unknown to that package.

I tried to use a multi-dimensional unconstrained array such as

type signed_vector is array (natural range <>, natural range <>)
of std_logic;

and used it as

port (
data : out signed_vector (1 to columns, width-1 downto 0));

but that is unnatural (to me) since you than need to write stuff like

data (col, width-1 downto 0) <= to_signed (..., width);

which is not only unnatural but also illegal VHDL since you can't
slice a multi-dimensional array.

I must be missing something...

Thanks in advance!
 
M

Mike Treseler

Marius said:
The natural (for me at least) formulation would be along the lines of

entity matrix_source is

generic (
filename : string;
rows, columns : integer;
row_delay, column_delay : integer;
zero_rows : integer;
width : integer);

subtype value is signed (width-1 downto 0);
type value_vector is array (natural range <>) of value;

port (
clk : in std_logic;
rst : in std_logic;
data : out value_vector (1 to columns));

If this is for synthesis, consider saving
the data structures for internal variables
and keep the entity ports simple.

If this is for simulation, consider
not using an entity interface at all.


-- Mike Treseler
 
M

Marius Vollmer

Mike Treseler said:
If this is for synthesis, consider saving
the data structures for internal variables
and keep the entity ports simple.

If this is for simulation, consider
not using an entity interface at all.

Thanks for your answer.

The entity is for providing test data to a synthesized circuit during
simulation. So it's both for simulation _and_ for synthesis.

I have now put all types in a package, fixing the value of "width"
over all "matrix_sources", but it still is annoying that VHDL doesn't
seem to allow the construction above, for syntax reasons.
 
M

Mike Treseler

Marius said:
The entity is for providing test data to a synthesized circuit during
simulation. So it's both for simulation _and_ for synthesis.

I have now put all types in a package, fixing the value of "width"
over all "matrix_sources"

Glad you got it working.
but it still is annoying that VHDL doesn't
seem to allow the construction above, for syntax reasons.

That is one reason why it is standard practice
*not* to instance the testbench, but to drive test data
directly from signals in the architecture of
a null entity.

-- Mike Treseler
 
J

Jim Lewis

The VHDL-200X Fast-Track is considering the following extensions:
type std_logic_matrix is array (natural range<>) of std_logic_vector;

Then you could declare a signal or port as follows:
signal A : std_logic_matrix(7 downto 0)(5 downto 0) ;

Similarly, a subtype declaration:
subtype Matrix_5x5 is std_logic_matrix(4 downto 0)(4 downto 0) ;

The intent then would be that these get added to the
standard packages (1164 and numeric_std).

There are additional proposals. You can find information about
vhdl-200x at: http://www.eda.org/vhdl-200x/
vhdl-200x fast track: http://www.eda.org/vhdl-200x/vhdl-200x-ft

There is a link to the proposals, meeting notes, and the
reflector at each of the above webpages.


Cheers,
Jim
P.S.
IEEE standards policies and procedures require that anyone that
has a vested in a standard be able to attend meetings and comment
on the working groups work (meaning: although we encourage
people to join IEEE and DASC, non-members are permitted
to join reflector - even do work).
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jim Lewis
Director of Training mailto:[email protected]
SynthWorks Design Inc. http://www.SynthWorks.com
1-503-590-4787

Expert VHDL Training for Hardware Design and Verification
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
M

Marius Vollmer

Jim Lewis said:
The VHDL-200X Fast-Track is considering the following extensions:
type std_logic_matrix is array (natural range<>) of std_logic_vector;

They will also need to change VHDL itself to allow unconstrained
arrays as elements of arrays, right? (Just to check my
understanding.)
 
J

Jim Lewis

Correct.

Marius said:
They will also need to change VHDL itself to allow unconstrained
arrays as elements of arrays, right? (Just to check my
understanding.)

--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jim Lewis
Director of Training mailto:[email protected]
SynthWorks Design Inc. http://www.SynthWorks.com
1-503-590-4787

Expert VHDL Training for Hardware Design and Verification
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top