Proper Platform Definition

BP
Brian Padalino
Wed, Jan 22, 2020 3:23 AM

I've got a custom platform I'm trying to create, but I'm a little confused
about the best practices.

I'm looking at the normal OpenCPI repository as well as this E310
repository for reference:

https://github.com/opencpi/av.bsp.e310

In general, I see that platforms define devices which can be instantiated
in configurations.  So the platform will have all the device mappings, and
the configurations actually instantiate a real device worker.

For the E310 repository, an e310_conn is made as an abstraction for a slot
on the E310 even through there are no slots, really.  This is very similar
to my situation as everything is soldered to the board but possibly not
populated.

Currently, I've just been defining the devices and signals for the
platform, but no slot.  Is this all a matter of personal preference, or is
it better to make a slot even though it isn't actually a slot?

Lastly, I have configurations which have LVDS signals defined as outputs.
If I want to drive those signals to safe levels if those devices are not
instantiated, what's best practices here?  The Xilinx tools need those
pairs driven by an OBUFDS, but if that device isn't instantiated that
primitive won't get instantiated.  Should this be a property of the device,
then, to say if it's actually doing something or if it's just driving
nothing?

I tend to see a lot regarding differential pairs in the development guides,
but not so much used in practice except for the ml605 platform which seems
to be a bit older.  Hence all the questions.

Thanks,
Brian

I've got a custom platform I'm trying to create, but I'm a little confused about the best practices. I'm looking at the normal OpenCPI repository as well as this E310 repository for reference: https://github.com/opencpi/av.bsp.e310 In general, I see that platforms define devices which can be instantiated in configurations. So the platform will have all the device mappings, and the configurations actually instantiate a real device worker. For the E310 repository, an e310_conn is made as an abstraction for a slot on the E310 even through there are no slots, really. This is very similar to my situation as everything is soldered to the board but possibly not populated. Currently, I've just been defining the devices and signals for the platform, but no slot. Is this all a matter of personal preference, or is it better to make a slot even though it isn't actually a slot? Lastly, I have configurations which have LVDS signals defined as outputs. If I want to drive those signals to safe levels if those devices are not instantiated, what's best practices here? The Xilinx tools need those pairs driven by an OBUFDS, but if that device isn't instantiated that primitive won't get instantiated. Should this be a property of the device, then, to say if it's actually doing something or if it's just driving nothing? I tend to see a lot regarding differential pairs in the development guides, but not so much used in practice except for the ml605 platform which seems to be a bit older. Hence all the questions. Thanks, Brian
JK
James Kulp
Wed, Jan 22, 2020 12:51 PM

HI Brian,

Good questions as usual.
The "slot or no slot" decision should come down to whether there are
truly alternative hardware subsystems that you need to support.
Normally that is a true, standards-based slot like FMC, but another
interesting case is the adrv9361 (not released yet), which has various
"motherboards" that provide different hardware environments for the
basic "platform" board.
I think your case, where there are different "soldered/populated"
configurations of your basic platform, could plausibly use the slot
paradigm too, since it would allow you to correctly specify the
different hardware option configurations.
(although if every device is optional, that can lead to a combinatorial
explosion of physical configurations).

I'm not sure about the E310 as an example since I do not know whether
there are ever likely to be alternative "cards" for that physical "slot".

The "tieoff" logic for differential signals not driven when devices are
not instanced has some issues about differential outputs that will be
fixed in 1.7.
Normally unused signals are simply driven to '0', but differential ones
IIRC are not driven correctly in this case.

Jim

On 1/21/20 10:23 PM, Brian Padalino wrote:

I've got a custom platform I'm trying to create, but I'm a little confused
about the best practices.

I'm looking at the normal OpenCPI repository as well as this E310
repository for reference:

https://github.com/opencpi/av.bsp.e310

In general, I see that platforms define devices which can be instantiated
in configurations.  So the platform will have all the device mappings, and
the configurations actually instantiate a real device worker.

For the E310 repository, an e310_conn is made as an abstraction for a slot
on the E310 even through there are no slots, really.  This is very similar
to my situation as everything is soldered to the board but possibly not
populated.

Currently, I've just been defining the devices and signals for the
platform, but no slot.  Is this all a matter of personal preference, or is
it better to make a slot even though it isn't actually a slot?

Lastly, I have configurations which have LVDS signals defined as outputs.
If I want to drive those signals to safe levels if those devices are not
instantiated, what's best practices here?  The Xilinx tools need those
pairs driven by an OBUFDS, but if that device isn't instantiated that
primitive won't get instantiated.  Should this be a property of the device,
then, to say if it's actually doing something or if it's just driving
nothing?

I tend to see a lot regarding differential pairs in the development guides,
but not so much used in practice except for the ml605 platform which seems
to be a bit older.  Hence all the questions.

Thanks,
Brian

