Kimi-K3

TSMC N3E
TSMC N3E / 4x XCD Tiles là hai thông số cốt lõi về tiến trình bán dẫn (Process Node) và kiến trúc đóng gói vi mạch (Chiplet Architecture) của con chip ASIC BKIT-K3:

1. TSMC N3E là gì?
- TSMC (Taiwan Semiconductor Manufacturing Company): Nhà máy gia công đúc chip bán dẫn số 1 thế giới.
- N3E (3-Nanometer Enhanced): Là tiến trình quang khắc bán dẫn 3nm thế hệ thứ 2 tối ưu của TSMC.
- Ý nghĩa công nghệ:
- Mật độ bóng bán dẫn (Transistor Density) cực cao: Giúp nhồi hàng chục tỷ transistor vào một diện tích silicon nhỏ.
- Hiệu năng & Tiết kiệm điện: Giảm ~32% điện năng tiêu thụ hoặc tăng ~18% hiệu năng xung nhịp (lên 1.8 – 2.0 GHz) so với thế hệ 5nm (N5).
- Độ hoàn thiện (Yield Rate) cao: Là tiến trình tiêu chuẩn công nghiệp hiện đại đang được dùng trên các chip AI đầu bảng (như Apple M4/A18, Nvidia Blackwell).
2. 4x XCD Tiles là gì?
- XCD viết tắt của Accelerator / eXtended Compute Die (Die/Phiến tính toán gia tốc).
- Kiến trúc Chiplet (Modular Multi-Die): Thay vì chế tạo 1 phiến silicon nguyên khối khổng lồ (Monolithic) rất dễ bị lỗi và đắt đỏ, con chip được chia thành 4 khối tính toán độc lập (Tile 0, 1, 2, 3) ghép nối trên cùng một đế vi mạch 2.5D (CoWoS).
Bên trong mỗi Tile (XCD) bao gồm:
- 16 Lõi Ma trận Systolic (MXU): Chuyên thực hiện phép nhân ma trận FP4/FP8 tốc độ cao.
- Bộ xử lý Vector SIMD (VPU): Xử lý các phép toán phi tuyến như RMSNorm, hàm kích hoạt SwiGLU/SiLU và RoPE.
- 64 MB bộ nhớ đệm L2 SRAM siêu tốc: Cho phép nạp dữ liệu với băng thông nội bộ lên tới 45 TB/s (4 Tile = 256 MB SRAM).
- Bộ định tuyến MoE: Tự động chuyển giao các token tới đúng chuyên gia (Expert).
💡 Lợi ích của thiết kế này đối với Kimi K3 2.8T:
| Lợi ích | Giải thích |
|---|---|
| Tối ưu chi phí sản xuất (Yield) | Chế tạo 4 die nhỏ có tỷ lệ thành công cao hơn rất nhiều so với 1 die lớn nguyên khối. |
| Băng thông siêu khủng | 4 XCD bao quanh một đế liên kết trung tâm (Base I/O Die), kết nối trực tiếp với 8 kênh nhớ HBM4 đạt 9.6 TB/s mỗi chip. |
| Tản nhiệt tốt hơn | Phân tán tải tính toán 550W đều khắp 4 góc của con chip, tránh hiện tượng quá nhiệt cục bộ (Hotspots). |

và

và

và

