EEVblog Electronics Community Forum

EDA => Altium Designer => Topic started by: ajb on May 06, 2019, 10:29:14 pm

Title: Locking a room *definition*? Or make rooms subsume components in subsheets?
Post by: ajb on May 06, 2019, 10:29:14 pm
I've got a multichannel design where each channel is defined in a sheet made up of three subsheets.  The three subsheets are tightly integrated in the layout, so having one room per subsheet doesn't help me.  Having one room for each channel would be great, but as far as I can tell there's no way to convince Altium to do this automatically.  The room created by the channel sheet only contains the components defined on that sheet, NOT any components defined on subsheets.  This makes some amount of sense because rooms are not hierarchical in any sense.

If there's a way to make Altium automatically generate a room that contains the components in the subsheets as well as the top level sheet I would love to know about it.  In the meantime, I've worked around it by manually editing the room design rules by changing them from a simple 'Component Class' definition to a custom query like this (repeated for each channel):

Code: [Select]
InComponentClass('10.1')   OR InComponentClass('11.1')   OR InComponentClass('12.1') OR InComponentClass('13.1')
That works fine, except whenever I push an update from schematic, it wants to revert the room rule to just the normal component class for the main sheet.  Even if I rename the room, or even if i create a new room from scratch, the comparator appears to look for a room definition that contains the component class from the main channel sheet and attempts to revert it.  I can disable room definition checks in the Comparator tab under Project Options, but that's an all-or-nothing thing.  It works for this design because I don't need to change rooms any more, but in other cases I may very well want to only preserve certain rooms against change.  Is there any way to lock the definition of a specific room?  Locking the room itself does not protect it against design updates, and it doesn't appear that there's any way to otherwise lock the specific design rule itself either.
Title: Re: Locking a room *definition*? Or make rooms subsume components in subsheets?
Post by: T3sl4co1l on May 07, 2019, 06:29:25 am
You can almost do this with Component Classes; I'm not sure if these will generate per-channel though, or if the names can be generated with channel parameters say.  I don't think ClassName can be annotated in the physical (compiled) design?  Maybe it can in AD17+?

I know you can create rules on the schematic, but I don't know if you can craft 1. a Room, which 2. contains the query shown, and 3. attaches to the respective components and channels.

Hack solution, throw it on a huge C size sheet? :P

Title: Re: Locking a room *definition*? Or make rooms subsume components in subsheets?
Post by: ajb on May 07, 2019, 02:45:10 pm
Component classes are basically how I'm doing it now, using the component classes generated by each instance of the subsheets in the room definition rule.  Defining the rule in the schematic is a great idea, unfortunately room definitions aren't one of the available rule types for the Parameter Set directive.  Is there another way to set a rule from sch?

I suppose I could apply a component class parameter to all of the parts in the subsheets, but that's an invisible (and therefore fragile) solution*, and I don't think there's a way to make that give me separate classes for each instance of the channel.

* Yet another situation where making blankets work on components instead of just nets would be really handy