Lộ trình học
4 track, 41 module, 241 bài; 116 bài đã có nội dung. Một bài đủ tiên quyết khi mọi module và bài cần học trước đã hoàn thành. Bài chưa có nội dung chưa thể hoàn thành, nên các bài phụ thuộc vào nó vẫn hiện "chưa đủ tiên quyết".
- Track A: Digital Fundamentals & RTL Design Biểu diễn số, logic tổ hợp và tuần tự, FSM, Verilog, ngữ nghĩa mô phỏng, RTL cho synthesis, timing và low power.
- Track B: SystemVerilog Kiểu dữ liệu, interface, OOP, randomization, concurrency, SVA và functional coverage.
- Track C: Design Verification & UVM Verification plan, testbench nhiều lớp, debug và coverage, UVM từ nền tảng tới RAL và sign-off.
- Track D: Hardware Protocols APB, AHB-Lite, AXI, UART, SPI, I2C — từ spec tới RTL, assertion, coverage và UVM agent. Nội dung đang chờ tài liệu spec chính thức.
Track A: Digital Fundamentals & RTL Design
A0: Bức tranh toàn cảnh
Không yêu cầu tiên quyết.
- Từ yêu cầu đến chip: ASIC, FPGA và vai trò RTL/DVĐang tải tiến độ
- Các mức trừu tượng: cùng chức năng, khác thông tin nhìn thấyĐang tải tiến độ
- Simulator, waveform, lint và synthesis: mỗi công cụ trả lời một câu hỏiĐang tải tiến độ
- Lộ trình RTL/DV: học nền tảng chung rồi chọn chiều đi sâuĐang tải tiến độ
AX: CMOS & devicetự chọn
Cần học trước: A2 Logic tổ hợp.
- Bán dẫn, PN junctiontự chọnĐang tải tiến độ
- MOSFET, Vth, NMOS/PMOS, leakagetự chọnĐang tải tiến độ
- Inverter/NAND/NOR, AOI/OAI, sizingtự chọnĐang tải tiến độ
- Dynamic/static powertự chọnĐang tải tiến độ
- RC wire delay, fanout, noise margin, crosstalk, IR droptự chọnĐang tải tiến độ
- 6T SRAM, DRAM refreshtự chọnĐang tải tiến độ
A1: Biểu diễn số
Cần học trước: A0 Bức tranh toàn cảnh.
- Binary, hex và BCD: cùng bit, khác cách biểu diễnĐang tải tiến độ
- Signed, complement và overflow: đọc đúng ý nghĩa của bitĐang tải tiến độ
- Gray code: một bit đổi ở mỗi bước kề nhauĐang tải tiến độ
- Fixed-point: thang đo, làm tròn và xử lý trànĐang tải tiến độ
- Floating point: trường bit, lớp giá trị và sai số làm trònĐang tải tiến độ
- ASCII, Unicode và UTF-8: đếm byte hay đếm ký tự?tự chọnĐang tải tiến độ
A2: Logic tổ hợp
Cần học trước: A1 Biểu diễn số.
- Boolean: từ yêu cầu đến bảng chân trịĐang tải tiến độ
- K-map, SOP và POS: gộp các hàng chỉ khác một biếnĐang tải tiến độ
- NAND và NOR: dựng các phép logic từ một loại cổngĐang tải tiến độ
- MUX và DEMUX: chọn đường dữ liệu, không giữ dữ liệuĐang tải tiến độ
- Decoder và encoder: mã số, one-hot và quyền ưu tiênĐang tải tiến độ
- Comparator và parity: thứ tự giá trị khác kiểm lỗi bitĐang tải tiến độ
- Hazard và glitch: bảng chân trị đúng vẫn có thể phát xungĐang tải tiến độ
A3: Mạch số học
Cần học trước: A2 Logic tổ hợp.
- Bộ cộng và cộng-trừ: từ một cột bit tới ripple và lookaheadĐang tải tiến độ
- Nhân binary: partial product, Booth và cây carry-saveĐang tải tiến độ
- ALU: chọn phép toán và giữ đúng hợp đồng cờĐang tải tiến độ
A4: Tuần tự & timing
Cần học trước: A1 Biểu diễn số.
- SR/D latch, D/JK/T FFĐang tải tiến độ
- Propagation delay & critical pathĐang tải tiến độ
- Setup/hold, clock-to-QĐang tải tiến độ
- Clock tree & skewĐang tải tiến độ
- Metastability, synchronizer, MTBFĐang tải tiến độ
- Sync/async reset, reset synchronizer, recovery/removalĐang tải tiến độ
- Counter: sync/async, mod-N, ring, Johnson, grayĐang tải tiến độ
- Shift register, universal SR, LFSRĐang tải tiến độ
- Edge detector, debounceĐang tải tiến độ
A5: FSM
Cần học trước: A4 Tuần tự & timing.
- FSM Moore và Mealy: đầu ra phụ thuộc vào đâu?Đang tải tiến độ
- Binary/one-hot/grayĐang tải tiến độ
- Sequence/pattern detector (overlap/non-overlap)Đang tải tiến độ
- 1/2/3-alwaysĐang tải tiến độ
A6: Verilog cấu trúc
Cần học trước: A2 Logic tổ hợp, A4 Tuần tự & timing.
- Đọc Verilog từ token đến bốn trạng thái 0/1/X/ZĐang tải tiến độ
- Net và variable: ai drive tín hiệu, ai giữ giá trị?Đang tải tiến độ
- Module và instance: nối hai bộ cộng mà không nhầm cổngĐang tải tiến độ
- Độ rộng và signedness: cùng bit, khác kết quảĐang tải tiến độ
- Mảng và bộ nhớ: chọn word, chọn bit, chọn thời điểmĐang tải tiến độ
- Gate, dataflow và behavioral: khi nào ba mô tả tương đương?Đang tải tiến độ
- Switch, UDP và strength: đọc mô hình mô phỏng thấp hơn RTLtự chọnĐang tải tiến độ
- Parameter và generate: cấu hình phần cứng trước khi chạyĐang tải tiến độ
- Scope và hierarchy: cùng tên value, khác instanceĐang tải tiến độ
A7: Hành vi & ngữ nghĩa mô phỏng
Cần học trước: A6 Verilog cấu trúc.
- Initial, always và fork: đọc nhiều process cùng chạyĐang tải tiến độ
- Assignment và force/release: bỏ ép chưa chắc trở về giá trị cũĐang tải tiến độ
- Blocking vs non-blocking: vì sao shift register 'mất tầng'Đang tải tiến độ
- Event scheduling: cùng timestamp chưa chắc cùng giá trịĐang tải tiến độ
- Race conditions: một lần chạy đúng chưa đủĐang tải tiến độ
- if, case và loops: chọn nhánh đúng khi có X/ZĐang tải tiến độ
- Timing control: lấy dữ liệu lúc nào, cập nhật lúc nào?Đang tải tiến độ
- Time unit, precision và scope: cùng #1.26 không cùng thời điểmĐang tải tiến độ
- Tasks và functions: tái sử dụng code mà không chia sẻ nhầm stateĐang tải tiến độ
- System tasks và functions: log đúng, số đúng, kết thúc đúngĐang tải tiến độ
- Compiler directives: macro tồn tại khác tín hiệu bằng1Đang tải tiến độ
- Testbench tự kiểm: clock, oracle và đường thất bạiĐang tải tiến độ
- File I/O và VCD: dữ liệu đọc được phải được kiểmĐang tải tiến độ
A8: RTL coding cho synthesis
Cần học trước: A7 Hành vi & ngữ nghĩa mô phỏng, A5 FSM.
- Synthesizable subset: simulator hiểu chưa đủ để có phần cứngĐang tải tiến độ
- Coding style: chức năng giống nhau, PPA phải đo riêngĐang tải tiến độ
- Latch inference: đường không gán cũng mô tả phần cứngĐang tải tiến độ
- Case decode: full coverage không phải lời hứa one-hotĐang tải tiến độ
- Coding guidelines: biến quy ước thành hợp đồng kiểm đượcĐang tải tiến độ
- RAM, ROM và LIFO: phần tử nhớ phải có hợp đồng đọcĐang tải tiến độ
- Sync FIFO: phân biệt request, acceptance và dữ liệu trả vềĐang tải tiến độ
- CDC: đồng bộ level, giữ payload và hiểu giới hạn của GrayĐang tải tiến độ
- Lint: hiểu warning trước khi quyết định sửa hay giữĐang tải tiến độ
- Simulation và synthesis: sensitivity thiếu có thể biến mất khỏi netlistĐang tải tiến độ
A9: Synthesis & timing
Cần học trước: A8 RTL coding cho synthesis.
- Synthesis fundamentals, Yosys flow, tech mapping, scriptsĐang tải tiến độ
- PDK, standard cells, Liberty, corners, delay tablesĐang tải tiến độ
- Đọc kết quả & lỗi synthesis thường gặpĐang tải tiến độ
- STA fundamentals, slackĐang tải tiến độ
- SDCĐang tải tiến độ
- Multi-corner & timing closureĐang tải tiến độ
- Timing checks, specify, SDF back-annotationĐang tải tiến độ
- Pipelining, PPAĐang tải tiến độ
- DFT (scan) tổng quanĐang tải tiến độ
A10: Low power & UPF
Cần học trước: A9 Synthesis & timing.
- Clock/power gating, multi-voltageĐang tải tiến độ
- Power domain, supply net/set, power statesĐang tải tiến độ
- Shutoff, retention, isolation, level shifter, repeater, always-onĐang tải tiến độ
- Hierarchical UPFĐang tải tiến độ
- Power-aware simulation, verification, debugĐang tải tiến độ
- Power-aware synthesis & implementationtự chọnĐang tải tiến độ
Track B: SystemVerilog
B1: Data types
Cần học trước: A7 Hành vi & ngữ nghĩa mô phỏng.
- Logic, bit và int: đừng làm mất X trước khi checker nhìn thấyĐang tải tiến độ
- Enum và typedef: tên kiểu không thay cho kiểm dữ liệuĐang tải tiến độ
- Struct và union: gom field hay nhìn lại cùng một nhóm bitĐang tải tiến độ
- String trong testbench: chỉ số byte, bản sao và lỗi parse bị cheĐang tải tiến độ
- Casting: đổi biểu diễn khác với kiểm giá trị có được phépĐang tải tiến độ
B2: Arrays & collections
Cần học trước: B1 Data types.
- Packed và unpacked: cùng số bit chưa phải cùng cách đánh chỉ sốĐang tải tiến độ
- Dynamic array: resize có giữ dữ liệu hay tạo lại từ đầuĐang tải tiến độ
- Associative array: key tồn tại, giá trị bằng0 và thứ tự duyệtĐang tải tiến độ
- Queue: thao tác đầu/cuối và thứ tự dữ liệu cần được kiểmĐang tải tiến độ
- Array methods: tìm value, tìm index và cộng đúng widthĐang tải tiến độ
- Streaming: đảo byte khác đảo bit và khác shiftĐang tải tiến độ
- Chọn collection cho scoreboard: ordering, ID và dữ liệu còn thiếuĐang tải tiến độ
B3: Procedural & packaging
Cần học trước: B1 Data types.
- Always_comb, always_ff và always_latch: nói rõ phần cứng định mô tảĐang tải tiến độ
- Unique và priority: kiểm điều kiện chọn nhánh, không sửa input giúp bạnĐang tải tiến độ
- Vòng lặp SV: foreach theo shape, break và continue theo điểm đặtĐang tải tiến độ
- FSM với enum: chuyển trạng thái theo hợp đồng và kiểm không làm mất XĐang tải tiến độ
- Subroutine SV: ref nhìn thấy ngay, output chép khi trả vềĐang tải tiến độ
- Package và $unit: dùng chung định nghĩa mà không nhầm scopeĐang tải tiến độ
- Named block và final: thoát đúng phạm vi, kiểm đúng lúc kết thúcĐang tải tiến độ
B4: Interface & TB timing
Cần học trước: B3 Procedural & packaging, A7.scheduling.
- Interface và modport: gom tín hiệu, giữ rõ ai được ghiĐang tải tiến độ
- Interface nâng cao: tham số, nhiều lane và kết nối theo tênĐang tải tiến độ
- Clocking block và skew: đọc mẫu nào, lái tín hiệu lúc nào?Đang tải tiến độ
- Virtual interface: class truy cập đúng instance, đổi binding có kiểm traĐang tải tiến độ
- Program block: hiểu Reactive và giới hạn bằng chứng của simulatorĐang tải tiến độ
- SV scheduling: một time slot có thể cần nhiều lượt Active và NBAĐang tải tiến độ
- Plusargs và file I/O: kiểm cấu hình trước khi dùng dữ liệuĐang tải tiến độ
B5: OOP
Cần học trước: B3 Procedural & packaging.
- Class handle và object: hai tên có thể cùng sửa một transactionĐang tải tiến độ
- Constructor: tạo object ở trạng thái dùng được, không chỉ gọi newĐang tải tiến độ
- Static, this và const: xác định thứ gì dùng chung và thứ gì bị giữ cố địnhĐang tải tiến độ
- Shallow và deep copy: độc lập ở tầng nào của transaction?Đang tải tiến độ
- Inheritance và super: dùng lại hành vi mà vẫn thấy phần baseĐang tải tiến độ
- Virtual dispatch và cast: kiểu handle khác với kiểu objectĐang tải tiến độ
- Abstract class và pure virtual: hợp đồng chung cho nhiều implementationĐang tải tiến độ
- Access control, extern và forward class: tổ chức API có ranh giớiĐang tải tiến độ
- Parameterized class: mỗi specialization có type và trạng thái static riêngĐang tải tiến độ
- Class và struct: copy giá trị không tự clone object nằm trong fieldĐang tải tiến độ
- Callback: thay hành vi bằng object đăng ký và kiểm đúng thứ tự gọiĐang tải tiến độ
B6: Randomization
Cần học trước: B5 OOP.
- Rand và randc: chu kỳ nhỏ khác với một mẫu ngẫu nhiên có thể lặpĐang tải tiến độ
- Randomize và constraints: inside, dist, implication, inline withĐang tải tiến độ
- Implication, if-else và foreach: ràng buộc quan hệ thay vì chạy lệnh gánĐang tải tiến độ
- Solve-before: cùng tập nghiệm, khác cách chọn mẫuĐang tải tiến độ
- Soft, inline và mode: mặc định khác với luật bắt buộcĐang tải tiến độ
- Unique constraint: khác nhau trong một mẫu, không phải qua mọi lần gọiĐang tải tiến độ
- Pre/post_randomize và randcase: thứ tự, trạng thái và trọng sốĐang tải tiến độ
- Array randomization: kiểm shape, phần tử và tổng riêng biệtĐang tải tiến độ
- Memory partition constraints: biên, chồng lấp và độ rộngĐang tải tiến độ
- Debug randomization: khoanh vùng xung đột trước khi đổi seedĐang tải tiến độ
B7: Concurrency & IPC
Cần học trước: B4 Interface & TB timing, B5 OOP.
- Fork/join: đợi kết quả, thu dọn nhánh và giữ đúng phạm vi hủyĐang tải tiến độ
- Process handle: điều khiển đúng thread và giữ riêng giới hạn await/suspendĐang tải tiến độ
- Named event: notification, triggered state và các case tool chưa hỗ trợĐang tải tiến độ
- Semaphore: đặt trước số key và kiểm cân bằng resourceĐang tải tiến độ
- Mailbox: backpressure, FIFO và identity của transaction được gửiĐang tải tiến độ
B8: SVA
Cần học trước: B4 Interface & TB timing, A7.scheduling.
- Assertion: kiểm gì, kiểm lúc nào và thế nào mới là bằng chứng?Đang tải tiến độ
- SVA sampling: property thấy mẫu trước cạnh, log có thể thấy giá trị mớiĐang tải tiến độ
- SVA sequence: đếm tick, cửa sổ match và repetition trước khi viết propertyĐang tải tiến độ
- Implication |-> và |=>: mỗi tick một attemptĐang tải tiến độ
- SVA operators: cùng start, cùng endpoint hay giữ điều kiện suốt sequence?Đang tải tiến độ
- Hàm sampled: bit nào đổi, lịch sử ở clock nào và log đang thấy gì?Đang tải tiến độ
- Local variables trong SVA: giữ dữ liệu riêng cho các attempt chồng lấnĐang tải tiến độ
- Disable iff: hủy nghĩa vụ đang chờ và phân biệt với gatingĐang tải tiến độ
- Sequence có tham số: tái sử dụng mẫu thời gian, hiểu endpoint và đệ quyĐang tải tiến độ
- Multiclock SVA: quan hệ giữa các clockĐang tải tiến độ
- Bind checker: đúng target, đúng tham số và đúng tín hiệuĐang tải tiến độ
- assume/cover/expectĐang tải tiến độ
B9: Functional coverage
Cần học trước: B5 OOP, B4 Interface & TB timing.
- Code coverage và functional coverageĐang tải tiến độ
- Covergroup và coverpoint: tổ chức việc lấy mẫuĐang tải tiến độ
- explicit/ignore/illegalĐang tải tiến độ
- transition binsĐang tải tiến độ
- Cross coverage: kết hợp các điểm quan sátĐang tải tiến độ
- options, methods, system tasksĐang tải tiến độ
- Coverage closure: tìm và đóng lỗ hổng kiểm chứngĐang tải tiến độ
B10: DPI & misc
Cần học trước: B3 Procedural & packaging.
- DPI-C: kết nối SystemVerilog với C/C++Đang tải tiến độ
- Macro, include và phạm vi biên dịchĐang tải tiến độ
Track C: Design Verification & UVM
- Vì sao verify; verification vs validationĐang tải tiến độ
- Các giai đoạn & kỹ thuật (directed, CRV, ABV, formal, CDV)Đang tải tiến độ
- Đọc DUT spec, features & corner casesĐang tải tiến độ
- Verification plan, pass/fail criteriaĐang tải tiến độ
- Reference model & checkingĐang tải tiến độ
C2: Testbench (không UVM)
Cần học trước: C1 Nền tảng verification, B5 OOP, B6 Randomization, B7 Concurrency & IPC.
- Linear → file-based → random → self-checkingĐang tải tiến độ
- Layered TBĐang tải tiến độ
- TB cho FIFOĐang tải tiến độ
- Kết thúc test khi các nghĩa vụ đã hoàn tấtĐang tải tiến độ
C3: Debug & coverage (công cụ)
Cần học trước: C2 Testbench (không UVM).
- RTL simulation hoạt động thế nàoĐang tải tiến độ
- Đọc waveform, display hiệu quảĐang tải tiến độ
- Phương pháp debugĐang tải tiến độ
- statement/block/expression/toggle/assertion, unreachableĐang tải tiến độ
C4: UVM foundations
Cần học trước: C2 Testbench (không UVM).
- Vì sao dùng UVM và khi nào cần dùng?Đang tải tiến độ
- Cài UVM và chạy test đầu tiênĐang tải tiến độ
- object vs component, uvm_rootĐang tải tiến độ
- print/copy/clone/compare/pack, printer/comparerĐang tải tiến độ
- utility/field macrosĐang tải tiến độ
- factory & overridesĐang tải tiến độ
- UVM reporting: mức độ, ID và chính sách báo lỗiĐang tải tiến độ
- Ghi transaction để truy vết và debugtự chọnĐang tải tiến độ
C5: Phases & objections
Cần học trước: C4 UVM foundations.
- UVM phases: từ xây dựng đến kết thúc testĐang tải tiến độ
- drain timeĐang tải tiến độ
- heartbeatĐang tải tiến độ
- user-defined phases, phase jumping, domainsĐang tải tiến độ
C6: Configuration
Cần học trước: C5 Phases & objections, B4.vif.
- Config DB: truyền cấu hình theo phạm viĐang tải tiến độ
- Resource DB: tra cứu và quản lý tài nguyênĐang tải tiến độ
- Truyền virtual interface tới các componentĐang tải tiến độ
- Configuration object: gom cấu hình có cấu trúcĐang tải tiến độ
- parameterized UVM classesĐang tải tiến độ
C7: First UVM testbench
Cần học trước: C6 Configuration.
- Sequence item: mô tả một transactionĐang tải tiến độ
- UVM driver: bắt tay với sequencerĐang tải tiến độ
- Monitor: quan sát và dựng lại transactionĐang tải tiến độ
- Sequencer và sequence: tạo luồng stimulusĐang tải tiến độ
- active/passiveĐang tải tiến độ
- Scoreboard: đối chiếu kết quả với mô hình tham chiếuĐang tải tiến độ
- Subscriber: nhận và xử lý transaction quan sát đượcĐang tải tiến độ
- Ghép environment, test và topĐang tải tiến độ
- ghép TB đầy đủĐang tải tiến độ
C8: Sequences nâng cao
Cần học trước: C7 First UVM testbench.
- get_next_item/item_done, get/put, responseĐang tải tiến độ
- start() vs uvm_doĐang tải tiến độ
- Cấu hình sequence và điều khiển việc chạyĐang tải tiến độ
- Virtual sequence: phối hợp nhiều luồng stimulusĐang tải tiến độ
- Arbitration, lock và grab trên sequencerĐang tải tiến độ
- sequence libraryĐang tải tiến độ
- pipelined driver, reactive sequenceĐang tải tiến độ
- Interrupt và sequence layeringĐang tải tiến độ
C9: TLM
Cần học trước: C7 First UVM testbench.
- put/get blocking/nonblocking, port/export/impĐang tải tiến độ
- analysis port, _decl macrosĐang tải tiến độ
- TLM FIFO: đệm và tách nhịp giữa componentĐang tải tiến độ
- sockets, generic payloadĐang tải tiến độ
C10: Checking & coverage trong UVM
Cần học trước: C9 TLM, B8 SVA, B9 Functional coverage.
- Kiến trúc scoreboard và dữ liệu đang chờĐang tải tiến độ
- Tích hợp SVA vào môi trường UVMĐang tải tiến độ
- Functional coverage trong môi trường UVMĐang tải tiến độ
- Vì sao cần Register Abstraction Layer?Đang tải tiến độ
- Xây register model: block, register, field và mapĐang tải tiến độ
- adapter, predictorĐang tải tiến độ
- frontdoor/backdoor, HDL accessĐang tải tiến độ
- Các sequence kiểm thanh ghi có sẵnĐang tải tiến độ
- memories, special registers, mem_mamĐang tải tiến độ
- Coverage của register modelĐang tải tiến độ
- callbacks, event/pool, barrierĐang tải tiến độ
- singleton, uvm_pool/queue, cmdlineĐang tải tiến độ
- project organization, block→integration, reusable VCĐang tải tiến độ
- regression, seedĐang tải tiến độ
- debug lỗi UVM thường gặpĐang tải tiến độ
- bug lifecycle, metrics, sign-off, tapeout checklistĐang tải tiến độ
- Post-silicon validation và liên hệ với pre-silicon DVtự chọnĐang tải tiến độ
- design vs DV, làm việc trong team tapeouttự chọnĐang tải tiến độ
Track D: Hardware Protocols
D1: APB (bài mẫu đầy đủ)
Cần học trước: A4 Tuần tự & timing, A5 FSM.
- Apb overviewĐang tải tiến độ
- Apb signalsĐang tải tiến độ
- APB: IDLE → SETUP → ACCESSĐang tải tiến độ
- write/read, wait statesĐang tải tiến độ
- Apb errorĐang tải tiến độ
- PPROT, PSTRBĐang tải tiến độ
- RME, wake-up, user, parity (mở rộng)Đang tải tiến độ
- Apb rtlĐang tải tiến độ
- Apb svaĐang tải tiến độ
- Apb covĐang tải tiến độ
- Apb uvmĐang tải tiến độ
- Apb bugsĐang tải tiến độ
- Apb iqĐang tải tiến độ
D2: AHB-Lite
Cần học trước: D1 APB (bài mẫu đầy đủ).
D3: AXI4 / AXI4-Lite
Cần học trước: D2 AHB-Lite.
D4: UART
Cần học trước: A5 FSM, A8 RTL coding cho synthesis.
D5: SPI
Cần học trước: A5 FSM, A8 RTL coding cho synthesis.
D7: Dự án tích hợp (sau MVP)
Cần học trước: D1 APB (bài mẫu đầy đủ), D4 UART, D5 SPI, A9 Synthesis & timing.