Skip to Content
面板暫存器定義

暫存器定義

暫存器表給的是位元組,這個面板把位元組解成具名的位元欄位。所以它要和暫存器表 一起看才有意義——單獨一個解碼器,沒有東西可解。

左邊是暫存器表,右邊的暫存器定義面板顯示 0x2A CLK_STATUS:右上是 RW · VOLATILE,下一行是簡述,view: PLL mode,下面的欄位表格列出 BW 0x0、CLK_SEL 0x3 (PLL)
把游標移到左邊任一格,右邊就解出那一格的欄位(這一格同時帶著 VOLATILE、簡述、view 與列舉值)

怎麼用

  1. 載入定義檔:regdef load <檔案路徑>,或 ☰ → File → Load REG DEF file。
  2. 把游標移到暫存器表的任何一格。
  3. 右邊就會顯示那個暫存器的名稱、可讀寫性、位元條,以及逐欄位的表格:
bits │ val │ field ─────┼─────┼────────────────────── [7:4]│ 0x0 │ BW │ │ Loop bandwidth [3:2]│ 0x3 │ CLK_SEL (PLL) [0] │ 1 │ EN

bits 是位元範圍,val 是這個欄位的值(單一位元顯示 0/1,多位元顯示 0x…,值為 0 時淡色), field 是欄位名稱,下一行是說明。名稱太長會在 _ 處換行(最多三行),不會被截掉。 名稱是 RESERVED/RSVD 的欄位整列淡色;如果它讀到的值不是 0,值會亮起來——那通常值得留意。 面板窄的時候不畫框線與表頭,也不顯示說明行,欄位順序不變。 上面的框線是終端機版的樣子;視窗版只在表頭下畫一條細線、欄與欄之間不畫直線,改用每個欄位交替的底色區分(一個欄位換行出來的續行、說明行跟它同一個顏色),WRITE/REVERT 是按鈕,有待寫入的變更才會亮起。

位元條上可以直接點某個位元切換,按 Space 也可以;改好之後 WRITE 送出, REVERT 放棄。被改到的欄位在表格裡會變色。唯讀(RO)的暫存器在位元條下面顯示一行灰色的 read-only, 點位元不會有作用。對 W1C(寫 1 清除)與 W0C(寫 0 清除)的暫存器會先跳確認框——那類暫存器寫下去 就回不來。

可讀寫性(access)有這幾種:RW、RO、WO、W1C、RSVD,以及定義檔格式 1.3 新增的 W0C。 W0C 與 W1C 一樣屬於「寫入有副作用」:面板標籤同色,指令列 wr/set/clr 會記一則警告, dump load 預設略過它;含 W0C 的定義檔要宣告 spec_version 1.3,舊版 nexus 打不開這種檔案。

列舉值、簡述與 VOLATILE(定義檔格式 1.2)

定義檔可以替欄位列出每個值的意義(values)、替暫存器與欄位寫一行簡述(brief),並標記「這個暫存器會自己變動」 (volatile)。面板這樣顯示:

  • 欄位列:[3:2] │ 0x3 │ CLK_SEL (PLL)——名稱後面括號裡是那個值的名字。定義檔沒列到的值顯示 (?) (例如 DIV (?)),那不是錯誤:列舉值不必窮舉。名字放不下那一列時,(…) 會改放在欄位下面自成一列。
  • 簡述:欄位的 brief 是欄位名稱下面那一行說明(沒有 brief 時改顯示 desc;desc 只是把名稱的底線換成空白時就不顯示)。 暫存器的 brief 在標題 0x2A CLK_STATUS 下面獨立一行。
  • VOLATILE:標題列右邊,和 RW/RO 並列(RW · VOLATILE)。這種暫存器每次讀都可能不一樣,dump diff 會略過它、dump load 預設不寫它(見暫存器表的 dump 一節)。

選列舉值

