1/337
Looks like no tags are added yet.
Name | Mastery | Learn | Test | Matching | Spaced | Call with Kai | Chat |
|---|
No analytics yet
Send a link to your students to track their progress
Architectural Boundary
A deliberate division between responsibilities that determines what one part of a system must expose to another.
Boundary Quality
How effectively a module boundary separates responsibilities while keeping interactions meaningful, manageable, and stable.
Good Boundary
A boundary that hides unnecessary implementation detail while exposing the information needed to use the module correctly.
Poor Boundary
A boundary that leaks internal details, creates awkward dependencies, or makes system reasoning harder.
Stable Responsibility
A coherent architectural job that is likely to remain conceptually meaningful even if its internal implementation changes.
Modules should correspond to stable responsibilities.
What is the central Part 10 rule for deciding what deserves its own module?
Maximum file count is not the goal of modularity.
What misconception about decomposition does Part 10 reject?
More modules do not automatically mean better architecture.
What important warning applies to modularity?
Useful decomposition is based on responsibility rather than file quantity.
What should determine whether functionality is separated into another module?
A useful module hides complexity while exposing meaning.
What is the ATHENA lightbulb for modularity?
Local Reasoning
The ability to understand or modify one subsystem using its contract without reopening every internal implementation around it.
Good boundaries enable local reasoning.
What major architectural benefit does well-designed modularity provide?
A designer can reason about the divider through START, DONE, ERROR, quotient, and remainder without reopening the restoring-division algorithm.
How does the divider illustrate local reasoning?
The external user needs the divider's contract, not its internal restoring steps.
What information should a good divider boundary hide?
Interface Meaning
The architectural significance of the signals exchanged across a boundary.
A good interface exposes meaning rather than internal procedure.
What should an interface communicate?
Implementation Detail
Internal mechanisms required to perform a responsibility but unnecessary for ordinary users of the module.
Good modularity hides implementation detail that callers do not need.
What type of information should usually remain behind a module boundary?
Abstraction Boundary
A boundary that allows users to rely on what a subsystem does without depending unnecessarily on how it does it.
A divider's transaction interface can remain meaningful even if its internal division algorithm changes.
Why can abstraction improve architectural flexibility?
Interface Stability
The ability of a module's external contract to remain useful even when its internal implementation evolves.
Stable interfaces reduce the number of other modules affected by an internal redesign.
Why is interface stability valuable?
Change Locality
The property that an implementation change affects a small architectural region instead of propagating across the entire system.
Good boundaries improve change locality.
How can modularity make redesign safer?
An internal algorithm can change while external users continue relying on the same contract.
What is an example of change locality?
Boundary Leakage
The exposure of internal implementation details through an interface when outside modules should not need them.
Boundary leakage increases coupling between modules.
What is a danger of exposing too much internal detail?
Leaky Abstraction
A module boundary that fails to hide implementation details that external users must then understand or accommodate.
Why are leaky abstractions harmful?
They force system-level reasoning to depend on internal mechanisms.
Implementation Coupling
A dependency in which another module relies on how a subsystem is internally implemented rather than only on its intended contract.
Stable architectural boundaries try to minimize implementation coupling.
What kind of dependency should good modularity reduce?
Semantic Coupling
A necessary dependency based on the actual meaning of information exchanged between modules.
Not all coupling is bad.
Why can modules still legitimately depend on one another?
Good coupling reflects real architectural relationships rather than accidental implementation details.
What distinguishes necessary coupling from harmful coupling?
Cohesion
The degree to which the responsibilities inside a module belong together as one meaningful architectural unit.
High Cohesion
A condition where a module's internal elements contribute to one coherent responsibility.
A module containing one stable responsibility tends to have stronger cohesion.
What structural property usually accompanies a good module boundary?
Low Cohesion
A condition where unrelated responsibilities are bundled into one module.
A module that performs several unrelated jobs may be difficult to understand and modify.
What problem can weak cohesion create?
Responsibility Cohesion
Grouping logic because it contributes to the same architectural responsibility rather than because it happens to be nearby in code.
Good modularity favors responsibility cohesion.
What should guide grouping of related RTL?
Over-Decomposition
Splitting a system into more modules than its architectural responsibilities justify.
Can modularity be taken too far?
Yes; excessive decomposition can create unnecessary interfaces and coordination.
Under-Decomposition
Combining too many distinct responsibilities into one large module.
Can too little modularity also be harmful?
Yes; unrelated responsibilities can become entangled.
Balanced Decomposition
Choosing boundaries that isolate meaningful responsibilities without fragmenting the design unnecessarily.
The goal is appropriate decomposition, not maximum decomposition.
What should modular architecture optimize for?
File-Count Fallacy
The mistaken belief that more source files necessarily indicate better modularity.
Why is the number of .v files a poor measure of architectural quality?
A design can have many files yet still have bad responsibility boundaries.
One coherent responsibility may legitimately occupy substantial RTL.
Does a large module automatically indicate poor architecture?
No.
Does a small module automatically indicate good architecture?
Boundary quality matters more than raw module size.
What should be judged instead of line count or file count?
Interface Cost
The design and reasoning burden introduced whenever information must cross a module boundary.
Every additional module boundary can add interface cost.
Why is decomposition not free?
Excessive Interfaces
An unnecessarily large number of connections created because the design has been fragmented too aggressively.
Over-decomposition can increase interface count.
What structural cost can excessive modularity create?
Signal Proliferation
The growth of many ports and inter-module wires required to connect fragmented responsibilities.
Why can excessive signal proliferation be problematic?
It increases integration burden and makes interactions harder to understand.
Interface Surface
The amount of information a module exposes to the rest of the system.
A smaller meaningful interface is often easier to reason about than a large detail-heavy one.
What is one benefit of limiting interface surface?
Minimal Meaningful Interface
An interface exposing all information needed for correct use while avoiding unnecessary internal details.
A good interface should be minimal but not incomplete.
What balance should interface design seek?
Too little interface information can make correct coordination impossible.
Why should designers not simply minimize port count at all costs?
Too much interface information can expose implementation detail and increase coupling.
Why should every possible internal signal not be exported?
Interface Completeness
The property that a boundary exposes enough information for external modules to use the subsystem correctly.
Interface Economy
The property that a boundary avoids exposing information that external users do not need.
Good interface design balances completeness and economy.
What two goals must a module interface satisfy simultaneously?
Boundary Overhead
Additional logic, wiring, conversion, or control required because responsibilities are separated across a boundary.
Modularity can have implementation costs as well as reasoning benefits.
Why is decomposition an architectural tradeoff?
Conversion Boundary
A module boundary requiring data representation or format conversion between neighboring responsibilities.
Duplicated Conversion
The repeated transformation of the same information because boundaries were chosen poorly.
Poor boundaries can create duplicated conversions.
What Part 10 modularity cost occurs when neighboring modules repeatedly translate representations?
Repeated sign, width, or format conversions may indicate a questionable boundary.
What kind of symptom can suggest that responsibilities are divided awkwardly?
Representation Ownership
The architectural decision about which subsystem is responsible for maintaining or converting a particular data representation.
Clear representation ownership helps avoid duplicated conversions.
How can conversion duplication be reduced architecturally?
Conversion Locality
Keeping representation changes near the subsystem that logically owns them.
Why is conversion locality useful?
It prevents multiple modules from independently implementing the same transformation.
Awkward Control Boundary
A division where control decisions must repeatedly cross between modules because responsibility was split at the wrong place.
Poor decomposition can create awkward control.
What control-related cost of modularity does Part 10 identify?
Control Ping-Pong
A problematic structure in which closely related control decisions bounce repeatedly between module boundaries.
Why can control ping-pong indicate poor decomposition?
The separated logic may actually belong to one cohesive responsibility.
Control Ownership
The architectural responsibility for deciding when a particular action may occur.
Clear control ownership reduces ambiguous or duplicated decisions.
Why should a boundary make control ownership understandable?
Split Responsibility
A situation where one coherent architectural job is divided across modules so strongly that neither module can be understood independently.
What is one danger of splitting one responsibility too aggressively?
It damages local reasoning and increases coordination.
Responsibility Fragmentation
Breaking one conceptually unified function into pieces that require constant cross-boundary interaction.
High cross-boundary interaction can indicate responsibility fragmentation.
What behavioral clue can reveal over-decomposition?
Cross-Boundary Traffic
The amount of data and control information exchanged between modules.
Excessive cross-boundary traffic can suggest that a boundary is poorly placed.
Why can interaction frequency help evaluate boundary quality?
Chatty Interface
An interface requiring many tightly coordinated exchanges for a responsibility that could possibly be contained more cleanly.
Why can a very chatty interface be suspicious?
It may expose internal sequencing instead of a stable architectural contract.
Transactional Interface
An interface organized around meaningful requests, status, and results rather than internal microsteps.
START/BUSY/DONE is an example of what kind of abstraction?
A transaction-oriented interface.
A transaction-oriented boundary can hide internal iteration count and microsteps.
What advantage does such an interface provide?
Internal Sequence Hiding
Keeping cycle-by-cycle implementation details behind a module boundary while exposing only externally meaningful events.
Why is internal sequence hiding useful?
It allows internal sequencing to change without forcing external redesign.
Protocol Abstraction
Representing a subsystem through meaningful transaction-level events rather than exposing its detailed implementation sequence.
A divider contract can expose START and DONE without exposing every restore/subtract iteration.
What does protocol abstraction allow?
Boundary Contract
The set of externally meaningful assumptions, inputs, outputs, and timing expectations that define correct subsystem interaction.
A good boundary contract should remain understandable without inspecting internal RTL.
What makes a contract useful for local reasoning?