When control meets data
On a single carrier the UE can't transmit a PUCCH and a PUSCH at the same time. So when UCI (scheduled on PUCCH) overlaps a PUSCH in the slot — and the preparation timeline allows it — the UCI is piggybacked onto the PUSCH. HARQ-ACK and CSI are encoded separately and mapped into reserved REs; the UL-SCH data is rate-matched around them.
Three payloads, strict priority
HARQ-ACK P1
Highest priority, placed right after the front-loaded DM-RS for the best channel estimate. ≤2 bits puncture data; >2 bits rate-match. Adds an 11-bit CRC if OACK > 11.
CSI part 1 P2
Fixed-size (RI, CQI, wideband PMI). Rate-matched into PUSCH after the HARQ-ACK region. Its size tells the decoder how big part 2 is.
CSI part 2 P3
Variable-size (subband PMI/CQI). Lowest priority → dropped first if the α cap leaves no room.
Beta offsets
Each UCI type has a βPUSCHoffset — a multiplier that buys it more coded REs (more protection) at the cost of data REs. The DCI/RRC selects an index into the beta-offset tables (TS 38.213 Table 9.3-1/2). Pick values and watch them feed the Q′ formula.
scaling in UCI-OnPUSCH), protecting a minimum data rate.Q′ — how many REs each UCI gets
This is the actual TS 38.212 §6.3.2.4 equation. The number of coded modulation symbols Q′ grows with the payload and its beta offset, shrinks with the amount of UL-SCH data, and is hard-capped by α. Move the inputs and the live computation updates.
Placement order
The Q′ values become REs on the PUSCH grid in strict order: HARQ-ACK first (just after the front-loaded DM-RS), then CSI-1, then CSI-2, with UL-SCH data rate-matched around all of them. Watch the regions fill as you change the inputs above.
Puncture vs rate-match
HARQ-ACK can arrive late (after PUSCH is encoded), so it gets special handling. For ≤2 bits the UE punctures — reserved REs are overwritten and the decoder treats those data bits as erasures, keeping a fixed predictable position. For >2 bits the data is properly rate-matched around reserved REs, so no data bits are lost.
Puncture (≤ 2 bits)
Reserved REs overwritten after encoding; the rest of the codeword was sized as if they existed. Predictable, low-latency HARQ-ACK position.
Rate-match (> 2 bits)
UL-SCH encoding accounts for the reserved REs up-front, so no data bits are lost — the effective data code rate just rises slightly.
UCI on PUSCH without UL-SCH
A DCI can schedule a PUSCH that carries only control — e.g. a triggered aperiodic CSI report with no data. Then there is no UL-SCH to rate-match around; the whole PUSCH is filled by CSI (and HARQ-ACK) under their own beta offsets, and a slightly different Q′ form applies (the UL-SCH ratio term is replaced).