把位元游標(←/→,或點位元格)移到有列舉值的欄位,按鈕列會提示 Enter = choose value。 按 Enter 會跳出清單(0 XTAL、3 PLL…),選好之後只改位元條上那個欄位的位元,其他位元不動—— 它跟點位元一樣只是在位元條上「待寫入」,還沒送到晶片,要照常按 WRITE 才寫,REVERT 放棄。 W1C/W0C 的確認框、RO/RSVD 暫存器的拒絕、沒讀過的位元組不能改,都和手動點位元完全一樣。

在有列舉值的欄位上 Enter 是開清單,所以想直接打整個位元組時,改在這個欄位上打十六進位字元 (焦點要在這個面板、指令列要是空的)就會進入打字模式;點值格也可以。

依條件切換的欄位組(views)

有些暫存器的欄位定義隨另一個位元而變(例如 bit 7 = 1 時是 HDCP 模式)。定義檔把它寫成 views:

  • 位元條下面、欄位表格上面是 view: PLL mode (0x2A & 0x0C == 0x0C)——目前生效的欄位組與它的條件。
  • 自動選擇只看暫存器表已經讀到的值,面板不會為了判斷條件去讀晶片(條件在同一顆晶片的另一個 bank 時, 讀的是那個 bank 已經快取的值——你要先切到那個 bank 讀過一次)。條件用到的暫存器還沒讀過時, 標題會是 view: unknown (condition register 0x45 not read),並先顯示預設欄位組——不會假裝條件成立或不成立。
  • 在位元條上改到條件位元,還沒按 WRITE 欄位組就會跟著切換,讓你看到寫下去之後會是哪一組。
  • 按 V(要先讓暫存器定義面板取得焦點,而且指令列是空的)或直接點 view: 那一行,手動循環「自動 → 各個 view → 預設 → 自動」; 手動時標題結尾會有 [manual]。條件寫得不完整、無法判斷的 view 只能手動選到,標題是 (condition unknown);沒有可用欄位的 view 顯示 no usable fields。
  • 沒有 views 的暫存器完全不受影響。

⚠ 顯示「NO DEFINITION」不一定是檔案壞了

定義檔是逐 (裝置, 頁, 位移) 對應的,而且頁是用 8-bit 寫入位址宣告的。 所以:

  • 定義檔宣告的頁位址是 0xB0,對到的是匯流排上的 7-bit 0x58。
  • 對不上那個裝置的定義檔,不管把游標移到哪一格都是 NO DEFINITION。 面板下方會印出它查了什麼(bus/slave/bank/offset),拿那組值去對定義檔即可。
  • 同一顆 IC 的不同 bank 往往定義不同的暫存器。查不到時先確認 bank 對不對。

終端機版

終端機版,左右並排的暫存器表與暫存器定義面板

相關指令

regdef——用法見指令參考。定義檔格式與編輯器隨 PDK 一起提供;不想下載也可以直接用下面的線上版。

線上定義檔編輯器

開啟線上定義檔編輯器(新分頁)

編輯器是單一個網頁:可以開啟、編輯、驗證定義檔,也能從表格或 PDF 文字匯入,存回 .json。 和 PDK 裡的是同一份編輯器,離線時直接雙擊也能用。

  • 檔案留在你的瀏覽器裡:開啟與存檔都只在本機進行,不會上傳到這個網站;草稿存在這個瀏覽器的儲存空間, 換瀏覽器或清掉網站資料就看不到。
  • AI 功能是選用的:它呼叫的是你自己電腦上的 Ollama(http://localhost:11434),文字不經過這個網站。 瀏覽器要放行這個網站的來源才連得上:把環境變數 OLLAMA_ORIGINS 設成 https://nexus.pgl-tek.com 後重啟 Ollama (編輯器裡的提示寫的是 *,也可以,但那會讓你瀏覽的任何網站都能呼叫本機的 Ollama)。 較新的 Chrome/Edge 還會跳出「存取此裝置上的其他應用程式與服務」之類的提示,要選允許。