RTL Studio Open IDE

Arbiters

Grant-Hold Arbiter (4 req) — L2 Upgrade

4-request Grant-Hold Arbiter with maskable hold and fixed priority fallback.

About this block

Simulate it in the Verilog IDE

Easyverilogsimsyn

Grant-Hold Arbiter (4 req) — L2 Upgrade is a Verilog reference block in the Arbiters catalog. Round-robin, fixed-priority, and grant-based resource arbiters. Marked Easy: a small block you can read, simulate, and synthesize in one sitting.

This module implements a 4-request Grant-Hold Arbiter with fixed priority fallback. It supports maskable requests to ignore specific lines and a hold signal to freeze the current grant output. Priority is fixed, with request 0 having the highest precedence.

This IP provides a robust solution for 4-way arbitration with masking and hold capabilities.

It is suitable for L2 interconnects requiring simple priority-based access control.

  1. Choose Open in IDE. RTL Studio loads the packaged workspace for Grant-Hold Arbiter (4 req) — L2 Upgrade.
  2. Read the Verilog module in the editor. The catalog line for this block: 4-request Grant-Hold Arbiter with maskable hold and fixed priority fallback.
  3. Run the packaged testbench with the in-browser Verilator simulator, then open the VCD in the waveform viewer.
  4. Run Yosys in the same IDE for a generic netlist. Sky130 liberty mapping is a separate Pro library option.

RTL Studio is the Verilog simulator and IDE around this block: Slang lint, Verilator, VCD waveforms, and Yosys, in the browser. Simulation guide · Yosys guide.

Architecture

The arbiter uses a synchronous state machine. It evaluates masked requests in priority order. If the hold signal is active, the grant remains unchanged. Otherwise, the highest priority active request is granted.

Ports

Port NameDirectionWidthDescription
clkInput1Clock input
rst_nInput1Active-low reset input
reqInput4Request signals [3:0]
maskInput4Mask signals [3:0] (1=enabled, 0=disabled)
holdInput1Hold signal to freeze grant
grantOutput4Granted request [3:0]

Verification

The testbench covers seven key scenarios. Basic priority selection is verified first. Masking logic is tested to ensure ignored requests are skipped. Fixed priority fallback is confirmed when high-priority requests are inactive. Hold functionality is validated by checking state retention. Hold release behavior is tested with new requests. Edge cases like no requests and all masked requests are covered.

Test CaseDescriptionExpected Result
TC1Basic PriorityGrant 0 when req[0] and req[1] active
TC2Masked RequestGrant 1 when req[0] is masked
TC3Fixed Priority FallbackGrant 2 when req[0] and req[1] inactive
TC4aPre-Hold GrantGrant 1 before hold assertion
TC4bHold Maintains GrantGrant 1 remains during hold
TC5Hold ReleaseGrant 0 after hold release
TC6No RequestsGrant 0 when no requests active
TC7All MaskedGrant 0 when all requests masked

More in Arbiters

All Arbiters blocks