HI Brian, Good questions as usual. The "slot or no slot" decision should come down to whether there are truly alternative hardware subsystems that you need to support. Normally that is a true, standards-based slot like FMC, but another interesting case is the adrv9361 (not released yet), which has various "motherboards" that provide different hardware environments for the basic "platform" board. I think your case, where there are different "soldered/populated" configurations of your basic platform, could plausibly use the slot paradigm too, since it would allow you to correctly specify the different hardware option configurations. (although if every device is optional, that can lead to a combinatorial explosion of physical configurations). I'm not sure about the E310 as an example since I do not know whether there are ever likely to be alternative "cards" for that physical "slot". The "tieoff" logic for differential signals not driven when devices are not instanced has some issues about differential outputs that will be fixed in 1.7. Normally unused signals are simply driven to '0', but differential ones IIRC are not driven correctly in this case. Jim On 1/21/20 10:23 PM, Brian Padalino wrote: > I've got a custom platform I'm trying to create, but I'm a little confused > about the best practices. > > I'm looking at the normal OpenCPI repository as well as this E310 > repository for reference: > > https://github.com/opencpi/av.bsp.e310 > > In general, I see that platforms define devices which can be instantiated > in configurations. So the platform will have all the device mappings, and > the configurations actually instantiate a real device worker. > > For the E310 repository, an e310_conn is made as an abstraction for a slot > on the E310 even through there are no slots, really. This is very similar > to my situation as everything is soldered to the board but possibly not > populated. > > Currently, I've just been defining the devices and signals for the > platform, but no slot. Is this all a matter of personal preference, or is > it better to make a slot even though it isn't actually a slot? > > Lastly, I have configurations which have LVDS signals defined as outputs. > If I want to drive those signals to safe levels if those devices are not > instantiated, what's best practices here? The Xilinx tools need those > pairs driven by an OBUFDS, but if that device isn't instantiated that > primitive won't get instantiated. Should this be a property of the device, > then, to say if it's actually doing something or if it's just driving > nothing? > > I tend to see a lot regarding differential pairs in the development guides, > but not so much used in practice except for the ml605 platform which seems > to be a bit older. Hence all the questions. > > Thanks, > Brian >
BP
Brian Padalino
Wed, Jan 22, 2020 2:43 PM

On Wed, Jan 22, 2020 at 7:52 AM James Kulp jek@parera.com wrote:

HI Brian,

Good questions as usual.
The "slot or no slot" decision should come down to whether there are
truly alternative hardware subsystems that you need to support.
Normally that is a true, standards-based slot like FMC, but another
interesting case is the adrv9361 (not released yet), which has various
"motherboards" that provide different hardware environments for the
basic "platform" board.

Understandable.

I think your case, where there are different "soldered/populated"
configurations of your basic platform, could plausibly use the slot
paradigm too, since it would allow you to correctly specify the
different hardware option configurations.
(although if every device is optional, that can lead to a combinatorial
explosion of physical configurations).

Got it.  Thanks.  I'll take it into consideration.  I appreciate the
pointers.

I'm not sure about the E310 as an example since I do not know whether
there are ever likely to be alternative "cards" for that physical "slot".

The "tieoff" logic for differential signals not driven when devices are
not instanced has some issues about differential outputs that will be
fixed in 1.7.
Normally unused signals are simply driven to '0', but differential ones
IIRC are not driven correctly in this case.

Right, plus there is no instantiation of the differential buffer.

When it comes to timeframes, do you know when the next releases are
scheduled?  I'm working from github on v1.5.1.  I've read on the mailing
list regarding 1.6 and 1.7 and moving over to gitlab.  Is there a schedule
that can be shared?

Thanks,
Brian

On Wed, Jan 22, 2020 at 7:52 AM James Kulp <jek@parera.com> wrote: > HI Brian, > > Good questions as usual. > The "slot or no slot" decision should come down to whether there are > truly alternative hardware subsystems that you need to support. > Normally that is a true, standards-based slot like FMC, but another > interesting case is the adrv9361 (not released yet), which has various > "motherboards" that provide different hardware environments for the > basic "platform" board. > Understandable. > I think your case, where there are different "soldered/populated" > configurations of your basic platform, could plausibly use the slot > paradigm too, since it would allow you to correctly specify the > different hardware option configurations. > (although if every device is optional, that can lead to a combinatorial > explosion of physical configurations). > Got it. Thanks. I'll take it into consideration. I appreciate the pointers. > > I'm not sure about the E310 as an example since I do not know whether > there are ever likely to be alternative "cards" for that physical "slot". > > The "tieoff" logic for differential signals not driven when devices are > not instanced has some issues about differential outputs that will be > fixed in 1.7. > Normally unused signals are simply driven to '0', but differential ones > IIRC are not driven correctly in this case. > Right, plus there is no instantiation of the differential buffer. When it comes to timeframes, do you know when the next releases are scheduled? I'm working from github on v1.5.1. I've read on the mailing list regarding 1.6 and 1.7 and moving over to gitlab. Is there a schedule that can be shared? Thanks, Brian