Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > VHDL > Port mapping to (SIGNAL_NAME'range=>'0')?

Reply
Thread Tools

Port mapping to (SIGNAL_NAME'range=>'0')?

 
 
Ken Morrow
Guest
Posts: n/a
 
      07-23-2003
I have just had to move to a later version of a synthesiser, and I have
found that some code which syntesised fine on the earlier version, now
produces errors due to the port mapping of my component.

I have something like:-

signal DATA(2 downto 1); --NOTE. This signal is downto 1, not downto 0.
--The 2 downto 1 is because of an interface to a third party which
--numbers its busses in such a way

component SOME_COMPONENT
generic(
WIDTH : positive := ;
port(
X_BUS : std_logic_vector(WIDTH-1 downto 0);
Y_BUS : std_logic_vector(WIDTH-1 downto 0);
);
end component SOME_COMPONENT;
..
..
..
COMPONENT_INSTANCE : SOME_COMPONENT
generic map(
WIDTH => DATA'length
)
port map(
X_BUS => DATA,
Y_BUS => (DATA'range=>'0')
);

This now gives an error on the line:-
Y_BUS => (DATA'range=>'0')
saying something like 2 is out of range 1 downto 0.

Yet the line
X_BUS => DATA
which also maps a 1 downto 0 to a 2 downto 1 is fine.

I have worked around this by using:-
Y_BUS => (DATA'length-1 downto 0=>'0')

but I was wondering if the error reportedwas because my VHDL was illegal,
or because the synthesiser had incorrectly reported an error.

Many Thanks,

Ken Morrow.
 
Reply With Quote
 
 
 
 
Allan Herriman
Guest
Posts: n/a
 
      07-24-2003
On 23 Jul 2003 13:55:51 -0700, http://www.velocityreviews.com/forums/(E-Mail Removed) (Ken Morrow) wrote:

>I have just had to move to a later version of a synthesiser, and I have
>found that some code which syntesised fine on the earlier version, now
>produces errors due to the port mapping of my component.
>
>I have something like:-
>
>signal DATA(2 downto 1); --NOTE. This signal is downto 1, not downto 0.
>--The 2 downto 1 is because of an interface to a third party which
>--numbers its busses in such a way
>
>component SOME_COMPONENT
>generic(
> WIDTH : positive := ;
>port(
> X_BUS : std_logic_vector(WIDTH-1 downto 0);
> Y_BUS : std_logic_vector(WIDTH-1 downto 0);
>);
>end component SOME_COMPONENT;
>.
>.
>.
>COMPONENT_INSTANCE : SOME_COMPONENT
>generic map(
> WIDTH => DATA'length
>)
>port map(
>X_BUS => DATA,
>Y_BUS => (DATA'range=>'0')
>);
>
>This now gives an error on the line:-
>Y_BUS => (DATA'range=>'0')
>saying something like 2 is out of range 1 downto 0.
>
>Yet the line
>X_BUS => DATA
>which also maps a 1 downto 0 to a 2 downto 1 is fine.
>
>I have worked around this by using:-
>Y_BUS => (DATA'length-1 downto 0=>'0')


This should also work:-

Y_BUS => (others => '0')

>but I was wondering if the error reportedwas because my VHDL was illegal,
>or because the synthesiser had incorrectly reported an error.


It sounds like the synthesiser is to blame.

What did your simulator say? Simulators usually follow the LRM
exactly, whereas synthesisers seem to treat it as a set of loose
guidelines.

Allan.
 
Reply With Quote
 
 
 
 
Jerold Green
Guest
Posts: n/a
 
      07-25-2003
It looks like a syntax error to me. What you are writing is basically:

Y_BUS => (2 downto 1 => '0');

but Y_BUS has the range 1 downto 0, so this must be wrong. The use of the
'range attribute does not change the fact that this is a constant index
range associated with Y_BUS, not DATA.

In the other port mapping:
X_BUS => DATA;
both are arrays of the same length and type, so the assignment takes place
by position, not index.

"Allan Herriman" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> On 23 Jul 2003 13:55:51 -0700, (E-Mail Removed) (Ken Morrow) wrote:
>
> >I have just had to move to a later version of a synthesiser, and I have
> >found that some code which syntesised fine on the earlier version, now
> >produces errors due to the port mapping of my component.
> >
> >I have something like:-
> >
> >signal DATA(2 downto 1); --NOTE. This signal is downto 1, not downto 0.
> >--The 2 downto 1 is because of an interface to a third party which
> >--numbers its busses in such a way
> >
> >component SOME_COMPONENT
> >generic(
> > WIDTH : positive := ;
> >port(
> > X_BUS : std_logic_vector(WIDTH-1 downto 0);
> > Y_BUS : std_logic_vector(WIDTH-1 downto 0);
> >);
> >end component SOME_COMPONENT;
> >.
> >.
> >.
> >COMPONENT_INSTANCE : SOME_COMPONENT
> >generic map(
> > WIDTH => DATA'length
> >)
> >port map(
> >X_BUS => DATA,
> >Y_BUS => (DATA'range=>'0')
> >);
> >
> >This now gives an error on the line:-
> >Y_BUS => (DATA'range=>'0')
> >saying something like 2 is out of range 1 downto 0.
> >
> >Yet the line
> >X_BUS => DATA
> >which also maps a 1 downto 0 to a 2 downto 1 is fine.
> >
> >I have worked around this by using:-
> >Y_BUS => (DATA'length-1 downto 0=>'0')

>
> This should also work:-
>
> Y_BUS => (others => '0')
>
> >but I was wondering if the error reportedwas because my VHDL was illegal,
> >or because the synthesiser had incorrectly reported an error.

>
> It sounds like the synthesiser is to blame.
>
> What did your simulator say? Simulators usually follow the LRM
> exactly, whereas synthesisers seem to treat it as a set of loose
> guidelines.
>
> Allan.



 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Port Mapping john VHDL 1 01-19-2005 10:55 AM
port mapping john VHDL 1 12-14-2004 08:03 AM
area optimized port mapping tulip VHDL 1 11-03-2004 02:20 PM
doubt regarding port mapping tulip VHDL 1 10-29-2004 05:37 PM
Port Mapping kwaj VHDL 1 03-02-2004 11:56 PM



Advertisments