digraph G { graph [rankdir=TB, bgcolor="transparent", pad=0.15, nodesep=0.30, ranksep=0.42, fontname="Noto Sans CJK SC"]; node [shape=box, style="rounded,filled", fontname="Noto Sans CJK SC", fontsize=10, color="#44546A", fillcolor="#F7F8FA", margin="0.13,0.08"]; edge [fontname="Noto Sans CJK SC", fontsize=9, color="#596777", arrowsize=0.7]; osc [label="50 MHz 外部时钟"]; pll [label="PLL\nlocked", fillcolor="#D9EAF7"]; cpu [label="cpu_clk 33.333 MHz\nCPU + AXI CPU 侧", fillcolor="#EAF2F8"]; sys [label="sys_clk 50 MHz\nCrossbar / DMA / FFT / matmul", fillcolor="#E8F3E8"]; mlk [label="mlkem_clk 76.923 MHz\nML-KEM 计算域", fillcolor="#F8E6EA"]; cdc_cpu [label="CPU↔SYS AXI CDC\n异步握手 / FIFO", shape=box, fillcolor="#FFF1D6"]; cdc_mlk [label="SYS↔ML-KEM CDC\n命令 / 数据 / 状态同步", shape=box, fillcolor="#FFF1D6"]; rst [label="各域复位同步器\n异步置位、同步释放", fillcolor="#F2F2F2"]; { rank=same; osc; pll; } { rank=same; cpu; cdc_cpu; sys; } { rank=same; cdc_mlk; mlk; } osc -> pll; pll -> cpu; pll -> sys; pll -> mlk; cpu -> cdc_cpu -> sys [dir=both]; sys -> cdc_mlk -> mlk [dir=both]; pll -> rst [label="locked"]; rst -> cpu [style=dashed, label="resetn", constraint=false]; rst -> sys [style=dashed, label="resetn", constraint=false]; rst -> mlk [style=dashed, label="resetn", constraint=false]; }