RTL của KV cache
// =============================================================================
// Module: kv_cache_engine
// Description: Hardware Paged-Attention DMA Reader & KV Cache Decompressor.
// Optimized for ultra-long context LLM inference (up to 1M tokens)
// with sub-cycle address translation and streaming FP4/FP8 decompression.
// =============================================================================
`timescale 1ns / 1ps
module kv_cache_engine #(
parameter PAGE_SIZE_TOKENS = 64, // 64 tokens per physical page block
parameter KV_CHANNELS = 16, // 16 parallel KV channels
parameter ADDR_WIDTH = 40, // 40-bit Physical HBM address (1 TB)
parameter DATA_WIDTH = 512 // 512-bit HBM memory bus per channel
)(
input logic clk,
input logic rst_n,
// Control & Command Interface
input logic req_valid,
input logic [15:0] req_seq_id,
input logic [19:0] req_page_id, // Virtual Page ID
input logic [5:0] req_token_idx, // Offset within page (0..63)
input logic [1:0] decompress_mode,// 00: FP4->FP8, 01: FP8 direct, 10: BF16
output logic req_ready,
// Page Table Translation Interface (SRAM LUT lookup)
output logic [19:0] pt_lookup_page_id,
input logic [ADDR_WIDTH-1:0] pt_phys_base_addr,
input logic pt_valid,
// Memory Controller / HBM AXI-like Read Interface
output logic mem_read_req,
output logic [ADDR_WIDTH-1:0] mem_read_addr,
output logic [7:0] mem_read_len, // Burst length
input logic mem_read_ready,
input logic mem_read_valid,
input logic [DATA_WIDTH-1:0] mem_read_data,
// Streaming Decompressed Output to Attention Core
output logic stream_valid,
output logic [KV_CHANNELS-1:0][15:0] stream_k_data, // 16 parallel key elements (BF16/FP8)
output logic [KV_CHANNELS-1:0][15:0] stream_v_data, // 16 parallel val elements (BF16/FP8)
input logic stream_ready
);
// =========================================================================
// 1. State Machine: Page Translation -> Memory Fetch -> Decompress & Stream
// =========================================================================
typedef enum logic [2:0] {
IDLE,
TRANSLATE,
FETCH_HBM,
DECOMPRESS,
STREAM_OUT
} state_t;
state_t state_r, state_n;
// Registers
logic [ADDR_WIDTH-1:0] current_phys_addr;
logic [19:0] page_id_r;
logic [5:0] token_idx_r;
logic [1:0] mode_r;
logic [DATA_WIDTH-1:0] buffer_r;
assign pt_lookup_page_id = page_id_r;
always_ff @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
state_r <= IDLE;
page_id_r <= '0;
token_idx_r <= '0;
mode_r <= '0;
current_phys_addr <= '0;
buffer_r <= '0;
end else begin
state_r <= state_n;
if (state_r == IDLE && req_valid) begin
page_id_r <= req_page_id;
token_idx_r <= req_token_idx;
mode_r <= decompress_mode;
end
if (state_r == TRANSLATE && pt_valid) begin
// Compute exact token physical byte offset:
// Base + token_idx * (latent_dim * bits / 8)
current_phys_addr <= pt_phys_base_addr + (token_idx_r << 6);
end
if (state_r == FETCH_HBM && mem_read_valid) begin
buffer_r <= mem_read_data;
end
end
end
// Next State Logic
always_comb begin
state_n = state_r;
req_ready = 1'b0;
mem_read_req = 1'b0;
mem_read_addr = current_phys_addr;
mem_read_len = 8'd4; // 4 * 64B = 256 bytes per KV block
stream_valid = 1'b0;
case (state_r)
IDLE: begin
req_ready = 1'b1;
if (req_valid) state_n = TRANSLATE;
end
TRANSLATE: begin
if (pt_valid) state_n = FETCH_HBM;
end
FETCH_HBM: begin
mem_read_req = 1'b1;
if (mem_read_ready && mem_read_valid) begin
state_n = DECOMPRESS;
end
end
DECOMPRESS: begin
state_n = STREAM_OUT;
end
STREAM_OUT: begin
stream_valid = 1'b1;
if (stream_ready) state_n = IDLE;
end
default: state_n = IDLE;
endcase
end
// =========================================================================
// 2. Hardware Decompression Logic (FP4 E2M1 -> 16-bit BF16/FP8 representation)
// =========================================================================
generate
for (genvar i = 0; i < KV_CHANNELS; i++) begin : gen_decompress
// Extract 4-bit nibbles from buffer_r
logic [3:0] k_nibble = buffer_r[i*8 +: 4];
logic [3:0] v_nibble = buffer_r[i*8+4 +: 4];
// Expand 4-bit FP4 into 16-bit format:
// {sign, exp[4:0], mantissa[9:0]}
assign stream_k_data[i] = {k_nibble[3], 5'b10000 + {3'b0, k_nibble[2:1]}, k_nibble[0], 9'b0};
assign stream_v_data[i] = {v_nibble[3], 5'b10000 + {3'b0, v_nibble[2:1]}, v_nibble[0], 9'b0};
end
endgenerate
endmodule
RTL KV cache
RTL (Register Transfer Level) của KV cache là mô hình thiết kế phần cứng (bằng các ngôn ngữ như Verilog hoặc SystemVerilog) dùng để hiện thực hóa cơ chế lưu trữ và quản lý ma trận Key-Value (K, V) trên các vi mạch tăng tốc AI (như FPGA hoặc ASIC).
Các thành phần chính trong RTL của KV Cache
- Hệ thống ngân hàng bộ nhớ (Memory Banks):
- Chia bộ nhớ (thường là SRAM hoặc eDRAM) thành nhiều bank độc lập (ví dụ: chia thành các nhóm Key MSB, Key LSB, Value MSB, Value LSB).
- Giúp các luồng đọc/ghi dữ liệu diễn ra song song mà không bị xung đột địa chỉ (bank conflict).
Đường dữ liệu ống dẫn (Pipelined Datapath):
- Thiết kế các tầng đệm pipeline (nhiều chu kỳ xung nhịp) để truyền dữ liệu K, V từ bộ nhớ đệm thẳng đến các khối tính toán ma trận (Systolic Array).
- Đảm bảo băng thông cao và độ trễ thấp cho quá trình giải mã tự hồi quy (autoregressive decoding).
Bộ điều khiển thay thế/giải phóng (Eviction/Replacement Controller):
- Mạch logic tuần tự theo dõi số lượng token đang lưu trữ.
- Quyết định thời điểm xóa hoặc thay thế các token cũ khi dung lượng bộ nhớ đệm trên chip đã đầy (dựa trên chính sách như LRU hoặc nhận diện token quan trọng).
- Giao tiếp ngoại vi (Interface & DMA):
- Tích hợp các chuẩn giao tiếp phần cứng như AXI Interconnect hoặc CXL (Compute Express Link) để trao đổi dữ liệu hiệu quả với RAM hệ thống hoặc GPU. [1]
- Dùng ngôn ngữ Verilog, SystemVerilog hay HLS – High-Level Synthesis.
- Mục tiêu triển khai trên TSMC 3nm node.

Nguồn: TSMC
Thiết kế vật lý và Bố cục silicon
Thiết kế vật lý của phần tính toán nhân ma trận cốt lõi (GEMM Engine) chạy định dạng NVFP4/FP8
VERSION 5.8 ;
BUSBITCHARS "[]" ;
DIVIDERCHAR "/" ;
MACRO SYSTOLIC_MXU_32X32
CLASS BLOCK ;
SIZE 3800.000 BY 3815.000 ;
SYMMETRY X Y ;
ORIGIN 0.000 0.000 ;
PIN VDD_CORE
DIRECTION INOUT ;
USE POWER ;
PORT
LAYER M5 ;
RECT 0.000 0.000 3800.000 20.000 ;
RECT 0.000 3795.000 3800.000 3815.000 ;
END
END VDD_CORE
PIN VSS
DIRECTION INOUT ;
USE GROUND ;
PORT
LAYER M5 ;
RECT 0.000 20.000 3800.000 40.000 ;
RECT 0.000 3775.000 3800.000 3795.000 ;
END
END VSS
PIN clk
DIRECTION INPUT ;
USE SIGNAL ;
PORT
LAYER M4 ;
RECT 1890.000 10.000 1910.000 30.000 ;
END
END clk
PIN rst_n
DIRECTION INPUT ;
USE SIGNAL ;
PORT
LAYER M4 ;
RECT 1850.000 10.000 1870.000 30.000 ;
END
END rst_n
PIN weight_in[127:0]
DIRECTION INPUT ;
USE SIGNAL ;
PORT
LAYER M4 ;
RECT 100.000 3790.000 3700.000 3810.000 ;
END
END weight_in[127:0]
PIN act_in[127:0]
DIRECTION INPUT ;
USE SIGNAL ;
PORT
LAYER M3 ;
RECT 10.000 100.000 30.000 3700.000 ;
END
END act_in[127:0]
PIN accum_out[1023:0]
DIRECTION OUTPUT ;
USE SIGNAL ;
PORT
LAYER M4 ;
RECT 100.000 10.000 3700.000 30.000 ;
END
END accum_out[1023:0]
OBS
LAYER M1 ;
RECT 0.000 0.000 3800.000 3815.000 ;
LAYER M2 ;
RECT 0.000 0.000 3800.000 3815.000 ;
LAYER M3 ;
RECT 0.000 0.000 3800.000 3815.000 ;
LAYER M4 ;
RECT 0.000 0.000 3800.000 3815.000 ;
END
END SYSTOLIC_MXU_32X32
END LIBRARY
FET

Toàn bộ hệ thống

Tham khảo
https://www.tsmc.com/english/dedicatedFoundry/technology/logic/l_3nm
https://docs.nvidia.com/deeplearning/transformer-engine/user-guide/api/c/gemm.html
Kết luận
Con chip này sẽ bị cháy trong khi thử nghiệm. Các kỹ sư TSMC sẽ từ chối đưa vào máy quang khắc. Nguyên nhân là do kiểm soát nhiệt độ ở cấp độ nanomet kiểu này cực kỳ khó. Và 1 con chíp hiện tại, tôi nghĩ không có ít hơn 10 layer theo chiều 3D. Bài viết mang tính chất ôn lại kiến thức của chủ tịch BKIT.VN mà thôi.














