Skip to content
DenseChip
Learn
PracticeCode labInterview

DenseChip

Navigate

Menu

LearnPracticeCode labInterview

Tools

All toolsSV editorCode repoResume
DenseChip

Practice, courses, and chip-design tools in one focused workspace.

LearnPracticeCode labInterviewToolsLearning paths

© 2026 DenseChip

AboutRoadmapCareersInternshipsFAQContactPrivacyTerms
Skip to lesson

Course contents

  • RTL Foundations36
  • Combinational Design25
  • Sequential Design27
  • FSM & Control27
  • Timing & Clocking39
  • Reset & CDC34
  • Memory & Buses57
  • Advanced RTL28
  • Senior & Interview76
    • Low-Power RTL Hub
    • DFT and Scan Hub
    • Physical Awareness Hub
      • Why RTL structure affects place and route
      • Wire-length-aware micro-architecture
      • Congestion-aware coding patterns
      • Floorplan hooks and hierarchy contracts
    • Waveform Debug Hub
    • STA and ECO Hub
    • RTL-to-Implementation Closure
    • DFT-Ready RTL
    • Capstone: Resilient Streaming Peripheral
    • Principal Design Review
    • Senior RTL Interview Questions & Model Answers
  • Glossary and Notation
Loading lesson

←Physical Awareness Hub
  1. Topics
  2. RTL Design
  3. Senior & Interview
  4. Physical Awareness Hub
  5. Floorplan hooks and hierarchy contracts
On this page

    Part 9 of 9, lesson 13 of 76Part 9 of 9/Senior/Lesson 13 of 76Senior

    Floorplan hooks and hierarchy contracts

    Partition boundaries with explicit interfaces and an optional pipeline stage, checked with and without it.

    A partition crossed by combinational logic re-creates the long path that a slice was meant to break. A good boundary gives the floorplan an explicit interface, clear reset ownership and a place for a slice.

    After this lesson you can: design a partition boundary with an optional register slice, state its timing and reset contract, and keep crossings registered.

    Boundaries the floorplan can use

    Senior RTL engineers expose clean partition boundaries aligned to floorplan blocks: explicit interfaces, documented clock/reset ownership, and optional register-slice insertion points. Physical partitions and reset domains need not coincide.

    Hook

    Rule

    Ingress and egress register stage

    Every block boundary offers a flop the backend can use

    Valid and data cross together

    The qualifier travels with the word, never beside it

    Reset ownership

    Shared or independent according to architecture; release timing and recovery contracts are explicit

    Compile-time slice parameter

    Ports stay the same; latency and reset behavior change and require consumer agreement

    A boundary with an optional slice

    The boundary below carries a valid bit with its word. USE_SLICE chooses a registered crossing or a combinational one, and the interface is identical either way.

    Configuration

    Timing contract

    Reset contract

    USE_SLICE=0

    Combinational; E0 launch settles before E1 consumer edge

    Bypass ignores reset; producer must suppress valid during reset

    USE_SLICE=1

    E0 launch captured at E1; output available after E1, consumed at E2

    Asynchronous clear cancels valid and clears data; release follows domain reset policy

    Each slot shows the values sampled at one rising edge, numbered from 0. out_data_s0 is the bypass (USE_SLICE = 0) and out_data_s1 the slice (USE_SLICE = 1); the valid outputs follow the same pattern.

    • Slot 1: reset is still asserted, yet the bypass already shows 1234. The slice is held at 0. This is the reset difference in the table.

    • Slot 2: reset releases and C000 is offered. The bypass shows it in the same slot; the slice captures it at this edge.

    • Slots 3 to 5: the slice shows C000, C001, C002, each one slot after the bypass: one cycle of latency.

    • Slot 6: both are 0 once nothing is offered and the last word has drained.

    Both configurations assume an always-accepting sink in the same clock domain. This parameter is not behaviorally transparent, a CDC mechanism, or an elastic ready/valid slice. Carry latency in the integration contract; use storage and coordinated backpressure for stalled consumers.

    Common mistakes

    Crossing a partition with combinational logic re-creates the long path the slice was meant to break. Keep partition crossings registered, and use the bypass only inside one block.

    Likely question: “What makes a good partition boundary?”

    • Interface is explicit: valid plus data, no side channels.

    • Reset ownership is explicit; independent resets need boundary recovery/RDC handling.

    • Slice points exist, so the backend can pipeline without RTL edits.

    Check yourself When is the combinational bypass of this boundary acceptable?

    Inside one block, where the route stays short. Across partitions the registered slice carries the crossing.

    Check yourself Two physical partitions share one architectural reset. Is that inherently a boundary defect?

    No. Shared reset can be intentional for interacting logic. Each clock domain still needs appropriate release synchronization and reset-tree timing. Independent reset is required only by the architecture; if introduced, define isolation, outstanding-transaction cancellation/recovery and readiness before traffic resumes.

    Testbench

    A finite checker observes the bypass before capture, the sliced output after capture, and the reset difference. The two configurations are not equivalent: their latency and reset contracts differ.

    block_boundary.sv
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    `timescale 1ns/1ps
    module block_boundary #(
      parameter int DW = 32,
      parameter int USE_SLICE = 1
    ) (
      input  logic          clk,
      input  logic          rst_n,
      input  logic          valid_in,
      input  logic [DW-1:0] data_in,
      output logic          valid_out,
      output logic [DW-1:0] data_out
    );
      generate
        if (USE_SLICE) begin : g_slice
          always_ff @(posedge clk or negedge rst_n) begin
            if (!rst_n) begin
              valid_out <= 1'b0;
              data_out  <= '0;
            end else begin
              valid_out <= valid_in;
              data_out  <= data_in;
            end
          end
        end else begin : g_bypass
          always_comb begin
            valid_out = valid_in;
            data_out  = data_in;
          end
        end
      endgenerate
    endmodule
    
    • Keep partition crossings registered; use the bypass only inside one block.

    • USE_SLICE changes latency and reset behaviour, so carry both in the integration contract.

    • Physical partitions and reset domains need not coincide; independent resets need boundary recovery handling.

    How this was checked

    The checker observes the bypass before capture, the sliced output after capture, and the reset difference. It does not establish equivalence between the configurations, because their latency and reset contracts differ.

    • Interview: run a mock interview on this topic

    Related topics

    • Why RTL structure affects place and route

    Previous

    286 / 350

    Next: Waveform Debug Hub

    Up next

    Up nextWaveform Debug Hub

    Sign in to save progress

    Practice this lessonPrevious lessonReport an error

    See also

    • Why RTL structure affects place and route
    • Wire-length-aware micro-architecture
    clkrst_nin_validin_data01234c000c001c0020out_data_s001234c000c001c0020out_data_s10c000c001c0020
    The same boundary with USE_SLICE = 0 and USE_SLICE = 1: the bypass follows the input at once and passes it even in reset; the slice is one cycle behind and held at 0 in reset