Packet Chaining: Efficient Single-Cycle Allocation for On-Chip Networks