🎛️ 參數旋鈕
拖動資料速率掃過 10000→16000(每 400 一階),調整下列旋鈕觀察眼圖與訓練階段的成敗變化。旋鈕範圍與 Mode Register 皆錨定 JESD79-5D 原文。
1 UI = 83.3 ps
🎯 DFE 4-Tap 判決回授等化MR113-116
ℹ
DRAM on-die 的 4 個 tap 各消除一個 post-cursor 的 ISI。每個 tap 有一個隨速率變動的「最佳偏置」,越接近眼開越大。範圍錨定 Table 138;步階 ~5 mV,符號位 OP[6]。
🧩 為什麼調 DFE 需要韌體配合?—— 三層分工
🧠
DRAM on-die DFE硬體在記憶體裡
實體等化電路長在 DRAM 晶片內的 DQ 接收端(1/2/4-way interleave 4-tap 架構,§4.31)。它不會自己決定係數,只是忠實套用被寫進 MR113~116 的 tap 偏置值(OP[5:0] 幅值 + OP[6] 符號)。改一次值要靠 MRW 命令寫暫存器。
⚙️
Memory Controller 訓練演算法在 CPU/SoC
CPU/SoC 端的記憶體控制器在開機 Read Training(§4.17)階段跑演算法:掃 tap、量眼圖、找出讓眼開最大的那組係數,再用 MRW 寫回 DRAM。控制器有沒有實作、實作到幾個 tap / 掃多細,決定你能不能真的用到 on-die DFE。這就是這個模擬器右邊那條訓練管線在做的事。
🔧
BIOS / 韌體選項開關 + 參數在韌體
控制器的訓練程式碼包在 BIOS/UEFI 記憶體參考碼(MRC)裡。BIOS 決定:① DFE 開/關、② 自動訓練或吃使用者手動 tap、③ 掃描範圍與收斂目標、④ 把結果鎖進暫存器。Intel/AMD 平台各有自己的 MRC;沒開放對應選項,就算 DRAM 支援也用不到——這正是超頻要靠改韌體的原因。
一句話結論:DFE 電路在 DRAM 裡、找最佳值的訓練演算法在 控制器 裡、而開關與調法握在 BIOS/韌體 手上。三者缺一不可——所以「調 DFE」本質上是韌體工程,不是單純改個 BIOS 數字。(對照本模擬器:Tap 旋鈕=DRAM 暫存器值、訓練管線=控制器演算法、✨自動最佳化=BIOS 自動訓練。)
🎯 應力注入層(Sj / Rj / Vnoise)
因為它們是「合規測試的外加應力」,不是 DRAM 內部可程式的設定。 Sj / Rj / Vnoise 由
JESD79-5D Table 239(Rx Differential/Single-Ended Stressed Eye) 定義,是測試設備(BERT / AWG / 眼圖儀)
灌進 DUT 的訊號劣化,用來驗證接收器在最惡劣通道下仍能收斂——所以它們活在「測試規範」而非「Mode Register」。
對照:可程式 vs 不可程式。
• 有 MR:VrefDQ(MR10/11)、DFE tap(MR137/138)、DCA(MR166)、RTT 終端(MR34/35/32/33)——
這些是 DRAM 內部電路,controller 訓練時寫得進去,是你「調」的旋鈕。
• 無 MR:Sj / Rj / Vnoise——這是環境施加在你身上的壓力,DRAM 沒有暫存器去「設定我的隨機抖動」。
你能做的是反抗它(更好的 DFE/Vref/終端),不是設定它。
那模擬器為何給滑桿? 這裡把它們做成「可調應力源」=模擬不同品質的通道/供電/平台:滑桿拉高 = 你的主機板走線更爛、
供電更髒、平台更差。它壓的是眼圖的物理裕度(Sj/Rj 吃眼寬、Vnoise 吃眼高),對應 Table 239 的應力上限
(Sj 0.45 UIpp、Rj 0.04 UI RMS、Vnoise 125 mVpp)。調校目標永遠是「在給定應力下仍罩住 mask」,而非把應力設成 0。
ODT / RTT 動態終端寫入 → RTT_WR
DDR5 有 五個獨立 RTT 值,由 controller 依當前匯流排動作硬體自動切換(免 MRW,§5.3 / Table 187)。
下面四顆暫存器各自可調,但只有「生效」那顆(組)會塑形眼圖 —— 拖動待命的暫存器眼睛不動,切換模式才生效。
前三顆是 DQ 資料線終端(塑形眼高/電壓軸);第四顆 DQS_RTT_PARK 是選通線終端(塑形眼寬/時序軸),讀取時與 RTT_NOM_RD 同時生效。
0=Hi-Z(關)、1–7=RZQ/n(240Ω÷n)。阻抗需匹配通道特性阻抗:過高→反射殘留吃眼、過低→擺幅被分 SNR 降。
同一條 DQ 線,讀和寫的「誰在驅動、誰在終端」是相反的,所以終端阻抗必須隨方向即時切換:
• 寫入(controller→DRAM):DRAM 是接收端,開自身 RTT_WR 吸收反射、塑形「寫入眼」。切換時序 ODTLon_WR = CWL + offset 開、ODTLoff_WR = CWL + BL/2 + offset 關(Table 187)。
• 讀取(DRAM→controller):目標 DRAM 在驅動資料,Data-Termination-Disable = CL−1 後它自身終端關閉;遠端「讀取眼」由非目標 rank 的 RTT_NOM_RD 塑形。
• 閒置:匯流排停在 RTT_PARK(高阻,省電且抑制串擾),無資料眼。
純排程數字(CWL/CL/BL)只決定「何時切」,不進眼圖;真正塑形眼睛的是「切到哪一顆 RTT 的阻抗值」。這就是為何本模擬器把三顆暫存器分開、只讓生效那顆動眼 —— 忠實反映 dynamic ODT 的正交性。
⏱️ 時序耦合層
純排程 timing 不改變眼形。 CAS Latency(CL)、tRCD、tRP、tRAS、tRC 只決定「命令間隔幾個 clock、資料何時被取樣」,
不影響單一 UI 的電壓/時間眼開——把它們硬做成旋鈕壓眼睛就是假物理。設錯 CL 只會讓取樣點對不準(那是 read training 的事),不是眼睛閉合。
只有下面三種有真實「二階耦合」:不直接改眼形,而是改變物理環境,環境再回壓眼睛。全部錨定 JESD79-5D §4.13.4,
且預設值 = 出廠 SI 校準(逐位元不變),為可選的疊加應力。
FGR 細粒度刷新模式:tREFI 再 ÷2。與高溫(Tj>85)疊加會進一步拉高 refresh 佔空比 → 電源 droop → 壓眼高。
📡 這個速率下,主導的物理現象是什麼?
拖左邊的資料速率,這張卡即時排出當下最吃緊的訊號完整性(SI)現象。每條的長度 = 它對眼圖的即時貢獻(讀自左側模型的分項),紅框=此刻的主導瓶頸。眼高塌、眼寬塌、抖動變胖……頻率一拉高就是這些一起惡化——這張卡告訴你「先救哪一個」。
怎麼讀?速率翻倍 → f_CK 翻倍、1 UI = 1e6/資料率 對半砍,時間預算直接減半——這是純運動學(真實、非模型)。下方每條現象的數值則讀自左側眼圖模型的分項(ISI 眼高損 isiLostH、眼寬損 isiLostW、總抖動 jitterPP、Vref 餘裕 vrefPen、終端反射 odtPen),不是另算一套——所以這張卡的排序永遠和眼圖一致。條長 = 該現象「吃掉眼圖的量 ÷ 該軸 intrinsic 眼開」的比例。
模型誠實聲明:插入損耗(dB)用 導體集膚 √f + 介電 ∝f 的教科書通道模型換算,是工程直覺級,非某張實體 PCB 的 S 參數實測;ISI/抖動/Vref 分項來自本模擬器已校準的啟發式眼圖模型(非示波器量測)。真實某條通道的損耗要靠 VNA 量 S21、抖動要靠 示波器 TIE 分解 Rj/Dj、per-lane 餘裕要靠 DRAM MRR 讀回。這張卡教的是「哪個現象隨頻率主導、該用哪個旋鈕救」的因果,數值量級對、但非特定硬體實測。
👁️ 接收端眼圖(Rx Data Eye @ Slice)
紅色鑽石為 JEDEC 應力眼 mask(眼高 × 眼寬最小需求,Table 239–241)。綠/紅輪廓為本模型算出的實際眼開。實際眼須「罩住」mask 才通過。
實際眼開(通過)
實際眼開(不足)
JEDEC mask 最小需求
取樣中心 / UI 格線
眼高 Eye Height
—
mask ≥ — mV
🌡️ 溫度掃描:這顆設定的「熱牆」在幾度?
固定左側所有旋鈕,只把接面溫度 Tj 從 −40°C(液氮/乾冰)掃到 105°C(燒機),對每個溫度重跑一次模型。藍線=眼高 EH、紫線=眼寬 EW,兩條虛線是各自的 JEDEC mask 最低需求。曲線跌破虛線那一刻的溫度 = 熱牆(🔥 紅線)——超過它這顆料在這個速率就開不了。白色游標=你現在的 Tj。這正是超頻玩家問的:「我這套時序,水冷壓得住嗎?還是得上液氮?」
怎麼讀?升溫必定壓眼(熱雜訊 kT↑、漏電↑、相位噪聲↑),所以兩條線只會往右下走,不會回升——若你看到回升那是 bug。85°C 金色虛線=JEDEC 常溫刷新上限,跨過去 tREFI÷2(MR4 OP[2:0]=011B,85–90°C→2× refresh,PDF p73/216),EH 會有一段階梯式跳降。熱牆左邊=安全溫區、右邊=失效區;當前 Tj 離熱牆的距離就是你的熱裕度(thermal margin)。
三種「熱牆」情境:① 熱牆落在區間內(如 55°C)→ 這速率吃散熱,風冷不夠、要水冷甚至更冷;② 全域皆過(−40~105 都在虛線上)→ 不受溫度限制,散熱不是瓶頸、可放心拉別的旋鈕;③ 連 −40°C 都不過 → 不是溫度問題,液氮也救不動,得降速或改 Vref/DFE/ODT。
模型誠實聲明:曲線用本模擬器的線性熱漂移教學模型(EH −0.55 mV/°C、EW −0.0007 UI/°C,以 85°C 為基準)+跨 85°C 的刷新階梯。真實漏電對溫度呈指數(每~10°C 倍增)、熱雜訊電壓 ∝√(Tj+273K),此處為便於逐位元驗證只做基準點附近線性近似。真要量某顆料的實際熱牆:把 DIMM 放溫控箱(thermal chamber)或熱電致冷 TEC 平台掃溫,每個溫度點跑 MRR per-DQ margin 讀回或 BER shmoo,看 margin 歸零的溫度——那才是矽料實測熱牆,數量級與此圖一致但非同一顆料的實測值。
🌡️ 溫度到底怎麼被讀出來?(真實量測路徑)
上面滑桿的 Tj 是模擬輸入。但真硬體裡沒有人「設定」溫度——是 DRAM 晶粒內建的溫度感測器自己量、寫進 MR4,控制器再週期性讀回來決定刷新率。這張卡把 JESD79-5D §4.14 的真實讀溫路徑攤開:感測器→MR4 編碼→控制器輪詢,全部錨定 PDF 頁碼。這回答你的直覺問題:「那顆溫度數字,BIOS 實際上是怎麼拿到的?」
① 感測器把溫度編成 MR4:OP[2:0],五級刷新階梯
010B
80–85°C
tREFI ×1(1st 門檻 80°C:預警,系統可提早散熱)
011B
85–90°C
tREFI ÷2(2× 刷新)← 本模擬器跨 85°C 的階梯就在這
100B
90–95°C
tREFI ÷2(3rd 門檻 90°C:預警 4th)
101B
>95°C
tREFI ÷2 + 節流(5th 門檻 95°C:throttle 保命;>95°C 可能失去資料完整性)
四個門檻 80 / 85 / 90 / 95°C(MR4:OP[5]=1 寬範圍感測器再加 75 / 100°C 共六門檻,100°C→強制關機)。85°C=切 2× 刷新、95°C=活動節流、100°C=緊急關機。另 MR4:OP[7]=TUF(Temperature Update Flag):只要 OP[2:0] 自上次讀取後變過就置 1,控制器一讀 MR4 就知道「溫度跳格了」。(§4.14.2 / Table 77,PDF p215–216)
② 控制器要多快讀一次 MR4?靠這條 JEDEC 公式
TempGradient × (ReadInterval + tTSI + SysRespDelay) ≤ TempMargin
範例:升溫 10°C/s、SysResp 100ms
ReadInterval ≤ 68 ms
感測器每 tTSI≤32ms 更新一次 MR4(連 Self-Refresh 狀態也照更新)。控制器讀 MR4 的頻率不能太慢,否則溫度已經衝過門檻 2°C 系統還沒反應。代入 10°C/s ×(ReadInterval+32ms+100ms)≤2°C → ReadInterval ≤ 68ms:溫度爬越快、系統反應越慢,就得讀越勤。感測器精度規格:2nd 門檻負側最低 78°C、4th 門檻負側最低 88°C(Table 75,設計/特性驗證,非量產測試)。(§4.14 / Table 75 / Figure 78,PDF p214–215)
③ 這條「讀 MR4」路徑 vs 前面眼圖的三種量法
前一張眼圖卡講的三種量法(示波器 BERT / MRR per-DQ / on-die EOM)量的是眼開多大;這裡的 MR4 溫度讀回量的是晶粒多熱——兩者正交但相關:溫度上去→眼縮小。實務上 BIOS/記憶體控制器兩條都在跑:一條週期讀 MR4 調刷新率與節流,一條(開機時)跑 MRR 邊界訓練定 Vref/DFE。本模擬器的 Tj 滑桿=把 MR4 讀回的溫度當成你手動輸入,好讓你看「同一顆料在不同溫度下眼圖怎麼變」。真硬體是感測器自動餵這個數字,不是人設的。
📊 Per-DQ Margin(模擬 MRR per-DQ 讀回)
上面眼圖的單一 EH/EW 其實是各 DQ lane 眼開的平均。量產 BIOS 用 MRR per-DQ margin 讀回(§4.17 Read Training)逐根 DQ 掃邊界 → 得到 lane-to-lane 分散。真正決定能不能開機的是最差那根 lane,不是平均。每根 DQ 各有自己的 VrefDQ 殘差(MR10)、封裝/PCB 走線偏斜、鄰線串音——這就是為何量產要逐 lane 訓練。
DRAM 位寬
lane margin > 0(通過 mask)
lane margin < 0(該 lane 失敗)
DQS strobe(byte 時序 margin)
平均線(== 眼圖 EH/EW)
怎麼讀這張圖?每根 DQ 兩條 bar:上排眼高 margin (mV)、下排眼寬 margin (UI),高度 = 距 JEDEC mask 的裕度(正=綠通過、負=紅失敗)。紫色 DQS bar 是每顆選通線(x16 = DQSL 管 DQ0–7 / DQSU 管 DQ8–15、x8/x4 = 單顆 DQS)的時序 margin,等於該 byte 所轄 DQ 眼寬 margin 的平均——strobe 對齊整個 byte,故看的是集中度。藍色虛線是全 lane 平均,逐位元等於上方眼圖的 EH/EW(本圖只是把那一個數字「攤開成 N 根」,不改動眼圖數學)。最差 lane 會閃紅框——那就是 shmoo 要重點掃、BIOS 要加 margin 的地方。
模型誠實聲明:lane-to-lane 分散用固定「矽指紋」(三角級數零和 pattern,非亂數)代表某顆 DIMM 的固定走線偏斜;分散量隨速率/電壓雜訊/抖動放大,是教學級啟發式,非真實 silicon 的 per-DQ 實測。真實 per-DQ margin 要靠 DRAM MRR 讀回或示波器逐 lane 探量。關鍵教學點——平均嚴格等於 aggregate、最差 lane 才是 gate——與量產一致。
🔬 BER Shmoo 圖(VrefDQ × DQ delay 二維掃描)
實驗室量眼睛的真實流程:不是讀一個數字,而是在 VrefDQ(垂直)× DQ delay(水平) 的每一個取樣點都跑一段 pattern、數錯幾個 bit → 得到該點的 BER,掃出整張圖。顏色 = 該取樣點的 BER:藍/綠=乾淨(BER→0)、黃→橙→紅=開始出錯。虛線是 BER 十進位等高線,亮綠線 = BER 1e-16 等高線,就是「眼」的邊界。
目標 BER 判準
眼內(BER≪1e-16,判緣乾淨)
邊緣(BER 接近 1e-16)
眼外(BER 高,開始誤碼)
1e-16 等高線=眼輪廓
這張圖怎麼把「一個 EH/EW 數字」還原成量測? 亮綠等高線在垂直軸的截距 = 眼高 EH、在水平軸的截距 = 眼寬 EW——所以上面眼圖那兩個數字,其實只是這條掃描等高線在兩個軸上的兩個點。實驗室裡這叫 Vref×delay shmoo(或 2D BER contour):對每個 (Vref, delay) 格點灌 3×'1'+3×'0' clock-like pattern(JESD79-5D Table 239 NOTE 3)數 bit error,取 BER = 1e-16 輪廓的高度/寬度。硬體上可不拆板、直接讀 DRAM 的 MRR per-DQ margin 得到同一條輪廓。本圖的 BER 場由眼高/眼寬用雙軸高斯 Q 函數反推(½·erfc(Q/√2)),已用 headless 驗證 1e-16 輪廓精準等於模型 EH/EW(誤差 0.000)——是教學級模型,非示波器實測,但掃描→取輪廓的方法學與實驗室一致。
上方三個控制:① 目標 BER 判準切 1e-12/1e-16/1e-18——同一條浴缸曲線切不同高度,判準越嚴(1e-18)眼越小、越鬆(1e-12)眼越大,「眼開多大」永遠相對於你要的 BER;② 非對稱眼把 t1/t3 post-cursor DFE 殘差不平衡打進去,輪廓沿中心線水平剪切歪斜(保 mid-height 眼寬總量),對應真實 DFE tap 沒收斂對稱時的資料相依時序偏移;③ 重播掃描逐 Vref 行 raster 重畫,還原 BERT/示波器實際「一行一行掃」的過程。
同一條輪廓,實驗室有三種量法(成本/精度/能不能不拆板 各異)
🔬 示波器 BERT shmoo 拆板・金標準
高速示波器 + 誤碼儀(BERT)+ 探針
- DQ/DQS 焊點直接探量,掃 Vref×delay 每格數 bit error
- 真・BER,可量到
1e-18 尾部(需灌足夠 UI)
- 看得到實體眼圖波形、jitter 分解(Rj/Dj)
- 要拆板/打點、探針負載會擾動 SI、單通道貴又慢
對應本圖:整張熱圖+等高線的物理真值來源
📗 DRAM MRR 讀回 margin 不拆板・BIOS 可跑
控制器命令 DRAM 自報 per-DQ 邊界(MPC/MRR)
- 掃
VrefDQ (MR10) + 內部 delay,讀回每根 DQ 過/不過
- 量產/BIOS 訓練實際用的就是這條路(§4.17 Read Training)
- 不拆板、全 DQ 平行、幾毫秒完成
- 解析度受 MR 步階限制、看不到波形、BER 深度靠外推
對應本圖:亮綠1e-16 輪廓的截距(EH/EW 數字本身)
📡 On-die 眼監測 (EOM) 內建・可常駐
PHY 內建 eye-opening monitor / margining(跑機時可查)
- PHY 內部旁路取樣器,即時回報眼開度
- 可在 Mission Mode 持續監測老化/溫漂 margin
- 免外部儀器、可做自適應再訓練觸發
- 是相對指標非絕對 BER、各家 IP 定義不一、需校準
對應本圖:中心往外的margin 收縮速率(浴缸斜率)
三者關係:示波器 BERT 是真值(能看波形、量到深尾 BER,但要拆板);MRR 讀回是量產路徑(BIOS 就在跑,不拆板拿到同一條輪廓的截距);on-die EOM 是常駐哨兵(跑機時持續看 margin 有沒有被溫度/老化吃掉)。三種量的是同一個眼,差別在成本、精度與「要不要拆板」。本模擬器畫的是這條輪廓的教學級重建,非任一儀器實測值。
🚦 訓練序列 Pass / Fail
DDR5 上電後的初始化訓練順序(§3.3 → §4.17–4.23)。模擬器逐階評估裕度,第一個裕度為負的階段即為「卡關點」,其後階段標為未執行。
模型依據:眼高/眼寬 mask = Table 239/240/241(Rx Stressed Eye,PDF p396–398);旋鈕範圍 = Table 130(VrefDQ) / Table 137/138(DFE) / Table 166(DCA);訓練序列 = §4.17 Read Training ~ §4.23 ZQ Calibration。10000–16000 MT/s 為文件規格外(>DDR5-9200)之超頻外推區,mask 以 8400–9200 斜率線性外推,僅供工程直覺,非 JEDEC 保證值。